diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..6313b56c5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/CHANGELOG.md b/CHANGELOG.md index b71bc516d..2ca42d564 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,116 @@ # Release History +## 2.2.0 (Unreleased) + +### Features Added + +- OpenAI.Audio: + - Enabled support for streaming audio transcriptions: + - Added new methods to `AudioClient`: + - `TranscribeAudioStreaming` and `TranscribeAudioStreamingAsync` + - Added new types of `StreamingAudioTranscriptionUpdate` to work with streaming transcriptions: + - `StreamingAudioTranscriptionTextDeltaUpdate` + - `StreamingAudioTranscriptionTextDoneUpdate` + - Added the `TranscriptionTokenLogProbabilities` property to `AudioTranscription` to represent token-level log probability information. + - Added the `AudioTranscriptionIncludes` enum and `Includes` property to `AudioTranscriptionOptions` to request additional information in the transcription response. + - Added new voices to `GeneratedSpeechVoice`. + - Added the `Instructions` property to `SpeechGenerationOptions` to control the voice of the generated audio with additional instructions. +- OpenAI.Batch: + - Added new `Rehydrate` method overloads that receive a batch ID instead of rehydration token. +- OpenAI.Chat: + - Added new methods to `ChatClient`: + - `DeleteChatCompletion` and `DeleteChatCompletionAsync` + - `GetChatCompletion` and `GetChatCompletionAsync` + - Added `Aac` format to `ChatOutputAudioFormat`. + - Added new voices to `ChatOutputAudioVoice`. +- OpenAI.Evals: + - Introduced the new `EvaluationClient` to support the Evaluations API with protocol methods for the following operations: + - `CreateEvaluation` and `CreateEvaluationAsync` + - `GetEvaluation` and `GetEvaluationAsync` + - `GetEvaluations` and `GetEvaluationsAsync` + - `UpdateEvaluation` and `UpdateEvaluationAsync` + - `DeleteEvaluation` and `DeleteEvaluationAsync` + - `CreateEvaluatinRun` and `CreateEvaluationRunAsync` + - `GetEvaluationRun` and `GetEvaluationRunAsync` + - `GetEvaluationRuns` and `GetEvaluationRunsAsync` + - `CancelEvaluationRun` and `CancelEvaluationRunAsync` + - `DeleteEvaluationRun` and `DeleteEvaluationRunAsync` + - `GetEvaluationRunOutputItem` and `GetEvaluationRunOutputItemAsync` + - `GetEvaluationRunOutputItems` and `GetEvaluationRunOutputItemsAsync` +- OpenAI.FineTuning: + - Added new methods to `FineTuningClient`: + - `GetFineTuningCheckpointPermissions` and `GetFineTuningCheckpointPermissionsAsync` + - `CreateFineTuningCheckpointPermission` and `CreateFineTuningCheckpointPermissionAsync` + - `DeleteFineTuningCheckpointPermission` and `DeleteFineTuningCheckpointPermission` + - `PauseFineTuningJob` and `PauseFineTuningJobAsync` + - `ResumeFineTuningJob` and `ResumeFineTuningJobAsync` + - Added new experimental types to support fine-tuning workflows. +- OpenAI.Images: + - Added the `Usage` property to `GeneratedImageCollection` to represent image token usage information. + - Added the `Background` property to `ImageGenerationOptions` to set transparency for the background of the generated image(s). + - Added the `ModerationLevel` property to `ImageGenerationOptions` to control the content-moderation level for generated image(s). + - Added the `OutputCompressionFactor` property to `ImageGenerationOptions` to set the compression level (0-100%) for the generated images. + - Added the `OutputFileFormat` property to `ImageGenerationOptions` to set the file format in which the generated images are returned. + - Added support for new values to the `GeneratedImageSize` enum. +- OpenAI.Responses: + - Added new methods to the `OpenAIResponseClient`: + - `CancelResponse` and `CancelResponseAsync` + - `GetResponseStreaming` and `GetResponseStreamingAsync`. + - Added `Linux` property to `ComputerToolEnvironment`. + - Added `Background` property to `ResponseCreationOptions` to support background mode. + - Added `SequenceNumber` property to `StreamingResponseUpdate` to support background mode while streaming. + - Added `InputTokenDetails` property to `ResponseTokenUsage` to represent token usage information. + - Added `EncryptedContent` property to `ReasoningResponseItem` to represent the encrypted content of the reasoning item. +- OpenAI.VectorStores: + - Added new methods to `VectorStoreClient`: + - `RetrieveVectorStoreFileContent` and `RetrieveVectorStoreFileContentAsync` + - `SearchVectorStore` and `SearchVectorStoreAsync` + - `UpdateVectorStoreFileAttributes` and `UpdateVectorStoreFileAttributes` + +### Bugs fixed + +- OpenAI.Files: + - Added a `SizeInBytesLong` property to `OpenAIFile` to correctly represent the size of a file. +- OpenAI.Responses: + - Fixed an issue where setting the `ReasoningSummaryVerbosity` property of `ResponseReasoningOptions` was sending the wrong property to the service. + - Fixed an issue with the `CreateInputFilePart` method of `ResponseContentPart` not being able to send files as `BinaryData`. + +### Breaking changes in Preview APIs + +- Removed the implicit operator from all models that converts a model to `BinaryContent`. +- Removed the explicit operator from all models that converts a `ClientResult` to a model. +- OpenAI: + - Renamed the `GetRealtimeConversationClient` method from `OpenAIClient` to `GetRealtimeClient`. +- OpenAI.FineTuning: + - Renamed the `FineTuningJobOperation` class to `FineTuningJob`. + - Removed protocol methods for `CreateFineTuningJob`, `GetJob`, and `GetJobs` and added convenience methods for them. +- OpenAI.Realtime: + - Updated namespace from `OpenAI.Conversations` to `OpenAI.Realtime`. All APIs and types related to real-time conversations have been moved to the new `OpenAI.Realtime` namespace. +- OpenAI.Responses: + - Removed the `SummaryTextParts` property of `ReasoningResponseItem` in favor a new property called `SummaryParts`. + - Removed the following public constructors: + - `FileSearchCallResponseItem(IEnumerable queries, IEnumerable results)` + - `FunctionCallOutputResponseItem(string callId, string functionOutput)` + - `FunctionCallResponseItem(string callId, string functionName, BinaryData functionArguments)` + - Made several properties read-only that were previously settable: + - `CallId` and `Output` in `ComputerCallOutputResponseItem` + - `Action`, `CallId`, and `Status` in `ComputerCallResponseItem` + - `Results` and `Status` in `FileSearchCallResponseItem` + - `CallId` in `FunctionCallOutputResponseItem` + - `CallId` in `FunctionCallResponseItem` + - Changed the following property types: + - `Attributes` in `FileSearchCallResult` is now `IReadOnlyDictionary` instead of `IDictionary`. + - `Status` properties are now nullable in multiple response item types. + - `Code` in `ResponseError` is now `ResponseErrorCode` instead of `string`. + - Renamed the `WebSearchToolContextSize` extensible enum to `WebSearchContextSize`. + - Renamed the `WebSearchToolLocation` class to `WebSearchUserLocation`. +- OpenAI.VectorStores: + - Renamed method parameters from `vectorStore` to `options` in `CreateVectorStore` and `ModifyVectorStore` methods in `VectorStoreClient`. + ## 2.2.0-beta.4 (2025-03-18) +### Features Added + - OpenAI.Chat: - Enabled support for file inputs. When using models with vision capabilities, you can now also provide PDF files as inputs, either as a file ID or as base64-encoded data. ([aaa924e](https://github.com/openai/openai-dotnet/commit/aaa924ecde1b2281257f26824fea038a3b1efe35)) - Added the `CreateFilePart(string fileId)` and `CreateFilePart(BinaryData fileBytes, string fileBytesMediaType, string filename)` factory methods to `ChatMessageContentPart`. diff --git a/README.md b/README.md index 026fb5759..73c8ca888 100644 --- a/README.md +++ b/README.md @@ -73,15 +73,15 @@ While you can pass your API key directly as a string, it is highly recommended t If you need to connect to an alternative API endpoint (for example, a proxy or self-hosted OpenAI-compatible LLM), you can specify a custom base URL and API key using the `ApiKeyCredential` and `OpenAIClientOptions`: ```csharp -using OpenAI.Chat; using OpenAI; +using OpenAI.Chat; -var client = new ChatClient( - model: CHAT_MODEL, - credential: new ApiKeyCredential(Environment.GetEnvironmentVariable("API_KEY") ?? ""), - options: new OpenAIClientOptions - { - Endpoint = new Uri(BASE_URL), +ChatClient client = new( + model: "MODEL_NAME", + credential: new ApiKeyCredential(Environment.GetEnvironmentVariable("OPENAI_API_KEY")), + options: new OpenAIClientOptions() + { + Endpoint = new Uri("BASE_URL") } ); ``` @@ -92,20 +92,22 @@ Replace `CHAT_MODEL` with your model name and `BASE_URL` with your endpoint URI. The library is organized into namespaces by feature areas in the OpenAI REST API. Each namespace contains a corresponding client class. -| Namespace | Client class | Notes | -| ------------------------------|------------------------------|-------------------------------------------------------------------| -| `OpenAI.Assistants` | `AssistantClient` | ![Experimental](https://img.shields.io/badge/experimental-purple) | -| `OpenAI.Audio` | `AudioClient` | | -| `OpenAI.Batch` | `BatchClient` | ![Experimental](https://img.shields.io/badge/experimental-purple) | -| `OpenAI.Chat` | `ChatClient` | | -| `OpenAI.Embeddings` | `EmbeddingClient` | | -| `OpenAI.FineTuning` | `FineTuningClient` | ![Experimental](https://img.shields.io/badge/experimental-purple) | -| `OpenAI.Files` | `OpenAIFileClient` | | -| `OpenAI.Images` | `ImageClient` | | -| `OpenAI.Models` | `OpenAIModelClient` | | -| `OpenAI.Moderations` | `ModerationClient` | | -| `OpenAI.Responses` | `OpenAIResponseClient` | | -| `OpenAI.VectorStores` | `VectorStoreClient` | ![Experimental](https://img.shields.io/badge/experimental-purple) | +| Namespace | Client class | +| ------------------------------|------------------------------| +| `OpenAI.Assistants` | `AssistantClient` | +| `OpenAI.Audio` | `AudioClient` | +| `OpenAI.Batch` | `BatchClient` | +| `OpenAI.Chat` | `ChatClient` | +| `OpenAI.Embeddings` | `EmbeddingClient` | +| `OpenAI.Evals` | `EvaluationClient` | +| `OpenAI.FineTuning` | `FineTuningClient` | +| `OpenAI.Files` | `OpenAIFileClient` | +| `OpenAI.Images` | `ImageClient` | +| `OpenAI.Models` | `OpenAIModelClient` | +| `OpenAI.Moderations` | `ModerationClient` | +| `OpenAI.Realtime` | `RealtimeClient` | +| `OpenAI.Responses` | `OpenAIResponseClient` | +| `OpenAI.VectorStores` | `VectorStoreClient` | ### Using the async API diff --git a/api/OpenAI.net8.0.cs b/api/OpenAI.net8.0.cs index 12934abe8..6b8bc9a1b 100644 --- a/api/OpenAI.net8.0.cs +++ b/api/OpenAI.net8.0.cs @@ -14,15 +14,17 @@ public class OpenAIClient { public virtual ChatClient GetChatClient(string model); public virtual EmbeddingClient GetEmbeddingClient(string model); [Experimental("OPENAI001")] + public virtual EvaluationClient GetEvaluationClient(); + [Experimental("OPENAI001")] public virtual FineTuningClient GetFineTuningClient(); public virtual ImageClient GetImageClient(string model); public virtual ModerationClient GetModerationClient(string model); public virtual OpenAIFileClient GetOpenAIFileClient(); public virtual OpenAIModelClient GetOpenAIModelClient(); - public virtual Responses.OpenAIResponseClient GetOpenAIResponseClient(); - public virtual Responses.OpenAIResponseClient GetOpenAIResponseClient(string model); + [Experimental("OPENAI001")] + public virtual OpenAIResponseClient GetOpenAIResponseClient(string model); [Experimental("OPENAI002")] - public virtual RealtimeConversation.RealtimeConversationClient GetRealtimeConversationClient(string model); + public virtual RealtimeClient GetRealtimeClient(); [Experimental("OPENAI001")] public virtual VectorStoreClient GetVectorStoreClient(); } @@ -32,6 +34,11 @@ public class OpenAIClientOptions : ClientPipelineOptions { public string ProjectId { get; set; } public string UserAgentApplicationId { get; set; } } + [Experimental("OPENAI001")] + public class OpenAIContext : ModelReaderWriterContext { + public static OpenAIContext Default { get; } + protected override bool TryGetTypeBuilderCore(Type type, out ModelReaderWriterTypeBuilder builder); + } } namespace OpenAI.Assistants { [Experimental("OPENAI001")] @@ -48,8 +55,14 @@ public class Assistant : IJsonModel, IPersistableModel { public float? Temperature { get; } public ToolResources ToolResources { get; } public IReadOnlyList Tools { get; } - public static explicit operator Assistant(ClientResult result); - public static implicit operator BinaryContent(Assistant assistant); + [Experimental("OPENAI001")] + protected virtual Assistant JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual Assistant PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class AssistantClient { @@ -243,15 +256,27 @@ public class AssistantCreationOptions : IJsonModel, IP public float? Temperature { get; set; } public ToolResources ToolResources { get; set; } public IList Tools { get; } - public static explicit operator AssistantCreationOptions(ClientResult result); - public static implicit operator BinaryContent(AssistantCreationOptions assistantCreationOptions); + [Experimental("OPENAI001")] + protected virtual AssistantCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual AssistantCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class AssistantDeletionResult : IJsonModel, IPersistableModel { public string AssistantId { get; } public bool Deleted { get; } - public static explicit operator AssistantDeletionResult(ClientResult result); - public static implicit operator BinaryContent(AssistantDeletionResult assistantDeletionResult); + [Experimental("OPENAI001")] + protected virtual AssistantDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual AssistantDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class AssistantModificationOptions : IJsonModel, IPersistableModel { @@ -265,8 +290,14 @@ public class AssistantModificationOptions : IJsonModel, IEquatable, IJsonModel, IPersistableModel { @@ -281,14 +312,20 @@ public class AssistantResponseFormat : IEquatable, IEqu public override bool Equals(object obj); [EditorBrowsable(EditorBrowsableState.Never)] public override int GetHashCode(); + [Experimental("OPENAI001")] + protected virtual AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); [EditorBrowsable(EditorBrowsableState.Never)] public static bool operator ==(AssistantResponseFormat first, AssistantResponseFormat second); - public static explicit operator AssistantResponseFormat(ClientResult result); - public static implicit operator BinaryContent(AssistantResponseFormat assistantResponseFormat); [EditorBrowsable(EditorBrowsableState.Never)] public static implicit operator AssistantResponseFormat(string plainTextFormat); [EditorBrowsable(EditorBrowsableState.Never)] public static bool operator !=(AssistantResponseFormat first, AssistantResponseFormat second); + [Experimental("OPENAI001")] + protected virtual AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); [EditorBrowsable(EditorBrowsableState.Never)] bool IEquatable.Equals(AssistantResponseFormat other); [EditorBrowsable(EditorBrowsableState.Never)] @@ -301,19 +338,38 @@ public class AssistantThread : IJsonModel, IPersistableModel Metadata { get; } public ToolResources ToolResources { get; } - public static explicit operator AssistantThread(ClientResult result); - public static implicit operator BinaryContent(AssistantThread assistantThread); + [Experimental("OPENAI001")] + protected virtual AssistantThread JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual AssistantThread PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class CodeInterpreterToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { - public new static explicit operator CodeInterpreterToolDefinition(ClientResult result); - public static implicit operator BinaryContent(CodeInterpreterToolDefinition codeInterpreterToolDefinition); + public CodeInterpreterToolDefinition(); + [Experimental("OPENAI001")] + protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class CodeInterpreterToolResources : IJsonModel, IPersistableModel { public IList FileIds { get; } - public static explicit operator CodeInterpreterToolResources(ClientResult result); - public static implicit operator BinaryContent(CodeInterpreterToolResources codeInterpreterToolResources); + [Experimental("OPENAI001")] + protected virtual CodeInterpreterToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual CodeInterpreterToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct FileSearchRanker : IEquatable { @@ -335,32 +391,58 @@ public class FileSearchRankingOptions : IJsonModel, IP public FileSearchRankingOptions(float scoreThreshold); public FileSearchRanker? Ranker { get; set; } public float ScoreThreshold { get; set; } - public static explicit operator FileSearchRankingOptions(ClientResult result); - public static implicit operator BinaryContent(FileSearchRankingOptions fileSearchRankingOptions); + [Experimental("OPENAI001")] + protected virtual FileSearchRankingOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FileSearchRankingOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class FileSearchToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { + public FileSearchToolDefinition(); public int? MaxResults { get; set; } public FileSearchRankingOptions RankingOptions { get; set; } - public new static explicit operator FileSearchToolDefinition(ClientResult result); - public static implicit operator BinaryContent(FileSearchToolDefinition fileSearchToolDefinition); + [Experimental("OPENAI001")] + protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class FileSearchToolResources : IJsonModel, IPersistableModel { public IList NewVectorStores { get; } public IList VectorStoreIds { get; } - public static explicit operator FileSearchToolResources(ClientResult result); - public static implicit operator BinaryContent(FileSearchToolResources fileSearchToolResources); + [Experimental("OPENAI001")] + protected virtual FileSearchToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FileSearchToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class FunctionToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { + public FunctionToolDefinition(); public FunctionToolDefinition(string name); public string Description { get; set; } public string FunctionName { get; set; } public BinaryData Parameters { get; set; } public bool? StrictParameterSchemaEnabled { get; set; } - public new static explicit operator FunctionToolDefinition(ClientResult result); - public static implicit operator BinaryContent(FunctionToolDefinition functionToolDefinition); + [Experimental("OPENAI001")] + protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class MessageCollectionOptions { @@ -395,9 +477,15 @@ public abstract class MessageContent : IJsonModel, IPersistableM public static MessageContent FromImageFileId(string imageFileId, MessageImageDetail? detail = null); public static MessageContent FromImageUri(Uri imageUri, MessageImageDetail? detail = null); public static MessageContent FromText(string text); - public static explicit operator MessageContent(ClientResult result); - public static implicit operator BinaryContent(MessageContent messageContent); + [Experimental("OPENAI001")] + protected virtual MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public static implicit operator MessageContent(string value); + [Experimental("OPENAI001")] + protected virtual MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class MessageContentUpdate : StreamingUpdate { @@ -415,28 +503,52 @@ public class MessageCreationAttachment : IJsonModel, public MessageCreationAttachment(string fileId, IEnumerable tools); public string FileId { get; } public IReadOnlyList Tools { get; } - public static explicit operator MessageCreationAttachment(ClientResult result); - public static implicit operator BinaryContent(MessageCreationAttachment messageCreationAttachment); + [Experimental("OPENAI001")] + protected virtual MessageCreationAttachment JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual MessageCreationAttachment PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class MessageCreationOptions : IJsonModel, IPersistableModel { public IList Attachments { get; set; } public IDictionary Metadata { get; } - public static explicit operator MessageCreationOptions(ClientResult result); - public static implicit operator BinaryContent(MessageCreationOptions messageCreationOptions); + [Experimental("OPENAI001")] + protected virtual MessageCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual MessageCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class MessageDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string MessageId { get; } - public static explicit operator MessageDeletionResult(ClientResult result); - public static implicit operator BinaryContent(MessageDeletionResult messageDeletionResult); + [Experimental("OPENAI001")] + protected virtual MessageDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual MessageDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class MessageFailureDetails : IJsonModel, IPersistableModel { public MessageFailureReason Reason { get; } - public static explicit operator MessageFailureDetails(ClientResult result); - public static implicit operator BinaryContent(MessageFailureDetails messageFailureDetails); + [Experimental("OPENAI001")] + protected virtual MessageFailureDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual MessageFailureDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct MessageFailureReason : IEquatable { @@ -465,8 +577,14 @@ public enum MessageImageDetail { [Experimental("OPENAI001")] public class MessageModificationOptions : IJsonModel, IPersistableModel { public IDictionary Metadata { get; } - public static explicit operator MessageModificationOptions(ClientResult result); - public static implicit operator BinaryContent(MessageModificationOptions messageModificationOptions); + [Experimental("OPENAI001")] + protected virtual MessageModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual MessageModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public enum MessageRole { @@ -543,15 +661,27 @@ public class RunCreationOptions : IJsonModel, IPersistableMo public ToolConstraint ToolConstraint { get; set; } public IList ToolsOverride { get; } public RunTruncationStrategy TruncationStrategy { get; set; } - public static explicit operator RunCreationOptions(ClientResult result); - public static implicit operator BinaryContent(RunCreationOptions runCreationOptions); + [Experimental("OPENAI001")] + protected virtual RunCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class RunError : IJsonModel, IPersistableModel { public RunErrorCode Code { get; } public string Message { get; } - public static explicit operator RunError(ClientResult result); - public static implicit operator BinaryContent(RunError runError); + [Experimental("OPENAI001")] + protected virtual RunError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct RunErrorCode : IEquatable { @@ -572,8 +702,14 @@ public class RunError : IJsonModel, IPersistableModel { [Experimental("OPENAI001")] public class RunIncompleteDetails : IJsonModel, IPersistableModel { public RunIncompleteReason? Reason { get; } - public static explicit operator RunIncompleteDetails(ClientResult result); - public static implicit operator BinaryContent(RunIncompleteDetails runIncompleteDetails); + [Experimental("OPENAI001")] + protected virtual RunIncompleteDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunIncompleteDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct RunIncompleteReason : IEquatable { @@ -593,8 +729,14 @@ public class RunIncompleteDetails : IJsonModel, IPersistab [Experimental("OPENAI001")] public class RunModificationOptions : IJsonModel, IPersistableModel { public IDictionary Metadata { get; } - public static explicit operator RunModificationOptions(ClientResult result); - public static implicit operator BinaryContent(RunModificationOptions runModificationOptions); + [Experimental("OPENAI001")] + protected virtual RunModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct RunStatus : IEquatable { @@ -636,15 +778,27 @@ public class RunStep : IJsonModel, IPersistableModel { public RunStepStatus Status { get; } public string ThreadId { get; } public RunStepTokenUsage Usage { get; } - public static explicit operator RunStep(ClientResult result); - public static implicit operator BinaryContent(RunStep runStep); + [Experimental("OPENAI001")] + protected virtual RunStep JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunStep PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public abstract class RunStepCodeInterpreterOutput : IJsonModel, IPersistableModel { public string ImageFileId { get; } public string Logs { get; } - public static explicit operator RunStepCodeInterpreterOutput(ClientResult result); - public static implicit operator BinaryContent(RunStepCodeInterpreterOutput runStepCodeInterpreterOutput); + [Experimental("OPENAI001")] + protected virtual RunStepCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunStepCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class RunStepCollectionOptions { @@ -672,8 +826,14 @@ public class RunStepCollectionOptions { public abstract class RunStepDetails : IJsonModel, IPersistableModel { public string CreatedMessageId { get; } public IReadOnlyList ToolCalls { get; } - public static explicit operator RunStepDetails(ClientResult result); - public static implicit operator BinaryContent(RunStepDetails runStepDetails); + [Experimental("OPENAI001")] + protected virtual RunStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class RunStepDetailsUpdate : StreamingUpdate { @@ -693,8 +853,14 @@ public class RunStepDetailsUpdate : StreamingUpdate { public class RunStepError : IJsonModel, IPersistableModel { public RunStepErrorCode Code { get; } public string Message { get; } - public static explicit operator RunStepError(ClientResult result); - public static implicit operator BinaryContent(RunStepError runStepError); + [Experimental("OPENAI001")] + protected virtual RunStepError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunStepError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct RunStepErrorCode : IEquatable { @@ -717,15 +883,27 @@ public class RunStepFileSearchResult : IJsonModel, IPer public string FileId { get; } public string FileName { get; } public float Score { get; } - public static explicit operator RunStepFileSearchResult(ClientResult result); - public static implicit operator BinaryContent(RunStepFileSearchResult runStepFileSearchResult); + [Experimental("OPENAI001")] + protected virtual RunStepFileSearchResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunStepFileSearchResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class RunStepFileSearchResultContent : IJsonModel, IPersistableModel { public RunStepFileSearchResultContentKind Kind { get; } public string Text { get; } - public static explicit operator RunStepFileSearchResultContent(ClientResult result); - public static implicit operator BinaryContent(RunStepFileSearchResultContent runStepFileSearchResultContent); + [Experimental("OPENAI001")] + protected virtual RunStepFileSearchResultContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunStepFileSearchResultContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public enum RunStepFileSearchResultContentKind { @@ -759,8 +937,14 @@ public class RunStepTokenUsage : IJsonModel, IPersistableMode public int InputTokenCount { get; } public int OutputTokenCount { get; } public int TotalTokenCount { get; } - public static explicit operator RunStepTokenUsage(ClientResult result); - public static implicit operator BinaryContent(RunStepTokenUsage runStepTokenUsage); + [Experimental("OPENAI001")] + protected virtual RunStepTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunStepTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class RunStepToolCall : IJsonModel, IPersistableModel { @@ -773,8 +957,14 @@ public class RunStepToolCall : IJsonModel, IPersistableModel, IPersistableModel { public int InputTokenCount { get; } public int OutputTokenCount { get; } public int TotalTokenCount { get; } - public static explicit operator RunTokenUsage(ClientResult result); - public static implicit operator BinaryContent(RunTokenUsage runTokenUsage); + [Experimental("OPENAI001")] + protected virtual RunTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class RunTruncationStrategy : IJsonModel, IPersistableModel { public static RunTruncationStrategy Auto { get; } public int? LastMessages { get; } public static RunTruncationStrategy CreateLastMessagesStrategy(int lastMessageCount); - public static explicit operator RunTruncationStrategy(ClientResult result); - public static implicit operator BinaryContent(RunTruncationStrategy runTruncationStrategy); + [Experimental("OPENAI001")] + protected virtual RunTruncationStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RunTruncationStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class RunUpdate : StreamingUpdate { @@ -872,15 +1080,27 @@ public class ThreadCreationOptions : IJsonModel, IPersist public IList InitialMessages { get; } public IDictionary Metadata { get; } public ToolResources ToolResources { get; set; } - public static explicit operator ThreadCreationOptions(ClientResult result); - public static implicit operator BinaryContent(ThreadCreationOptions threadCreationOptions); + [Experimental("OPENAI001")] + protected virtual ThreadCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ThreadCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class ThreadDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string ThreadId { get; } - public static explicit operator ThreadDeletionResult(ClientResult result); - public static implicit operator BinaryContent(ThreadDeletionResult threadDeletionResult); + [Experimental("OPENAI001")] + protected virtual ThreadDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ThreadDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class ThreadInitializationMessage : MessageCreationOptions { @@ -902,15 +1122,27 @@ public class ThreadMessage : IJsonModel, IPersistableModel, IPersistableModel { public IDictionary Metadata { get; } public ToolResources ToolResources { get; set; } - public static explicit operator ThreadModificationOptions(ClientResult result); - public static implicit operator BinaryContent(ThreadModificationOptions threadModificationOptions); + [Experimental("OPENAI001")] + protected virtual ThreadModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ThreadModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class ThreadRun : IJsonModel, IPersistableModel { @@ -940,8 +1172,14 @@ public class ThreadRun : IJsonModel, IPersistableModel { public IReadOnlyList Tools { get; } public RunTruncationStrategy TruncationStrategy { get; } public RunTokenUsage Usage { get; } - public static explicit operator ThreadRun(ClientResult result); - public static implicit operator BinaryContent(ThreadRun threadRun); + [Experimental("OPENAI001")] + protected virtual ThreadRun JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ThreadRun PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class ThreadUpdate : StreamingUpdate { @@ -956,18 +1194,28 @@ public class ToolConstraint : IJsonModel, IPersistableModel, IPersistableModel { - protected ToolDefinition(); - protected ToolDefinition(string type); + public class ToolDefinition : IJsonModel, IPersistableModel { public static CodeInterpreterToolDefinition CreateCodeInterpreter(); public static FileSearchToolDefinition CreateFileSearch(int? maxResults = null); public static FunctionToolDefinition CreateFunction(string name, string description = null, BinaryData parameters = null, bool? strictParameterSchemaEnabled = null); - public static explicit operator ToolDefinition(ClientResult result); - public static implicit operator BinaryContent(ToolDefinition toolDefinition); + [Experimental("OPENAI001")] + protected virtual ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class ToolOutput : IJsonModel, IPersistableModel { @@ -975,15 +1223,27 @@ public class ToolOutput : IJsonModel, IPersistableModel public ToolOutput(string toolCallId, string output); public string Output { get; set; } public string ToolCallId { get; set; } - public static explicit operator ToolOutput(ClientResult result); - public static implicit operator BinaryContent(ToolOutput toolOutput); + [Experimental("OPENAI001")] + protected virtual ToolOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ToolOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class ToolResources : IJsonModel, IPersistableModel { public CodeInterpreterToolResources CodeInterpreter { get; set; } public FileSearchToolResources FileSearch { get; set; } - public static explicit operator ToolResources(ClientResult result); - public static implicit operator BinaryContent(ToolResources toolResources); + [Experimental("OPENAI001")] + protected virtual ToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class VectorStoreCreationHelper : IJsonModel, IPersistableModel { @@ -993,8 +1253,14 @@ public class VectorStoreCreationHelper : IJsonModel, public FileChunkingStrategy ChunkingStrategy { get; set; } public IList FileIds { get; } public IDictionary Metadata { get; } - public static explicit operator VectorStoreCreationHelper(ClientResult result); - public static implicit operator BinaryContent(VectorStoreCreationHelper vectorStoreCreationHelper); + [Experimental("OPENAI001")] + protected virtual VectorStoreCreationHelper JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual VectorStoreCreationHelper PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } } namespace OpenAI.Audio { @@ -1019,6 +1285,14 @@ public class AudioClient { public virtual Task TranscribeAudioAsync(BinaryContent content, string contentType, RequestOptions options = null); public virtual Task> TranscribeAudioAsync(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); public virtual Task> TranscribeAudioAsync(string audioFilePath, AudioTranscriptionOptions options = null); + [Experimental("OPENAI001")] + public virtual CollectionResult TranscribeAudioStreaming(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); + [Experimental("OPENAI001")] + public virtual CollectionResult TranscribeAudioStreaming(string audioFilePath, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); + [Experimental("OPENAI001")] + public virtual AsyncCollectionResult TranscribeAudioStreamingAsync(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); + [Experimental("OPENAI001")] + public virtual AsyncCollectionResult TranscribeAudioStreamingAsync(string audioFilePath, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult TranslateAudio(BinaryContent content, string contentType, RequestOptions options = null); public virtual ClientResult TranslateAudio(Stream audio, string audioFilename, AudioTranslationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult TranslateAudio(string audioFilePath, AudioTranslationOptions options = null); @@ -1032,14 +1306,36 @@ public enum AudioTimestampGranularities { Word = 1, Segment = 2 } + [Experimental("OPENAI001")] + public class AudioTokenLogProbabilityDetails : IJsonModel, IPersistableModel { + public float LogProbability { get; } + public string Token { get; } + public ReadOnlyMemory Utf8Bytes { get; } + [Experimental("OPENAI001")] + protected virtual AudioTokenLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual AudioTokenLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class AudioTranscription : IJsonModel, IPersistableModel { public TimeSpan? Duration { get; } public string Language { get; } public IReadOnlyList Segments { get; } public string Text { get; } + [Experimental("OPENAI001")] + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } public IReadOnlyList Words { get; } - public static explicit operator AudioTranscription(ClientResult result); - public static implicit operator BinaryContent(AudioTranscription audioTranscription); + [Experimental("OPENAI001")] + protected virtual AudioTranscription JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual AudioTranscription PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct AudioTranscriptionFormat : IEquatable { public AudioTranscriptionFormat(string value); @@ -1059,22 +1355,42 @@ public class AudioTranscription : IJsonModel, IPersistableMo public static bool operator !=(AudioTranscriptionFormat left, AudioTranscriptionFormat right); public override readonly string ToString(); } + [Experimental("OPENAI001")] + [Flags] + public enum AudioTranscriptionIncludes { + Default = 0, + Logprobs = 1 + } public class AudioTranscriptionOptions : IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] + public AudioTranscriptionIncludes Includes { get; set; } public string Language { get; set; } public string Prompt { get; set; } public AudioTranscriptionFormat? ResponseFormat { get; set; } public float? Temperature { get; set; } public AudioTimestampGranularities TimestampGranularities { get; set; } - public static explicit operator AudioTranscriptionOptions(ClientResult result); - public static implicit operator BinaryContent(AudioTranscriptionOptions audioTranscriptionOptions); + [Experimental("OPENAI001")] + protected virtual AudioTranscriptionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual AudioTranscriptionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class AudioTranslation : IJsonModel, IPersistableModel { public TimeSpan? Duration { get; } public string Language { get; } public IReadOnlyList Segments { get; } public string Text { get; } - public static explicit operator AudioTranslation(ClientResult result); - public static implicit operator BinaryContent(AudioTranslation audioTranslation); + [Experimental("OPENAI001")] + protected virtual AudioTranslation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual AudioTranslation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct AudioTranslationFormat : IEquatable { public AudioTranslationFormat(string value); @@ -1098,8 +1414,14 @@ public class AudioTranslationOptions : IJsonModel, IPer public string Prompt { get; set; } public AudioTranslationFormat? ResponseFormat { get; set; } public float? Temperature { get; set; } - public static explicit operator AudioTranslationOptions(ClientResult result); - public static implicit operator BinaryContent(AudioTranslationOptions audioTranslationOptions); + [Experimental("OPENAI001")] + protected virtual AudioTranslationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual AudioTranslationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct GeneratedSpeechFormat : IEquatable { public GeneratedSpeechFormat(string value); @@ -1122,14 +1444,21 @@ public class AudioTranslationOptions : IJsonModel, IPer public readonly partial struct GeneratedSpeechVoice : IEquatable { public GeneratedSpeechVoice(string value); public static GeneratedSpeechVoice Alloy { get; } + [Experimental("OPENAI001")] public static GeneratedSpeechVoice Ash { get; } + [Experimental("OPENAI001")] + public static GeneratedSpeechVoice Ballad { get; } + [Experimental("OPENAI001")] public static GeneratedSpeechVoice Coral { get; } public static GeneratedSpeechVoice Echo { get; } public static GeneratedSpeechVoice Fable { get; } public static GeneratedSpeechVoice Nova { get; } public static GeneratedSpeechVoice Onyx { get; } + [Experimental("OPENAI001")] public static GeneratedSpeechVoice Sage { get; } public static GeneratedSpeechVoice Shimmer { get; } + [Experimental("OPENAI001")] + public static GeneratedSpeechVoice Verse { get; } public readonly bool Equals(GeneratedSpeechVoice other); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly bool Equals(object obj); @@ -1141,16 +1470,79 @@ public class AudioTranslationOptions : IJsonModel, IPer public override readonly string ToString(); } public static class OpenAIAudioModelFactory { - public static AudioTranscription AudioTranscription(string language = null, TimeSpan? duration = null, string text = null, IEnumerable words = null, IEnumerable segments = null); + [Experimental("OPENAI001")] + public static AudioTranscription AudioTranscription(string language = null, TimeSpan? duration = null, string text = null, IEnumerable words = null, IEnumerable segments = null, IEnumerable transcriptionTokenLogProbabilities = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static AudioTranscription AudioTranscription(string language, TimeSpan? duration, string text, IEnumerable words, IEnumerable segments); public static AudioTranslation AudioTranslation(string language = null, TimeSpan? duration = null, string text = null, IEnumerable segments = null); public static TranscribedSegment TranscribedSegment(int id = 0, int seekOffset = 0, TimeSpan startTime = default, TimeSpan endTime = default, string text = null, ReadOnlyMemory tokenIds = default, float temperature = 0, float averageLogProbability = 0, float compressionRatio = 0, float noSpeechProbability = 0); public static TranscribedWord TranscribedWord(string word = null, TimeSpan startTime = default, TimeSpan endTime = default); } public class SpeechGenerationOptions : IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] + public string Instructions { get; set; } public GeneratedSpeechFormat? ResponseFormat { get; set; } public float? SpeedRatio { get; set; } - public static explicit operator SpeechGenerationOptions(ClientResult result); - public static implicit operator BinaryContent(SpeechGenerationOptions speechGenerationOptions); + [Experimental("OPENAI001")] + protected virtual SpeechGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual SpeechGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class StreamingAudioTranscriptionTextDeltaUpdate : StreamingAudioTranscriptionUpdate, IJsonModel, IPersistableModel { + public string Delta { get; } + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class StreamingAudioTranscriptionTextDoneUpdate : StreamingAudioTranscriptionUpdate, IJsonModel, IPersistableModel { + public string Text { get; } + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class StreamingAudioTranscriptionUpdate : IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] + protected virtual StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public readonly partial struct StreamingAudioTranscriptionUpdateKind : IEquatable { + public StreamingAudioTranscriptionUpdateKind(string value); + public static StreamingAudioTranscriptionUpdateKind TranscriptTextDelta { get; } + public static StreamingAudioTranscriptionUpdateKind TranscriptTextDone { get; } + public readonly bool Equals(StreamingAudioTranscriptionUpdateKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(StreamingAudioTranscriptionUpdateKind left, StreamingAudioTranscriptionUpdateKind right); + public static implicit operator StreamingAudioTranscriptionUpdateKind(string value); + public static bool operator !=(StreamingAudioTranscriptionUpdateKind left, StreamingAudioTranscriptionUpdateKind right); + public override readonly string ToString(); } public readonly partial struct TranscribedSegment : IJsonModel, IPersistableModel, IJsonModel, IPersistableModel { public float AverageLogProbability { get; } @@ -1163,15 +1555,11 @@ public class SpeechGenerationOptions : IJsonModel, IPer public float Temperature { get; } public string Text { get; } public ReadOnlyMemory TokenIds { get; } - public static explicit operator TranscribedSegment(ClientResult result); - public static implicit operator BinaryContent(TranscribedSegment transcribedSegment); } public readonly partial struct TranscribedWord : IJsonModel, IPersistableModel, IJsonModel, IPersistableModel { public TimeSpan EndTime { get; } public TimeSpan StartTime { get; } public string Word { get; } - public static explicit operator TranscribedWord(ClientResult result); - public static implicit operator BinaryContent(TranscribedWord transcribedWord); } } namespace OpenAI.Batch { @@ -1197,7 +1585,9 @@ public class CreateBatchOperation : OperationResult { public virtual ClientResult GetBatch(RequestOptions? options); public virtual Task GetBatchAsync(RequestOptions? options); public static CreateBatchOperation Rehydrate(BatchClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static CreateBatchOperation Rehydrate(BatchClient client, string batchId, CancellationToken cancellationToken = default); public static Task RehydrateAsync(BatchClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(BatchClient client, string batchId, CancellationToken cancellationToken = default); public override ClientResult UpdateStatus(RequestOptions? options = null); public override ValueTask UpdateStatusAsync(RequestOptions? options = null); } @@ -1208,25 +1598,40 @@ public class AssistantChatMessage : ChatMessage, IJsonModel parameter instead.")] public AssistantChatMessage(ChatFunctionCall functionCall); public AssistantChatMessage(params ChatMessageContentPart[] contentParts); + [Experimental("OPENAI001")] public AssistantChatMessage(ChatOutputAudioReference outputAudioReference); public AssistantChatMessage(IEnumerable contentParts); public AssistantChatMessage(IEnumerable toolCalls); public AssistantChatMessage(string content); [Obsolete("This property is obsolete. Please use ToolCalls instead.")] public ChatFunctionCall FunctionCall { get; set; } + [Experimental("OPENAI001")] public ChatOutputAudioReference OutputAudioReference { get; set; } public string ParticipantName { get; set; } public string Refusal { get; set; } public IList ToolCalls { get; } - public new static explicit operator AssistantChatMessage(ClientResult result); - public static implicit operator BinaryContent(AssistantChatMessage assistantChatMessage); + [Experimental("OPENAI001")] + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class ChatAudioOptions : IJsonModel, IPersistableModel { public ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice, ChatOutputAudioFormat outputAudioFormat); public ChatOutputAudioFormat OutputAudioFormat { get; } public ChatOutputAudioVoice OutputAudioVoice { get; } - public static explicit operator ChatAudioOptions(ClientResult result); - public static implicit operator BinaryContent(ChatAudioOptions chatAudioOptions); + [Experimental("OPENAI001")] + protected virtual ChatAudioOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatAudioOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatClient { protected ChatClient(); @@ -1247,8 +1652,25 @@ public class ChatClient { public virtual CollectionResult CompleteChatStreaming(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); public virtual AsyncCollectionResult CompleteChatStreamingAsync(params ChatMessage[] messages); public virtual AsyncCollectionResult CompleteChatStreamingAsync(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); + [Experimental("OPENAI001")] + public virtual ClientResult DeleteChatCompletion(string completionId, RequestOptions options); + [Experimental("OPENAI001")] + public virtual ClientResult DeleteChatCompletion(string completionId, CancellationToken cancellationToken = default); + [Experimental("OPENAI001")] + public virtual Task DeleteChatCompletionAsync(string completionId, RequestOptions options); + [Experimental("OPENAI001")] + public virtual Task> DeleteChatCompletionAsync(string completionId, CancellationToken cancellationToken = default); + [Experimental("OPENAI001")] + public virtual ClientResult GetChatCompletion(string completionId, RequestOptions options); + [Experimental("OPENAI001")] + public virtual ClientResult GetChatCompletion(string completionId, CancellationToken cancellationToken = default); + [Experimental("OPENAI001")] + public virtual Task GetChatCompletionAsync(string completionId, RequestOptions options); + [Experimental("OPENAI001")] + public virtual Task> GetChatCompletionAsync(string completionId, CancellationToken cancellationToken = default); } public class ChatCompletion : IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] public IReadOnlyList Annotations { get; } public ChatMessageContent Content { get; } public IReadOnlyList ContentTokenLogProbabilities { get; } @@ -1258,6 +1680,7 @@ public class ChatCompletion : IJsonModel, IPersistableModel RefusalTokenLogProbabilities { get; } @@ -1265,11 +1688,31 @@ public class ChatCompletion : IJsonModel, IPersistableModel ToolCalls { get; } public ChatTokenUsage Usage { get; } - public static explicit operator ChatCompletion(ClientResult result); - public static implicit operator BinaryContent(ChatCompletion chatCompletion); + [Experimental("OPENAI001")] + protected virtual ChatCompletion JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatCompletion PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class ChatCompletionDeletionResult : IJsonModel, IPersistableModel { + public string ChatCompletionId { get; } + public bool Deleted { get; } + [Experimental("OPENAI001")] + protected virtual ChatCompletionDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatCompletionDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatCompletionOptions : IJsonModel, IPersistableModel { public bool? AllowParallelToolCalls { get; set; } + [Experimental("OPENAI001")] public ChatAudioOptions AudioOptions { get; set; } public string EndUserId { get; set; } public float? FrequencyPenalty { get; set; } @@ -1281,10 +1724,13 @@ public class ChatCompletionOptions : IJsonModel, IPersist public IDictionary LogitBiases { get; } public int? MaxOutputTokenCount { get; set; } public IDictionary Metadata { get; } + [Experimental("OPENAI001")] public ChatOutputPrediction OutputPrediction { get; set; } public float? PresencePenalty { get; set; } + [Experimental("OPENAI001")] public ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } public ChatResponseFormat ResponseFormat { get; set; } + [Experimental("OPENAI001")] public ChatResponseModalities ResponseModalities { get; set; } [Experimental("OPENAI001")] public long? Seed { get; set; } @@ -1295,9 +1741,16 @@ public class ChatCompletionOptions : IJsonModel, IPersist public IList Tools { get; } public int? TopLogProbabilityCount { get; set; } public float? TopP { get; set; } + [Experimental("OPENAI001")] public ChatWebSearchOptions WebSearchOptions { get; set; } - public static explicit operator ChatCompletionOptions(ClientResult result); - public static implicit operator BinaryContent(ChatCompletionOptions chatCompletionOptions); + [Experimental("OPENAI001")] + protected virtual ChatCompletionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatCompletionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ChatFinishReason { Stop = 0, @@ -1312,24 +1765,42 @@ public class ChatFunction : IJsonModel, IPersistableModel, IPersistableModel { public ChatFunctionCall(string functionName, BinaryData functionArguments); public BinaryData FunctionArguments { get; } public string FunctionName { get; } - public static explicit operator ChatFunctionCall(ClientResult result); - public static implicit operator BinaryContent(ChatFunctionCall chatFunctionCall); + [Experimental("OPENAI001")] + protected virtual ChatFunctionCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatFunctionCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Obsolete("This class is obsolete. Please use ChatToolChoice instead.")] public class ChatFunctionChoice : IJsonModel, IPersistableModel { public static ChatFunctionChoice CreateAutoChoice(); public static ChatFunctionChoice CreateNamedChoice(string functionName); public static ChatFunctionChoice CreateNoneChoice(); - public static explicit operator ChatFunctionChoice(ClientResult result); - public static implicit operator BinaryContent(ChatFunctionChoice chatFunctionChoice); + [Experimental("OPENAI001")] + protected virtual ChatFunctionChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatFunctionChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ChatImageDetailLevel : IEquatable { public ChatImageDetailLevel(string value); @@ -1346,6 +1817,7 @@ public class ChatFunctionChoice : IJsonModel, IPersistableMo public static bool operator !=(ChatImageDetailLevel left, ChatImageDetailLevel right); public override readonly string ToString(); } + [Experimental("OPENAI001")] public readonly partial struct ChatInputAudioFormat : IEquatable { public ChatInputAudioFormat(string value); public static ChatInputAudioFormat Mp3 { get; } @@ -1363,20 +1835,30 @@ public class ChatFunctionChoice : IJsonModel, IPersistableMo public class ChatInputTokenUsageDetails : IJsonModel, IPersistableModel { public int AudioTokenCount { get; } public int CachedTokenCount { get; } - public static explicit operator ChatInputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ChatInputTokenUsageDetails chatInputTokenUsageDetails); + [Experimental("OPENAI001")] + protected virtual ChatInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatMessage : IJsonModel, IPersistableModel { public ChatMessageContent Content { get; } public static AssistantChatMessage CreateAssistantMessage(ChatCompletion chatCompletion); public static AssistantChatMessage CreateAssistantMessage(ChatFunctionCall functionCall); public static AssistantChatMessage CreateAssistantMessage(params ChatMessageContentPart[] contentParts); + [Experimental("OPENAI001")] public static AssistantChatMessage CreateAssistantMessage(ChatOutputAudioReference outputAudioReference); public static AssistantChatMessage CreateAssistantMessage(IEnumerable contentParts); public static AssistantChatMessage CreateAssistantMessage(IEnumerable toolCalls); public static AssistantChatMessage CreateAssistantMessage(string content); + [Experimental("OPENAI001")] public static DeveloperChatMessage CreateDeveloperMessage(params ChatMessageContentPart[] contentParts); + [Experimental("OPENAI001")] public static DeveloperChatMessage CreateDeveloperMessage(IEnumerable contentParts); + [Experimental("OPENAI001")] public static DeveloperChatMessage CreateDeveloperMessage(string content); [Obsolete("This method is obsolete. Please use CreateToolMessage instead.")] public static FunctionChatMessage CreateFunctionMessage(string functionName, string content); @@ -1389,17 +1871,30 @@ public class ChatMessage : IJsonModel, IPersistableModel contentParts); public static UserChatMessage CreateUserMessage(string content); - public static explicit operator ChatMessage(ClientResult result); - public static implicit operator BinaryContent(ChatMessage chatMessage); + [Experimental("OPENAI001")] + protected virtual ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public static implicit operator ChatMessage(string content); + [Experimental("OPENAI001")] + protected virtual ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class ChatMessageAnnotation : IJsonModel, IPersistableModel { public int EndIndex { get; } public int StartIndex { get; } public string WebResourceTitle { get; } public Uri WebResourceUri { get; } - public static explicit operator ChatMessageAnnotation(ClientResult result); - public static implicit operator BinaryContent(ChatMessageAnnotation chatMessageAnnotation); + [Experimental("OPENAI001")] + protected virtual ChatMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatMessageContent : ObjectModel.Collection { public ChatMessageContent(); @@ -1408,29 +1903,44 @@ public class ChatMessageContent : ObjectModel.Collection public ChatMessageContent(string content); } public class ChatMessageContentPart : IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] public BinaryData FileBytes { get; } + [Experimental("OPENAI001")] public string FileBytesMediaType { get; } + [Experimental("OPENAI001")] public string FileId { get; } + [Experimental("OPENAI001")] public string Filename { get; } public BinaryData ImageBytes { get; } public string ImageBytesMediaType { get; } public ChatImageDetailLevel? ImageDetailLevel { get; } public Uri ImageUri { get; } + [Experimental("OPENAI001")] public BinaryData InputAudioBytes { get; } + [Experimental("OPENAI001")] public ChatInputAudioFormat? InputAudioFormat { get; } public ChatMessageContentPartKind Kind { get; } public string Refusal { get; } public string Text { get; } + [Experimental("OPENAI001")] public static ChatMessageContentPart CreateFilePart(BinaryData fileBytes, string fileBytesMediaType, string filename); + [Experimental("OPENAI001")] public static ChatMessageContentPart CreateFilePart(string fileId); public static ChatMessageContentPart CreateImagePart(BinaryData imageBytes, string imageBytesMediaType, ChatImageDetailLevel? imageDetailLevel = null); public static ChatMessageContentPart CreateImagePart(Uri imageUri, ChatImageDetailLevel? imageDetailLevel = null); + [Experimental("OPENAI001")] public static ChatMessageContentPart CreateInputAudioPart(BinaryData inputAudioBytes, ChatInputAudioFormat inputAudioFormat); public static ChatMessageContentPart CreateRefusalPart(string refusal); public static ChatMessageContentPart CreateTextPart(string text); - public static explicit operator ChatMessageContentPart(ClientResult result); - public static implicit operator BinaryContent(ChatMessageContentPart chatMessageContentPart); + [Experimental("OPENAI001")] + protected virtual ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public static implicit operator ChatMessageContentPart(string text); + [Experimental("OPENAI001")] + protected virtual ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ChatMessageContentPartKind { Text = 0, @@ -1447,16 +1957,25 @@ public enum ChatMessageRole { Function = 4, Developer = 5 } + [Experimental("OPENAI001")] public class ChatOutputAudio : IJsonModel, IPersistableModel { public BinaryData AudioBytes { get; } public DateTimeOffset ExpiresAt { get; } public string Id { get; } public string Transcript { get; } - public static explicit operator ChatOutputAudio(ClientResult result); - public static implicit operator BinaryContent(ChatOutputAudio chatOutputAudio); + [Experimental("OPENAI001")] + protected virtual ChatOutputAudio JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatOutputAudio PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public readonly partial struct ChatOutputAudioFormat : IEquatable { public ChatOutputAudioFormat(string value); + public static ChatOutputAudioFormat Aac { get; } public static ChatOutputAudioFormat Flac { get; } public static ChatOutputAudioFormat Mp3 { get; } public static ChatOutputAudioFormat Opus { get; } @@ -1472,12 +1991,20 @@ public class ChatOutputAudio : IJsonModel, IPersistableModel, IPersistableModel { public ChatOutputAudioReference(string id); public string Id { get; } - public static explicit operator ChatOutputAudioReference(ClientResult result); - public static implicit operator BinaryContent(ChatOutputAudioReference chatOutputAudioReference); + [Experimental("OPENAI001")] + protected virtual ChatOutputAudioReference JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatOutputAudioReference PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public readonly partial struct ChatOutputAudioVoice : IEquatable { public ChatOutputAudioVoice(string value); public static ChatOutputAudioVoice Alloy { get; } @@ -1485,6 +2012,9 @@ public class ChatOutputAudioReference : IJsonModel, IP public static ChatOutputAudioVoice Ballad { get; } public static ChatOutputAudioVoice Coral { get; } public static ChatOutputAudioVoice Echo { get; } + public static ChatOutputAudioVoice Fable { get; } + public static ChatOutputAudioVoice Nova { get; } + public static ChatOutputAudioVoice Onyx { get; } public static ChatOutputAudioVoice Sage { get; } public static ChatOutputAudioVoice Shimmer { get; } public static ChatOutputAudioVoice Verse { get; } @@ -1498,20 +2028,36 @@ public class ChatOutputAudioReference : IJsonModel, IP public static bool operator !=(ChatOutputAudioVoice left, ChatOutputAudioVoice right); public override readonly string ToString(); } + [Experimental("OPENAI001")] public class ChatOutputPrediction : IJsonModel, IPersistableModel { public static ChatOutputPrediction CreateStaticContentPrediction(IEnumerable staticContentParts); public static ChatOutputPrediction CreateStaticContentPrediction(string staticContent); - public static explicit operator ChatOutputPrediction(ClientResult result); - public static implicit operator BinaryContent(ChatOutputPrediction chatOutputPrediction); + [Experimental("OPENAI001")] + protected virtual ChatOutputPrediction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatOutputPrediction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatOutputTokenUsageDetails : IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] public int AcceptedPredictionTokenCount { get; } public int AudioTokenCount { get; } public int ReasoningTokenCount { get; } + [Experimental("OPENAI001")] public int RejectedPredictionTokenCount { get; } - public static explicit operator ChatOutputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ChatOutputTokenUsageDetails chatOutputTokenUsageDetails); + [Experimental("OPENAI001")] + protected virtual ChatOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public readonly partial struct ChatReasoningEffortLevel : IEquatable { public ChatReasoningEffortLevel(string value); public static ChatReasoningEffortLevel High { get; } @@ -1531,9 +2077,16 @@ public class ChatResponseFormat : IJsonModel, IPersistableMo public static ChatResponseFormat CreateJsonObjectFormat(); public static ChatResponseFormat CreateJsonSchemaFormat(string jsonSchemaFormatName, BinaryData jsonSchema, string jsonSchemaFormatDescription = null, bool? jsonSchemaIsStrict = null); public static ChatResponseFormat CreateTextFormat(); - public static explicit operator ChatResponseFormat(ClientResult result); - public static implicit operator BinaryContent(ChatResponseFormat chatResponseFormat); + [Experimental("OPENAI001")] + protected virtual ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] [Flags] public enum ChatResponseModalities { Default = 0, @@ -1545,15 +2098,27 @@ public class ChatTokenLogProbabilityDetails : IJsonModel TopLogProbabilities { get; } public ReadOnlyMemory? Utf8Bytes { get; } - public static explicit operator ChatTokenLogProbabilityDetails(ClientResult result); - public static implicit operator BinaryContent(ChatTokenLogProbabilityDetails chatTokenLogProbabilityDetails); + [Experimental("OPENAI001")] + protected virtual ChatTokenLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatTokenLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatTokenTopLogProbabilityDetails : IJsonModel, IPersistableModel { public float LogProbability { get; } public string Token { get; } public ReadOnlyMemory? Utf8Bytes { get; } - public static explicit operator ChatTokenTopLogProbabilityDetails(ClientResult result); - public static implicit operator BinaryContent(ChatTokenTopLogProbabilityDetails chatTokenTopLogProbabilityDetails); + [Experimental("OPENAI001")] + protected virtual ChatTokenTopLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatTokenTopLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatTokenUsage : IJsonModel, IPersistableModel { public int InputTokenCount { get; } @@ -1561,8 +2126,14 @@ public class ChatTokenUsage : IJsonModel, IPersistableModel, IPersistableModel { public string FunctionDescription { get; } @@ -1571,8 +2142,14 @@ public class ChatTool : IJsonModel, IPersistableModel { public bool? FunctionSchemaIsStrict { get; } public ChatToolKind Kind { get; } public static ChatTool CreateFunctionTool(string functionName, string functionDescription = null, BinaryData functionParameters = null, bool? functionSchemaIsStrict = null); - public static explicit operator ChatTool(ClientResult result); - public static implicit operator BinaryContent(ChatTool chatTool); + [Experimental("OPENAI001")] + protected virtual ChatTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatToolCall : IJsonModel, IPersistableModel { public BinaryData FunctionArguments { get; } @@ -1580,8 +2157,14 @@ public class ChatToolCall : IJsonModel, IPersistableModel, IPersistableModel, IPersistableModel { - public static explicit operator ChatWebSearchOptions(ClientResult result); - public static implicit operator BinaryContent(ChatWebSearchOptions chatWebSearchOptions); + [Experimental("OPENAI001")] + protected virtual ChatWebSearchOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ChatWebSearchOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class DeveloperChatMessage : ChatMessage, IJsonModel, IPersistableModel { public DeveloperChatMessage(params ChatMessageContentPart[] contentParts); public DeveloperChatMessage(IEnumerable contentParts); public DeveloperChatMessage(string content); public string ParticipantName { get; set; } - public new static explicit operator DeveloperChatMessage(ClientResult result); - public static implicit operator BinaryContent(DeveloperChatMessage developerChatMessage); + [Experimental("OPENAI001")] + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Obsolete("This class is obsolete. Please use ToolChatMessage instead.")] public class FunctionChatMessage : ChatMessage, IJsonModel, IPersistableModel { public FunctionChatMessage(string functionName, string content); public string FunctionName { get; } - public new static explicit operator FunctionChatMessage(ClientResult result); - public static implicit operator BinaryContent(FunctionChatMessage functionChatMessage); + [Experimental("OPENAI001")] + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIChatModelFactory { + [Experimental("OPENAI001")] public static ChatCompletion ChatCompletion(string id = null, ChatFinishReason finishReason = ChatFinishReason.Stop, ChatMessageContent content = null, string refusal = null, IEnumerable toolCalls = null, ChatMessageRole role = ChatMessageRole.System, ChatFunctionCall functionCall = null, IEnumerable contentTokenLogProbabilities = null, IEnumerable refusalTokenLogProbabilities = null, DateTimeOffset createdAt = default, string model = null, string systemFingerprint = null, ChatTokenUsage usage = null, ChatOutputAudio outputAudio = null, IEnumerable messageAnnotations = null); [EditorBrowsable(EditorBrowsableState.Never)] public static ChatCompletion ChatCompletion(string id, ChatFinishReason finishReason, ChatMessageContent content, string refusal, IEnumerable toolCalls, ChatMessageRole role, ChatFunctionCall functionCall, IEnumerable contentTokenLogProbabilities, IEnumerable refusalTokenLogProbabilities, DateTimeOffset createdAt, string model, string systemFingerprint, ChatTokenUsage usage); public static ChatInputTokenUsageDetails ChatInputTokenUsageDetails(int audioTokenCount = 0, int cachedTokenCount = 0); + [Experimental("OPENAI001")] public static ChatMessageAnnotation ChatMessageAnnotation(int startIndex = 0, int endIndex = 0, Uri webResourceUri = null, string webResourceTitle = null); + [Experimental("OPENAI001")] public static ChatOutputAudio ChatOutputAudio(BinaryData audioBytes, string id = null, string transcript = null, DateTimeOffset expiresAt = default); + [Experimental("OPENAI001")] public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = 0, int audioTokenCount = 0, int acceptedPredictionTokenCount = 0, int rejectedPredictionTokenCount = 0); [EditorBrowsable(EditorBrowsableState.Never)] public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount, int audioTokenCount); @@ -1633,11 +2246,13 @@ public static class OpenAIChatModelFactory { public static ChatTokenUsage ChatTokenUsage(int outputTokenCount = 0, int inputTokenCount = 0, int totalTokenCount = 0, ChatOutputTokenUsageDetails outputTokenDetails = null, ChatInputTokenUsageDetails inputTokenDetails = null); [EditorBrowsable(EditorBrowsableState.Never)] public static ChatTokenUsage ChatTokenUsage(int outputTokenCount, int inputTokenCount, int totalTokenCount, ChatOutputTokenUsageDetails outputTokenDetails); + [Experimental("OPENAI001")] public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate(string completionId = null, ChatMessageContent contentUpdate = null, StreamingChatFunctionCallUpdate functionCallUpdate = null, IEnumerable toolCallUpdates = null, ChatMessageRole? role = null, string refusalUpdate = null, IEnumerable contentTokenLogProbabilities = null, IEnumerable refusalTokenLogProbabilities = null, ChatFinishReason? finishReason = null, DateTimeOffset createdAt = default, string model = null, string systemFingerprint = null, ChatTokenUsage usage = null, StreamingChatOutputAudioUpdate outputAudioUpdate = null); [EditorBrowsable(EditorBrowsableState.Never)] public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate(string completionId, ChatMessageContent contentUpdate, StreamingChatFunctionCallUpdate functionCallUpdate, IEnumerable toolCallUpdates, ChatMessageRole? role, string refusalUpdate, IEnumerable contentTokenLogProbabilities, IEnumerable refusalTokenLogProbabilities, ChatFinishReason? finishReason, DateTimeOffset createdAt, string model, string systemFingerprint, ChatTokenUsage usage); [Obsolete("This class is obsolete. Please use StreamingChatToolCallUpdate instead.")] public static StreamingChatFunctionCallUpdate StreamingChatFunctionCallUpdate(string functionName = null, BinaryData functionArgumentsUpdate = null); + [Experimental("OPENAI001")] public static StreamingChatOutputAudioUpdate StreamingChatOutputAudioUpdate(string id = null, DateTimeOffset? expiresAt = null, string transcriptUpdate = null, BinaryData audioBytesUpdate = null); public static StreamingChatToolCallUpdate StreamingChatToolCallUpdate(int index = 0, string toolCallId = null, ChatToolCallKind kind = ChatToolCallKind.Function, string functionName = null, BinaryData functionArgumentsUpdate = null); } @@ -1650,6 +2265,7 @@ public class StreamingChatCompletionUpdate : IJsonModel RefusalTokenLogProbabilities { get; } public string RefusalUpdate { get; } @@ -1657,23 +2273,42 @@ public class StreamingChatCompletionUpdate : IJsonModel ToolCallUpdates { get; } public ChatTokenUsage Usage { get; } - public static explicit operator StreamingChatCompletionUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingChatCompletionUpdate streamingChatCompletionUpdate); + [Experimental("OPENAI001")] + protected virtual StreamingChatCompletionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual StreamingChatCompletionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Obsolete("This class is obsolete. Please use StreamingChatToolCallUpdate instead.")] public class StreamingChatFunctionCallUpdate : IJsonModel, IPersistableModel { public BinaryData FunctionArgumentsUpdate { get; } public string FunctionName { get; } - public static explicit operator StreamingChatFunctionCallUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingChatFunctionCallUpdate streamingChatFunctionCallUpdate); + [Experimental("OPENAI001")] + protected virtual StreamingChatFunctionCallUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual StreamingChatFunctionCallUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingChatOutputAudioUpdate : IJsonModel, IPersistableModel { public BinaryData AudioBytesUpdate { get; } public DateTimeOffset? ExpiresAt { get; } public string Id { get; } public string TranscriptUpdate { get; } - public static explicit operator StreamingChatOutputAudioUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingChatOutputAudioUpdate streamingChatOutputAudioUpdate); + [Experimental("OPENAI001")] + protected virtual StreamingChatOutputAudioUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual StreamingChatOutputAudioUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingChatToolCallUpdate : IJsonModel, IPersistableModel { public BinaryData FunctionArgumentsUpdate { get; } @@ -1681,32 +2316,56 @@ public class StreamingChatToolCallUpdate : IJsonModel, IPersistableModel { public SystemChatMessage(params ChatMessageContentPart[] contentParts); public SystemChatMessage(IEnumerable contentParts); public SystemChatMessage(string content); public string ParticipantName { get; set; } - public new static explicit operator SystemChatMessage(ClientResult result); - public static implicit operator BinaryContent(SystemChatMessage systemChatMessage); + [Experimental("OPENAI001")] + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ToolChatMessage : ChatMessage, IJsonModel, IPersistableModel { public ToolChatMessage(string toolCallId, params ChatMessageContentPart[] contentParts); public ToolChatMessage(string toolCallId, IEnumerable contentParts); public ToolChatMessage(string toolCallId, string content); public string ToolCallId { get; } - public new static explicit operator ToolChatMessage(ClientResult result); - public static implicit operator BinaryContent(ToolChatMessage toolChatMessage); + [Experimental("OPENAI001")] + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class UserChatMessage : ChatMessage, IJsonModel, IPersistableModel { public UserChatMessage(params ChatMessageContentPart[] contentParts); public UserChatMessage(IEnumerable contentParts); public UserChatMessage(string content); public string ParticipantName { get; set; } - public new static explicit operator UserChatMessage(ClientResult result); - public static implicit operator BinaryContent(UserChatMessage userChatMessage); + [Experimental("OPENAI001")] + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } } namespace OpenAI.Embeddings { @@ -1731,26 +2390,50 @@ public class EmbeddingClient { public class EmbeddingGenerationOptions : IJsonModel, IPersistableModel { public int? Dimensions { get; set; } public string EndUserId { get; set; } - public static explicit operator EmbeddingGenerationOptions(ClientResult result); - public static implicit operator BinaryContent(EmbeddingGenerationOptions embeddingGenerationOptions); + [Experimental("OPENAI001")] + protected virtual EmbeddingGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual EmbeddingGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class EmbeddingTokenUsage : IJsonModel, IPersistableModel { public int InputTokenCount { get; } public int TotalTokenCount { get; } - public static explicit operator EmbeddingTokenUsage(ClientResult result); - public static implicit operator BinaryContent(EmbeddingTokenUsage embeddingTokenUsage); + [Experimental("OPENAI001")] + protected virtual EmbeddingTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual EmbeddingTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIEmbedding : IJsonModel, IPersistableModel { public int Index { get; } - public static explicit operator OpenAIEmbedding(ClientResult result); - public static implicit operator BinaryContent(OpenAIEmbedding openAIEmbedding); + [Experimental("OPENAI001")] + protected virtual OpenAIEmbedding JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual OpenAIEmbedding PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); public ReadOnlyMemory ToFloats(); } public class OpenAIEmbeddingCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { public string Model { get; } public EmbeddingTokenUsage Usage { get; } - public static explicit operator OpenAIEmbeddingCollection(ClientResult result); - public static implicit operator BinaryContent(OpenAIEmbeddingCollection openAIEmbeddingCollection); + [Experimental("OPENAI001")] + protected virtual OpenAIEmbeddingCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual OpenAIEmbeddingCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIEmbeddingsModelFactory { public static EmbeddingTokenUsage EmbeddingTokenUsage(int inputTokenCount = 0, int totalTokenCount = 0); @@ -1758,12 +2441,53 @@ public static class OpenAIEmbeddingsModelFactory { public static OpenAIEmbeddingCollection OpenAIEmbeddingCollection(IEnumerable items = null, string model = null, EmbeddingTokenUsage usage = null); } } +namespace OpenAI.Evals { + [Experimental("OPENAI001")] + public class EvaluationClient { + protected EvaluationClient(); + public EvaluationClient(ApiKeyCredential credential, OpenAIClientOptions options); + public EvaluationClient(ApiKeyCredential credential); + protected internal EvaluationClient(ClientPipeline pipeline, OpenAIClientOptions options); + public EvaluationClient(string apiKey); + public ClientPipeline Pipeline { get; } + public virtual ClientResult CancelEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual Task CancelEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual ClientResult CreateEvaluation(BinaryContent content, RequestOptions options = null); + public virtual Task CreateEvaluationAsync(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateEvaluationRun(string evaluationId, BinaryContent content, RequestOptions options = null); + public virtual Task CreateEvaluationRunAsync(string evaluationId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult DeleteEvaluation(string evaluationId, RequestOptions options); + public virtual Task DeleteEvaluationAsync(string evaluationId, RequestOptions options); + public virtual ClientResult DeleteEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual Task DeleteEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual ClientResult GetEvaluation(string evaluationId, RequestOptions options); + public virtual Task GetEvaluationAsync(string evaluationId, RequestOptions options); + public virtual ClientResult GetEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual Task GetEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual ClientResult GetEvaluationRunOutputItem(string evaluationId, string evaluationRunId, string outputItemId, RequestOptions options); + public virtual Task GetEvaluationRunOutputItemAsync(string evaluationId, string evaluationRunId, string outputItemId, RequestOptions options); + public virtual ClientResult GetEvaluationRunOutputItems(string evaluationId, string evaluationRunId, int? limit, string order, string after, string outputItemStatus, RequestOptions options); + public virtual Task GetEvaluationRunOutputItemsAsync(string evaluationId, string evaluationRunId, int? limit, string order, string after, string outputItemStatus, RequestOptions options); + public virtual ClientResult GetEvaluationRuns(string evaluationId, int? limit, string order, string after, string evaluationRunStatus, RequestOptions options); + public virtual Task GetEvaluationRunsAsync(string evaluationId, int? limit, string order, string after, string evaluationRunStatus, RequestOptions options); + public virtual ClientResult GetEvaluations(int? limit, string orderBy, string order, string after, RequestOptions options); + public virtual Task GetEvaluationsAsync(int? limit, string orderBy, string order, string after, RequestOptions options); + public virtual ClientResult UpdateEvaluation(string evaluationId, BinaryContent content, RequestOptions options = null); + public virtual Task UpdateEvaluationAsync(string evaluationId, BinaryContent content, RequestOptions options = null); + } +} namespace OpenAI.Files { public class FileDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string FileId { get; } - public static explicit operator FileDeletionResult(ClientResult result); - public static implicit operator BinaryContent(FileDeletionResult fileDeletionResult); + [Experimental("OPENAI001")] + protected virtual FileDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FileDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum FilePurpose { Assistants = 0, @@ -1786,8 +2510,10 @@ public enum FileStatus { public FileUploadPurpose(string value); public static FileUploadPurpose Assistants { get; } public static FileUploadPurpose Batch { get; } + [Experimental("OPENAI001")] public static FileUploadPurpose Evaluations { get; } public static FileUploadPurpose FineTune { get; } + [Experimental("OPENAI001")] public static FileUploadPurpose UserData { get; } public static FileUploadPurpose Vision { get; } public readonly bool Equals(FileUploadPurpose other); @@ -1802,17 +2528,27 @@ public enum FileStatus { } public class OpenAIFile : IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } + [Experimental("OPENAI001")] public DateTimeOffset? ExpiresAt { get; } public string Filename { get; } public string Id { get; } public FilePurpose Purpose { get; } + [EditorBrowsable(EditorBrowsableState.Never)] public int? SizeInBytes { get; } + [Experimental("OPENAI001")] + public long? SizeInBytesLong { get; } [Obsolete("This property is obsolete. If this is a fine-tuning training file, it may take some time to process after it has been uploaded. While the file is processing, you can still create a fine-tuning job but it will not start until the file processing has completed.")] public FileStatus Status { get; } [Obsolete("This property is obsolete. For details on why a fine-tuning training file failed validation, see the `error` field on the fine-tuning job.")] public string StatusDetails { get; } - public static explicit operator OpenAIFile(ClientResult result); - public static implicit operator BinaryContent(OpenAIFile openAIFile); + [Experimental("OPENAI001")] + protected virtual OpenAIFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual OpenAIFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIFileClient { protected OpenAIFileClient(); @@ -1875,65 +2611,450 @@ public class OpenAIFileClient { public virtual Task> UploadFileAsync(string filePath, FileUploadPurpose purpose); } public class OpenAIFileCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { - public static explicit operator OpenAIFileCollection(ClientResult result); - public static implicit operator BinaryContent(OpenAIFileCollection openAIFileCollection); + [Experimental("OPENAI001")] + protected virtual OpenAIFileCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual OpenAIFileCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIFilesModelFactory { public static FileDeletionResult FileDeletionResult(string fileId = null, bool deleted = false); public static OpenAIFileCollection OpenAIFileCollection(IEnumerable items = null); - public static OpenAIFile OpenAIFileInfo(string id = null, int? sizeInBytes = null, DateTimeOffset createdAt = default, string filename = null, FilePurpose purpose = FilePurpose.Assistants, FileStatus status = FileStatus.Uploaded, string statusDetails = null, DateTimeOffset? expiresAt = null); + [Experimental("OPENAI001")] + public static OpenAIFile OpenAIFileInfo(string id = null, int? sizeInBytes = null, DateTimeOffset createdAt = default, string filename = null, FilePurpose purpose = FilePurpose.Assistants, FileStatus status = FileStatus.Uploaded, string statusDetails = null, DateTimeOffset? expiresAt = null, long? sizeInBytesLong = null); [EditorBrowsable(EditorBrowsableState.Never)] public static OpenAIFile OpenAIFileInfo(string id, int? sizeInBytes, DateTimeOffset createdAt, string filename, FilePurpose purpose, FileStatus status, string statusDetails); } } namespace OpenAI.FineTuning { + [Experimental("OPENAI001")] + public class FineTuningCheckpoint : IJsonModel, IPersistableModel { + public DateTimeOffset CreatedAt { get; } + public string Id { get; } + public string JobId { get; } + public FineTuningCheckpointMetrics Metrics { get; } + public string ModelId { get; } + public int StepNumber { get; } + [Experimental("OPENAI001")] + protected virtual FineTuningCheckpoint JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FineTuningCheckpoint PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + public override string ToString(); + } + [Experimental("OPENAI001")] + public class FineTuningCheckpointMetrics : IJsonModel, IPersistableModel { + public float? FullValidLoss { get; } + public float? FullValidMeanTokenAccuracy { get; } + public int StepNumber { get; } + public float? TrainLoss { get; } + public float? TrainMeanTokenAccuracy { get; } + public float? ValidLoss { get; } + public float? ValidMeanTokenAccuracy { get; } + [Experimental("OPENAI001")] + protected virtual FineTuningCheckpointMetrics JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FineTuningCheckpointMetrics PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } [Experimental("OPENAI001")] public class FineTuningClient { protected FineTuningClient(); public FineTuningClient(ApiKeyCredential credential, OpenAIClientOptions options); public FineTuningClient(ApiKeyCredential credential); protected internal FineTuningClient(ClientPipeline pipeline, OpenAIClientOptions options); + protected internal FineTuningClient(ClientPipeline pipeline, Uri endpoint); public FineTuningClient(string apiKey); public ClientPipeline Pipeline { get; } - public virtual FineTuningJobOperation CreateFineTuningJob(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); - public virtual Task CreateFineTuningJobAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); - public virtual ClientResult GetJob(string fineTuningJobId, RequestOptions options); - public virtual Task GetJobAsync(string fineTuningJobId, RequestOptions options); - public virtual CollectionResult GetJobs(string after, int? limit, RequestOptions options); - public virtual AsyncCollectionResult GetJobsAsync(string after, int? limit, RequestOptions options); + public virtual ClientResult CreateFineTuningCheckpointPermission(string fineTunedModelCheckpoint, BinaryContent content, RequestOptions options = null); + public virtual Task CreateFineTuningCheckpointPermissionAsync(string fineTunedModelCheckpoint, BinaryContent content, RequestOptions options = null); + public virtual ClientResult DeleteFineTuningCheckpointPermission(string fineTunedModelCheckpoint, string permissionId, RequestOptions options); + public virtual Task DeleteFineTuningCheckpointPermissionAsync(string fineTunedModelCheckpoint, string permissionId, RequestOptions options); + public virtual FineTuningJob FineTune(BinaryContent content, bool waitUntilCompleted, RequestOptions options); + public virtual FineTuningJob FineTune(string baseModel, string trainingFileId, bool waitUntilCompleted, FineTuningOptions options = null, CancellationToken cancellationToken = default); + public virtual Task FineTuneAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options); + public virtual Task FineTuneAsync(string baseModel, string trainingFileId, bool waitUntilCompleted, FineTuningOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GetFineTuningCheckpointPermissions(string fineTunedModelCheckpoint, string after, int? limit, string order, string projectId, RequestOptions options); + public virtual Task GetFineTuningCheckpointPermissionsAsync(string fineTunedModelCheckpoint, string after, int? limit, string order, string projectId, RequestOptions options); + public virtual FineTuningJob GetJob(string jobId, CancellationToken cancellationToken = default); + public virtual Task GetJobAsync(string jobId, CancellationToken cancellationToken = default); + public virtual CollectionResult GetJobs(FineTuningJobCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetJobsAsync(FineTuningJobCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult PauseFineTuningJob(string fineTuningJobId, RequestOptions options); + public virtual Task PauseFineTuningJobAsync(string fineTuningJobId, RequestOptions options); + public virtual ClientResult ResumeFineTuningJob(string fineTuningJobId, RequestOptions options); + public virtual Task ResumeFineTuningJobAsync(string fineTuningJobId, RequestOptions options); } [Experimental("OPENAI001")] - public class FineTuningJobOperation : OperationResult { - public string JobId { get; } - public override ContinuationToken? RehydrationToken { get; protected set; } - public virtual ClientResult Cancel(RequestOptions? options); - public virtual Task CancelAsync(RequestOptions? options); - public virtual ClientResult GetJob(RequestOptions? options); - public virtual Task GetJobAsync(RequestOptions? options); - public virtual CollectionResult GetJobCheckpoints(string? after, int? limit, RequestOptions? options); - public virtual AsyncCollectionResult GetJobCheckpointsAsync(string? after, int? limit, RequestOptions? options); - public virtual CollectionResult GetJobEvents(string? after, int? limit, RequestOptions options); - public virtual AsyncCollectionResult GetJobEventsAsync(string? after, int? limit, RequestOptions options); - public static FineTuningJobOperation Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); - public static FineTuningJobOperation Rehydrate(FineTuningClient client, string fineTuningJobId, CancellationToken cancellationToken = default); - public static Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); - public static Task RehydrateAsync(FineTuningClient client, string fineTuningJobId, CancellationToken cancellationToken = default); - public override ClientResult UpdateStatus(RequestOptions? options = null); - public override ValueTask UpdateStatusAsync(RequestOptions? options = null); - } -} -namespace OpenAI.Images { - public class GeneratedImage : IJsonModel, IPersistableModel { - public BinaryData ImageBytes { get; } - public Uri ImageUri { get; } - public string RevisedPrompt { get; } - public static explicit operator GeneratedImage(ClientResult result); - public static implicit operator BinaryContent(GeneratedImage generatedImage); + public class FineTuningError : IJsonModel, IPersistableModel { + public string Code { get; } + public string InvalidParameter { get; } + public string Message { get; } + [Experimental("OPENAI001")] + protected virtual FineTuningError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FineTuningError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } - public class GeneratedImageCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] + public class FineTuningEvent : IJsonModel, IPersistableModel { + public string Level; + public DateTimeOffset CreatedAt { get; } + public BinaryData Data { get; } + public string Id { get; } + public FineTuningJobEventKind? Kind { get; } + public string Message { get; } + [Experimental("OPENAI001")] + protected virtual FineTuningEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FineTuningEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public readonly partial struct FineTuningHyperparameters : IJsonModel, IPersistableModel, IJsonModel, IPersistableModel { + public int BatchSize { get; } + public int EpochCount { get; } + public float LearningRateMultiplier { get; } + } + [Experimental("OPENAI001")] + public class FineTuningIntegration : IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] + protected virtual FineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class FineTuningJob : OperationResult { + public string? Value; + public string BaseModel { get; } + public int BillableTrainedTokenCount { get; } + public DateTimeOffset? EstimatedFinishAt { get; } + [Obsolete("This property is deprecated. Use the MethodHyperparameters property instead.")] + public FineTuningHyperparameters Hyperparameters { get; } + public IReadOnlyList Integrations { get; } + public string JobId { get; } + public IDictionary Metadata { get; } + public MethodHyperparameters? MethodHyperparameters { get; } + public override ContinuationToken? RehydrationToken { get; protected set; } + public IReadOnlyList ResultFileIds { get; } + public int? Seed { get; } + public FineTuningStatus Status { get; } + public string TrainingFileId { get; } + public FineTuningTrainingMethod? TrainingMethod { get; } + public string? UserProvidedSuffix { get; } + public string ValidationFileId { get; } + public virtual ClientResult Cancel(RequestOptions options); + public virtual ClientResult CancelAndUpdate(CancellationToken cancellationToken = default); + public virtual Task CancelAndUpdateAsync(CancellationToken cancellationToken = default); + public virtual Task CancelAsync(RequestOptions options); + public virtual CollectionResult GetCheckpoints(GetCheckpointsOptions? options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult GetCheckpoints(string? after, int? limit, RequestOptions? options); + public virtual AsyncCollectionResult GetCheckpointsAsync(GetCheckpointsOptions? options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetCheckpointsAsync(string? after, int? limit, RequestOptions? options); + public virtual CollectionResult GetEvents(GetEventsOptions options, CancellationToken cancellationToken = default); + public virtual CollectionResult GetEvents(string? after, int? limit, RequestOptions options); + public virtual AsyncCollectionResult GetEventsAsync(GetEventsOptions options, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetEventsAsync(string? after, int? limit, RequestOptions options); + public static FineTuningJob Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, RequestOptions options); + public static FineTuningJob Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static FineTuningJob Rehydrate(FineTuningClient client, string JobId, RequestOptions options); + public static FineTuningJob Rehydrate(FineTuningClient client, string JobId, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, RequestOptions options); + public static Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(FineTuningClient client, string JobId, RequestOptions options); + public static Task RehydrateAsync(FineTuningClient client, string JobId, CancellationToken cancellationToken = default); + public override ClientResult UpdateStatus(RequestOptions? options); + public ClientResult UpdateStatus(CancellationToken cancellationToken = default); + public override ValueTask UpdateStatusAsync(RequestOptions? options); + public ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default); + public override void WaitForCompletion(CancellationToken cancellationToken = default); + public override ValueTask WaitForCompletionAsync(CancellationToken cancellationToken = default); + } + [Experimental("OPENAI001")] + public class FineTuningJobCollectionOptions { + public string AfterJobId { get; set; } + public int? PageSize { get; set; } + } + [Experimental("OPENAI001")] + public readonly partial struct FineTuningJobEventKind : IEquatable { + public FineTuningJobEventKind(string value); + public static FineTuningJobEventKind Message { get; } + public static FineTuningJobEventKind Metrics { get; } + public readonly bool Equals(FineTuningJobEventKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(FineTuningJobEventKind left, FineTuningJobEventKind right); + public static implicit operator FineTuningJobEventKind(string value); + public static bool operator !=(FineTuningJobEventKind left, FineTuningJobEventKind right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class FineTuningOptions : IJsonModel, IPersistableModel { + public IList Integrations { get; } + public IDictionary Metadata { get; } + public int? Seed { get; set; } + public string Suffix { get; set; } + public FineTuningTrainingMethod TrainingMethod { get; set; } + public string ValidationFile { get; set; } + [Experimental("OPENAI001")] + protected virtual FineTuningOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FineTuningOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public readonly partial struct FineTuningStatus : IEquatable, IEquatable { + public FineTuningStatus(string value); + public static FineTuningStatus Cancelled { get; } + public static FineTuningStatus Failed { get; } + public bool InProgress { get; } + public static FineTuningStatus Queued { get; } + public static FineTuningStatus Running { get; } + public static FineTuningStatus Succeeded { get; } + public static FineTuningStatus ValidatingFiles { get; } + public readonly bool Equals(FineTuningStatus other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + public readonly bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(FineTuningStatus left, FineTuningStatus right); + public static implicit operator FineTuningStatus(string value); + public static bool operator !=(FineTuningStatus left, FineTuningStatus right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] + public class FineTuningTrainingMethod : IJsonModel, IPersistableModel { + public static FineTuningTrainingMethod CreateDirectPreferenceOptimization(HyperparameterBatchSize batchSize = null, HyperparameterEpochCount epochCount = null, HyperparameterLearningRate learningRate = null, HyperparameterBetaFactor betaFactor = null); + public static FineTuningTrainingMethod CreateSupervised(HyperparameterBatchSize batchSize = null, HyperparameterEpochCount epochCount = null, HyperparameterLearningRate learningRate = null); + [Experimental("OPENAI001")] + protected virtual FineTuningTrainingMethod JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FineTuningTrainingMethod PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class GetCheckpointsOptions { + public string AfterCheckpointId { get; set; } + public int? PageSize { get; set; } + } + [Experimental("OPENAI001")] + public class GetEventsOptions { + public string AfterEventId { get; set; } + public int? PageSize { get; set; } + } + [Experimental("OPENAI001")] + public class HyperparameterBatchSize : IEquatable, IEquatable, IJsonModel, IPersistableModel { + public HyperparameterBatchSize(int batchSize); + public static HyperparameterBatchSize CreateAuto(); + public static HyperparameterBatchSize CreateSize(int batchSize); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterBatchSize first, HyperparameterBatchSize second); + public static implicit operator HyperparameterBatchSize(int batchSize); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterBatchSize first, HyperparameterBatchSize second); + } + [Experimental("OPENAI001")] + public class HyperparameterBetaFactor : IEquatable, IEquatable, IJsonModel, IPersistableModel { + public HyperparameterBetaFactor(int beta); + public static HyperparameterBetaFactor CreateAuto(); + public static HyperparameterBetaFactor CreateBeta(int beta); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterBetaFactor first, HyperparameterBetaFactor second); + public static implicit operator HyperparameterBetaFactor(int beta); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterBetaFactor first, HyperparameterBetaFactor second); + } + [Experimental("OPENAI001")] + public class HyperparameterEpochCount : IEquatable, IEquatable, IJsonModel, IPersistableModel { + public HyperparameterEpochCount(int epochCount); + public static HyperparameterEpochCount CreateAuto(); + public static HyperparameterEpochCount CreateEpochCount(int epochCount); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterEpochCount first, HyperparameterEpochCount second); + public static implicit operator HyperparameterEpochCount(int epochCount); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterEpochCount first, HyperparameterEpochCount second); + } + [Experimental("OPENAI001")] + public class HyperparameterLearningRate : IEquatable, IEquatable, IEquatable, IJsonModel, IPersistableModel { + public HyperparameterLearningRate(double learningRateMultiplier); + public static HyperparameterLearningRate CreateAuto(); + public static HyperparameterLearningRate CreateMultiplier(double learningRateMultiplier); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(double other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterLearningRate first, HyperparameterLearningRate second); + public static implicit operator HyperparameterLearningRate(double learningRateMultiplier); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterLearningRate first, HyperparameterLearningRate second); + } + [Experimental("OPENAI001")] + public class HyperparametersForDPO : MethodHyperparameters, IJsonModel, IPersistableModel { + public int BatchSize { get; } + public float Beta { get; } + public int EpochCount { get; } + public float LearningRateMultiplier { get; } + [Experimental("OPENAI001")] + protected virtual HyperparametersForDPO JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual HyperparametersForDPO PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class HyperparametersForSupervised : MethodHyperparameters, IJsonModel, IPersistableModel { + public int BatchSize { get; } + public int EpochCount { get; } + public float LearningRateMultiplier { get; } + [Experimental("OPENAI001")] + protected virtual HyperparametersForSupervised JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual HyperparametersForSupervised PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class MethodHyperparameters { + } + [Experimental("OPENAI001")] + public class WeightsAndBiasesIntegration : FineTuningIntegration, IJsonModel, IPersistableModel { + public WeightsAndBiasesIntegration(string projectName); + public string DisplayName { get; set; } + public string EntityName { get; set; } + public string ProjectName { get; set; } + public IList Tags { get; } + [Experimental("OPENAI001")] + protected override FineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override FineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } +} +namespace OpenAI.Images { + public class GeneratedImage : IJsonModel, IPersistableModel { + public BinaryData ImageBytes { get; } + public Uri ImageUri { get; } + public string RevisedPrompt { get; } + [Experimental("OPENAI001")] + protected virtual GeneratedImage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual GeneratedImage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public readonly partial struct GeneratedImageBackground : IEquatable { + public GeneratedImageBackground(string value); + public static GeneratedImageBackground Auto { get; } + public static GeneratedImageBackground Opaque { get; } + public static GeneratedImageBackground Transparent { get; } + public readonly bool Equals(GeneratedImageBackground other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageBackground left, GeneratedImageBackground right); + public static implicit operator GeneratedImageBackground(string value); + public static bool operator !=(GeneratedImageBackground left, GeneratedImageBackground right); + public override readonly string ToString(); + } + public class GeneratedImageCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } - public static explicit operator GeneratedImageCollection(ClientResult result); - public static implicit operator BinaryContent(GeneratedImageCollection generatedImageCollection); + [Experimental("OPENAI001")] + public ImageTokenUsage Usage { get; } + [Experimental("OPENAI001")] + protected virtual GeneratedImageCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual GeneratedImageCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public readonly partial struct GeneratedImageFileFormat : IEquatable { + public GeneratedImageFileFormat(string value); + public static GeneratedImageFileFormat Jpeg { get; } + public static GeneratedImageFileFormat Png { get; } + public static GeneratedImageFileFormat Webp { get; } + public readonly bool Equals(GeneratedImageFileFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageFileFormat left, GeneratedImageFileFormat right); + public static implicit operator GeneratedImageFileFormat(string value); + public static bool operator !=(GeneratedImageFileFormat left, GeneratedImageFileFormat right); + public override readonly string ToString(); } public readonly partial struct GeneratedImageFormat : IEquatable { public GeneratedImageFormat(string value); @@ -1949,9 +3070,30 @@ public class GeneratedImageCollection : ObjectModel.ReadOnlyCollection { + public GeneratedImageModerationLevel(string value); + public static GeneratedImageModerationLevel Auto { get; } + public static GeneratedImageModerationLevel Low { get; } + public readonly bool Equals(GeneratedImageModerationLevel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageModerationLevel left, GeneratedImageModerationLevel right); + public static implicit operator GeneratedImageModerationLevel(string value); + public static bool operator !=(GeneratedImageModerationLevel left, GeneratedImageModerationLevel right); + public override readonly string ToString(); + } public readonly partial struct GeneratedImageQuality : IEquatable { public GeneratedImageQuality(string value); + [Experimental("OPENAI001")] + public static GeneratedImageQuality Auto { get; } public static GeneratedImageQuality High { get; } + [Experimental("OPENAI001")] + public static GeneratedImageQuality Low { get; } + [Experimental("OPENAI001")] + public static GeneratedImageQuality Medium { get; } public static GeneratedImageQuality Standard { get; } public readonly bool Equals(GeneratedImageQuality other); [EditorBrowsable(EditorBrowsableState.Never)] @@ -1965,11 +3107,17 @@ public class GeneratedImageCollection : ObjectModel.ReadOnlyCollection { public static readonly GeneratedImageSize W1024xH1024; + [Experimental("OPENAI001")] + public static readonly GeneratedImageSize W1024xH1536; public static readonly GeneratedImageSize W1024xH1792; + [Experimental("OPENAI001")] + public static readonly GeneratedImageSize W1536xH1024; public static readonly GeneratedImageSize W1792xH1024; public static readonly GeneratedImageSize W256xH256; public static readonly GeneratedImageSize W512xH512; public GeneratedImageSize(int width, int height); + [Experimental("OPENAI001")] + public static GeneratedImageSize Auto { get; } public readonly bool Equals(GeneratedImageSize other); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly bool Equals(object obj); @@ -2045,43 +3193,112 @@ public class ImageEditOptions : IJsonModel, IPersistableModel< public string EndUserId { get; set; } public GeneratedImageFormat? ResponseFormat { get; set; } public GeneratedImageSize? Size { get; set; } - public static explicit operator ImageEditOptions(ClientResult result); - public static implicit operator BinaryContent(ImageEditOptions imageEditOptions); + [Experimental("OPENAI001")] + protected virtual ImageEditOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ImageEditOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ImageGenerationOptions : IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] + public GeneratedImageBackground? Background { get; set; } public string EndUserId { get; set; } + [Experimental("OPENAI001")] + public GeneratedImageModerationLevel? ModerationLevel { get; set; } + [Experimental("OPENAI001")] + public int? OutputCompressionFactor { get; set; } + [Experimental("OPENAI001")] + public GeneratedImageFileFormat? OutputFileFormat { get; set; } public GeneratedImageQuality? Quality { get; set; } public GeneratedImageFormat? ResponseFormat { get; set; } public GeneratedImageSize? Size { get; set; } public GeneratedImageStyle? Style { get; set; } - public static explicit operator ImageGenerationOptions(ClientResult result); - public static implicit operator BinaryContent(ImageGenerationOptions imageGenerationOptions); + [Experimental("OPENAI001")] + protected virtual ImageGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ImageGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class ImageInputTokenUsageDetails : IJsonModel, IPersistableModel { + public int ImageTokenCount { get; } + public int TextTokenCount { get; } + [Experimental("OPENAI001")] + protected virtual ImageInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ImageInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class ImageTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { get; } + public ImageInputTokenUsageDetails InputTokenDetails { get; } + public int OutputTokenCount { get; } + public int TotalTokenCount { get; } + [Experimental("OPENAI001")] + protected virtual ImageTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ImageTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ImageVariationOptions : IJsonModel, IPersistableModel { public string EndUserId { get; set; } public GeneratedImageFormat? ResponseFormat { get; set; } public GeneratedImageSize? Size { get; set; } - public static explicit operator ImageVariationOptions(ClientResult result); - public static implicit operator BinaryContent(ImageVariationOptions imageVariationOptions); + [Experimental("OPENAI001")] + protected virtual ImageVariationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ImageVariationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIImagesModelFactory { public static GeneratedImage GeneratedImage(BinaryData imageBytes = null, Uri imageUri = null, string revisedPrompt = null); - public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt = default, IEnumerable items = null); + [Experimental("OPENAI001")] + public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt = default, IEnumerable items = null, ImageTokenUsage usage = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt, IEnumerable items); } } namespace OpenAI.Models { public class ModelDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string ModelId { get; } - public static explicit operator ModelDeletionResult(ClientResult result); - public static implicit operator BinaryContent(ModelDeletionResult modelDeletionResult); + [Experimental("OPENAI001")] + protected virtual ModelDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ModelDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIModel : IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } public string Id { get; } public string OwnedBy { get; } - public static explicit operator OpenAIModel(ClientResult result); - public static implicit operator BinaryContent(OpenAIModel openAIModel); + [Experimental("OPENAI001")] + protected virtual OpenAIModel JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual OpenAIModel PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIModelClient { protected OpenAIModelClient(); @@ -2110,8 +3327,14 @@ public class OpenAIModelClient { public virtual Task> GetModelsAsync(CancellationToken cancellationToken = default); } public class OpenAIModelCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { - public static explicit operator OpenAIModelCollection(ClientResult result); - public static implicit operator BinaryContent(OpenAIModelCollection openAIModelCollection); + [Experimental("OPENAI001")] + protected virtual OpenAIModelCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual OpenAIModelCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIModelsModelFactory { public static ModelDeletionResult ModelDeletionResult(string modelId = null, bool deleted = false); @@ -2155,47 +3378,37 @@ public class ModerationResult : IJsonModel, IPersistableModel< public ModerationCategory SexualMinors { get; } public ModerationCategory Violence { get; } public ModerationCategory ViolenceGraphic { get; } - public static explicit operator ModerationResult(ClientResult result); - public static implicit operator BinaryContent(ModerationResult moderationResult); + [Experimental("OPENAI001")] + protected virtual ModerationResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ModerationResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ModerationResultCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { public string Id { get; } public string Model { get; } - public static explicit operator ModerationResultCollection(ClientResult result); - public static implicit operator BinaryContent(ModerationResultCollection moderationResultCollection); + [Experimental("OPENAI001")] + protected virtual ModerationResultCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ModerationResultCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIModerationsModelFactory { public static ModerationCategory ModerationCategory(bool flagged = false, float score = 0); + [Experimental("OPENAI001")] public static ModerationResult ModerationResult(bool flagged = false, ModerationCategory hate = null, ModerationCategory hateThreatening = null, ModerationCategory harassment = null, ModerationCategory harassmentThreatening = null, ModerationCategory selfHarm = null, ModerationCategory selfHarmIntent = null, ModerationCategory selfHarmInstructions = null, ModerationCategory sexual = null, ModerationCategory sexualMinors = null, ModerationCategory violence = null, ModerationCategory violenceGraphic = null, ModerationCategory illicit = null, ModerationCategory illicitViolent = null); [EditorBrowsable(EditorBrowsableState.Never)] public static ModerationResult ModerationResult(bool flagged, ModerationCategory hate, ModerationCategory hateThreatening, ModerationCategory harassment, ModerationCategory harassmentThreatening, ModerationCategory selfHarm, ModerationCategory selfHarmIntent, ModerationCategory selfHarmInstructions, ModerationCategory sexual, ModerationCategory sexualMinors, ModerationCategory violence, ModerationCategory violenceGraphic); public static ModerationResultCollection ModerationResultCollection(string id = null, string model = null, IEnumerable items = null); } } -namespace OpenAI.RealtimeConversation { - [Experimental("OPENAI002")] - public readonly partial struct ConversationAudioFormat : IEquatable { - public ConversationAudioFormat(string value); - public static ConversationAudioFormat G711Alaw { get; } - public static ConversationAudioFormat G711Ulaw { get; } - public static ConversationAudioFormat Pcm16 { get; } - public readonly bool Equals(ConversationAudioFormat other); - [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly bool Equals(object obj); - [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly int GetHashCode(); - public static bool operator ==(ConversationAudioFormat left, ConversationAudioFormat right); - public static implicit operator ConversationAudioFormat(string value); - public static bool operator !=(ConversationAudioFormat left, ConversationAudioFormat right); - public override readonly string ToString(); - } - [Experimental("OPENAI002")] - [Flags] - public enum ConversationContentModalities { - Default = 0, - Text = 1, - Audio = 2 - } +namespace OpenAI.Realtime { [Experimental("OPENAI002")] public class ConversationContentPart : IJsonModel, IPersistableModel { public string AudioTranscript { get; } @@ -2204,9 +3417,15 @@ public class ConversationContentPart : IJsonModel, IPer public static ConversationContentPart CreateInputTextPart(string text); public static ConversationContentPart CreateOutputAudioTranscriptPart(string transcript = null); public static ConversationContentPart CreateOutputTextPart(string text); - public static explicit operator ConversationContentPart(ClientResult result); - public static implicit operator BinaryContent(ConversationContentPart conversationContentPart); + [Experimental("OPENAI001")] + protected virtual ConversationContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public static implicit operator ConversationContentPart(string text); + [Experimental("OPENAI001")] + protected virtual ConversationContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public readonly partial struct ConversationContentPartKind : IEquatable { @@ -2226,22 +3445,19 @@ public class ConversationContentPart : IJsonModel, IPer public override readonly string ToString(); } [Experimental("OPENAI002")] - public class ConversationErrorUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string ErrorCode { get; } - public string ErrorEventId { get; } - public string Message { get; } - public string ParameterName { get; } - public new static explicit operator ConversationErrorUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationErrorUpdate conversationErrorUpdate); - } - [Experimental("OPENAI002")] public class ConversationFunctionTool : ConversationTool, IJsonModel, IPersistableModel { public ConversationFunctionTool(string name); public string Description { get; set; } public string Name { get; set; } public BinaryData Parameters { get; set; } - public new static explicit operator ConversationFunctionTool(ClientResult result); - public static implicit operator BinaryContent(ConversationFunctionTool conversationFunctionTool); + [Experimental("OPENAI001")] + protected override ConversationTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ConversationTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public readonly partial struct ConversationIncompleteReason : IEquatable { @@ -2261,97 +3477,18 @@ public class ConversationFunctionTool : ConversationTool, IJsonModel, IPersistableModel { - public new static explicit operator ConversationInputAudioClearedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputAudioClearedUpdate conversationInputAudioClearedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationInputAudioCommittedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string ItemId { get; } - public string PreviousItemId { get; } - public new static explicit operator ConversationInputAudioCommittedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputAudioCommittedUpdate conversationInputAudioCommittedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationInputSpeechFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public TimeSpan AudioEndTime { get; } - public string ItemId { get; } - public new static explicit operator ConversationInputSpeechFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputSpeechFinishedUpdate conversationInputSpeechFinishedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationInputSpeechStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public TimeSpan AudioStartTime { get; } - public string ItemId { get; } - public new static explicit operator ConversationInputSpeechStartedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputSpeechStartedUpdate conversationInputSpeechStartedUpdate); - } - [Experimental("OPENAI002")] public class ConversationInputTokenUsageDetails : IJsonModel, IPersistableModel { public int AudioTokenCount { get; } public int CachedTokenCount { get; } public int TextTokenCount { get; } - public static explicit operator ConversationInputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ConversationInputTokenUsageDetails conversationInputTokenUsageDetails); - } - [Experimental("OPENAI002")] - public class ConversationInputTranscriptionFailedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ErrorCode { get; } - public string ErrorMessage { get; } - public string ErrorParameterName { get; } - public string ItemId { get; } - public new static explicit operator ConversationInputTranscriptionFailedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputTranscriptionFailedUpdate conversationInputTranscriptionFailedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationInputTranscriptionFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ItemId { get; } - public string Transcript { get; } - public new static explicit operator ConversationInputTranscriptionFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputTranscriptionFinishedUpdate conversationInputTranscriptionFinishedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationInputTranscriptionOptions : IJsonModel, IPersistableModel { - public ConversationTranscriptionModel? Model { get; set; } - public static explicit operator ConversationInputTranscriptionOptions(ClientResult result); - public static implicit operator BinaryContent(ConversationInputTranscriptionOptions conversationInputTranscriptionOptions); - } - [Experimental("OPENAI002")] - public class ConversationItem : IJsonModel, IPersistableModel { - public string FunctionArguments { get; } - public string FunctionCallId { get; } - public string FunctionName { get; } - public string Id { get; set; } - public IReadOnlyList MessageContentParts { get; } - public ConversationMessageRole? MessageRole { get; } - public static ConversationItem CreateAssistantMessage(IEnumerable contentItems); - public static ConversationItem CreateFunctionCall(string name, string callId, string arguments); - public static ConversationItem CreateFunctionCallOutput(string callId, string output); - public static ConversationItem CreateSystemMessage(IEnumerable contentItems); - public static ConversationItem CreateUserMessage(IEnumerable contentItems); - public static explicit operator ConversationItem(ClientResult result); - public static implicit operator BinaryContent(ConversationItem conversationItem); - } - [Experimental("OPENAI002")] - public class ConversationItemCreatedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string FunctionCallArguments { get; } - public string FunctionCallId { get; } - public string FunctionCallOutput { get; } - public string FunctionName { get; } - public string ItemId { get; } - public IReadOnlyList MessageContentParts { get; } - public ConversationMessageRole? MessageRole { get; } - public string PreviousItemId { get; } - public new static explicit operator ConversationItemCreatedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemCreatedUpdate conversationItemCreatedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationItemDeletedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string ItemId { get; } - public new static explicit operator ConversationItemDeletedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemDeletedUpdate conversationItemDeletedUpdate); + [Experimental("OPENAI001")] + protected virtual ConversationInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ConversationInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public readonly partial struct ConversationItemStatus : IEquatable { @@ -2370,93 +3507,6 @@ public class ConversationItemDeletedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ItemId { get; } - public int OutputIndex { get; } - public string ResponseId { get; } - public new static explicit operator ConversationItemStreamingAudioFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingAudioFinishedUpdate conversationItemStreamingAudioFinishedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationItemStreamingAudioTranscriptionFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ItemId { get; } - public int OutputIndex { get; } - public string ResponseId { get; } - public string Transcript { get; } - public new static explicit operator ConversationItemStreamingAudioTranscriptionFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingAudioTranscriptionFinishedUpdate conversationItemStreamingAudioTranscriptionFinishedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationItemStreamingFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string FunctionCallArguments { get; } - public string FunctionCallId { get; } - public string FunctionCallOutput { get; } - public string FunctionName { get; } - public string ItemId { get; } - public IReadOnlyList MessageContentParts { get; } - public ConversationMessageRole? MessageRole { get; } - public int OutputIndex { get; } - public string ResponseId { get; } - public new static explicit operator ConversationItemStreamingFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingFinishedUpdate conversationItemStreamingFinishedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationItemStreamingPartDeltaUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public BinaryData AudioBytes { get; } - public string AudioTranscript { get; } - public int ContentPartIndex { get; } - public string FunctionArguments { get; } - public string FunctionCallId { get; } - public string ItemId { get; } - public int ItemIndex { get; } - public string ResponseId { get; } - public string Text { get; } - } - public class ConversationItemStreamingPartFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string AudioTranscript { get; } - public int ContentPartIndex { get; } - public string FunctionArguments { get; } - public string FunctionCallId { get; } - public string ItemId { get; } - public int ItemIndex { get; } - public string ResponseId { get; } - public string Text { get; } - } - [Experimental("OPENAI002")] - public class ConversationItemStreamingStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string FunctionCallArguments { get; } - public string FunctionCallId { get; } - public string FunctionCallOutput { get; } - public string FunctionName { get; } - public string ItemId { get; } - public int ItemIndex { get; } - public IReadOnlyList MessageContentParts { get; } - public ConversationMessageRole? MessageRole { get; } - public string ResponseId { get; } - public new static explicit operator ConversationItemStreamingStartedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingStartedUpdate conversationItemStreamingStartedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationItemStreamingTextFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ItemId { get; } - public int OutputIndex { get; } - public string ResponseId { get; } - public string Text { get; } - public new static explicit operator ConversationItemStreamingTextFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingTextFinishedUpdate conversationItemStreamingTextFinishedUpdate); - } - [Experimental("OPENAI002")] - public class ConversationItemTruncatedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int AudioEndMs { get; } - public int ContentIndex { get; } - public string ItemId { get; } - public new static explicit operator ConversationItemTruncatedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemTruncatedUpdate conversationItemTruncatedUpdate); - } - [Experimental("OPENAI002")] public class ConversationMaxTokensChoice : IJsonModel, IPersistableModel { public ConversationMaxTokensChoice(int numberValue); public int? NumericValue { get; } @@ -2485,8 +3535,14 @@ public class ConversationMaxTokensChoice : IJsonModel, IPersistableModel { public int AudioTokenCount { get; } public int TextTokenCount { get; } - public static explicit operator ConversationOutputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ConversationOutputTokenUsageDetails conversationOutputTokenUsageDetails); + [Experimental("OPENAI001")] + protected virtual ConversationOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ConversationOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public class ConversationRateLimitDetailsItem : IJsonModel, IPersistableModel { @@ -2494,104 +3550,107 @@ public class ConversationRateLimitDetailsItem : IJsonModel, IPersistableModel { - public IReadOnlyList AllDetails { get; } - public ConversationRateLimitDetailsItem RequestDetails { get; } - public ConversationRateLimitDetailsItem TokenDetails { get; } - public new static explicit operator ConversationRateLimitsUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationRateLimitsUpdate conversationRateLimitsUpdate); - } - [Experimental("OPENAI002")] - public class ConversationResponseFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public IReadOnlyList CreatedItems { get; } - public string ResponseId { get; } - public ConversationStatus? Status { get; } - public ConversationStatusDetails StatusDetails { get; } - public ConversationTokenUsage Usage { get; } - public new static explicit operator ConversationResponseFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationResponseFinishedUpdate conversationResponseFinishedUpdate); + [Experimental("OPENAI001")] + protected virtual ConversationRateLimitDetailsItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ConversationRateLimitDetailsItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public class ConversationResponseOptions : IJsonModel, IPersistableModel { - public ConversationContentModalities ContentModalities { get; set; } + public ConversationVoice? Voice; + public RealtimeContentModalities ContentModalities { get; set; } public ResponseConversationSelection? ConversationSelection { get; set; } public string Instructions { get; set; } public ConversationMaxTokensChoice MaxOutputTokens { get; set; } public IDictionary Metadata { get; } - public ConversationAudioFormat? OutputAudioFormat { get; set; } - public IList OverrideItems { get; } + public RealtimeAudioFormat? OutputAudioFormat { get; set; } + public IList OverrideItems { get; } public float? Temperature { get; set; } public ConversationToolChoice ToolChoice { get; set; } public IList Tools { get; } - public ConversationVoice? Voice { get; set; } - public static explicit operator ConversationResponseOptions(ClientResult result); - public static implicit operator BinaryContent(ConversationResponseOptions conversationResponseOptions); - } - [Experimental("OPENAI002")] - public class ConversationResponseStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public IReadOnlyList CreatedItems { get; } - public string ResponseId { get; } - public ConversationStatus Status { get; } - public ConversationStatusDetails StatusDetails { get; } - public ConversationTokenUsage Usage { get; } - public new static explicit operator ConversationResponseStartedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationResponseStartedUpdate conversationResponseStartedUpdate); + [Experimental("OPENAI001")] + protected virtual ConversationResponseOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ConversationResponseOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] - public class ConversationSessionConfiguredUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public ConversationContentModalities ContentModalities { get; } - public ConversationAudioFormat InputAudioFormat { get; } - public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; } + public class ConversationSessionConfiguredUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public RealtimeContentModalities ContentModalities { get; } + public RealtimeAudioFormat InputAudioFormat { get; } + public InputTranscriptionOptions InputTranscriptionOptions { get; } public string Instructions { get; } public ConversationMaxTokensChoice MaxOutputTokens { get; } public string Model { get; } - public ConversationAudioFormat OutputAudioFormat { get; } + public RealtimeAudioFormat OutputAudioFormat { get; } public string SessionId { get; } public float Temperature { get; } public ConversationToolChoice ToolChoice { get; } public IReadOnlyList Tools { get; } - public ConversationTurnDetectionOptions TurnDetectionOptions { get; } + public TurnDetectionOptions TurnDetectionOptions { get; } public ConversationVoice Voice { get; } - public new static explicit operator ConversationSessionConfiguredUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationSessionConfiguredUpdate conversationSessionConfiguredUpdate); + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public class ConversationSessionOptions : IJsonModel, IPersistableModel { - public ConversationContentModalities ContentModalities { get; set; } - public ConversationAudioFormat? InputAudioFormat { get; set; } - public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; set; } + public RealtimeContentModalities ContentModalities { get; set; } + public RealtimeAudioFormat? InputAudioFormat { get; set; } + public InputNoiseReductionOptions InputNoiseReductionOptions { get; set; } + public InputTranscriptionOptions InputTranscriptionOptions { get; set; } public string Instructions { get; set; } public ConversationMaxTokensChoice MaxOutputTokens { get; set; } - public ConversationAudioFormat? OutputAudioFormat { get; set; } + public RealtimeAudioFormat? OutputAudioFormat { get; set; } public float? Temperature { get; set; } public ConversationToolChoice ToolChoice { get; set; } public IList Tools { get; } - public ConversationTurnDetectionOptions TurnDetectionOptions { get; set; } + public TurnDetectionOptions TurnDetectionOptions { get; set; } public ConversationVoice? Voice { get; set; } - public static explicit operator ConversationSessionOptions(ClientResult result); - public static implicit operator BinaryContent(ConversationSessionOptions conversationSessionOptions); + [Experimental("OPENAI001")] + protected virtual ConversationSessionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ConversationSessionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] - public class ConversationSessionStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public ConversationContentModalities ContentModalities { get; } - public ConversationAudioFormat InputAudioFormat { get; } - public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; } + public class ConversationSessionStartedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public RealtimeContentModalities ContentModalities { get; } + public RealtimeAudioFormat InputAudioFormat { get; } + public InputTranscriptionOptions InputTranscriptionOptions { get; } public string Instructions { get; } public ConversationMaxTokensChoice MaxOutputTokens { get; } public string Model { get; } - public ConversationAudioFormat OutputAudioFormat { get; } + public RealtimeAudioFormat OutputAudioFormat { get; } public string SessionId { get; } public float Temperature { get; } public ConversationToolChoice ToolChoice { get; } public IReadOnlyList Tools { get; } - public ConversationTurnDetectionOptions TurnDetectionOptions { get; } + public TurnDetectionOptions TurnDetectionOptions { get; } public ConversationVoice Voice { get; } - public new static explicit operator ConversationSessionStartedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationSessionStartedUpdate conversationSessionStartedUpdate); + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public readonly partial struct ConversationStatus : IEquatable { @@ -2616,8 +3675,14 @@ public class ConversationStatusDetails : IJsonModel, public string ErrorKind { get; } public ConversationIncompleteReason? IncompleteReason { get; } public ConversationStatus StatusKind { get; } - public static explicit operator ConversationStatusDetails(ClientResult result); - public static implicit operator BinaryContent(ConversationStatusDetails conversationStatusDetails); + [Experimental("OPENAI001")] + protected virtual ConversationStatusDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ConversationStatusDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public class ConversationTokenUsage : IJsonModel, IPersistableModel { @@ -2626,15 +3691,27 @@ public class ConversationTokenUsage : IJsonModel, IPersi public int OutputTokenCount { get; } public ConversationOutputTokenUsageDetails OutputTokenDetails { get; } public int TotalTokenCount { get; } - public static explicit operator ConversationTokenUsage(ClientResult result); - public static implicit operator BinaryContent(ConversationTokenUsage conversationTokenUsage); + [Experimental("OPENAI001")] + protected virtual ConversationTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ConversationTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] - public abstract class ConversationTool : IJsonModel, IPersistableModel { + public class ConversationTool : IJsonModel, IPersistableModel { public ConversationToolKind Kind { get; } public static ConversationTool CreateFunctionTool(string name, string description = null, BinaryData parameters = null); - public static explicit operator ConversationTool(ClientResult result); - public static implicit operator BinaryContent(ConversationTool conversationTool); + [Experimental("OPENAI001")] + protected virtual ConversationTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ConversationTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] public class ConversationToolChoice : IJsonModel, IPersistableModel { @@ -2646,144 +3723,478 @@ public class ConversationToolChoice : IJsonModel, IPersi public static ConversationToolChoice CreateRequiredToolChoice(); } [Experimental("OPENAI002")] - public enum ConversationToolChoiceKind { - Unknown = 0, - Auto = 1, - None = 2, - Required = 3, - Function = 4 + public enum ConversationToolChoiceKind { + Unknown = 0, + Auto = 1, + None = 2, + Required = 3, + Function = 4 + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationToolKind : IEquatable { + public ConversationToolKind(string value); + public static ConversationToolKind Function { get; } + public readonly bool Equals(ConversationToolKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationToolKind left, ConversationToolKind right); + public static implicit operator ConversationToolKind(string value); + public static bool operator !=(ConversationToolKind left, ConversationToolKind right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public readonly partial struct ConversationVoice : IEquatable { + public ConversationVoice(string value); + public static ConversationVoice Alloy { get; } + public static ConversationVoice Ash { get; } + public static ConversationVoice Ballad { get; } + public static ConversationVoice Coral { get; } + public static ConversationVoice Echo { get; } + public static ConversationVoice Fable { get; } + public static ConversationVoice Nova { get; } + public static ConversationVoice Onyx { get; } + public static ConversationVoice Sage { get; } + public static ConversationVoice Shimmer { get; } + public static ConversationVoice Verse { get; } + public readonly bool Equals(ConversationVoice other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ConversationVoice left, ConversationVoice right); + public static implicit operator ConversationVoice(string value); + public static bool operator !=(ConversationVoice left, ConversationVoice right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public class InputAudioClearedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class InputAudioCommittedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string ItemId { get; } + public string PreviousItemId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class InputAudioSpeechFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public TimeSpan AudioEndTime { get; } + public string ItemId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class InputAudioSpeechStartedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public TimeSpan AudioStartTime { get; } + public string ItemId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class InputAudioTranscriptionDeltaUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int? ContentIndex { get; } + public string Delta { get; } + public string ItemId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class InputAudioTranscriptionFailedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ErrorCode { get; } + public string ErrorMessage { get; } + public string ErrorParameterName { get; } + public string ItemId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class InputAudioTranscriptionFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public string Transcript { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public enum InputNoiseReductionKind { + Unknown = 0, + NearField = 1, + FarField = 2, + Disabled = 3 + } + [Experimental("OPENAI002")] + public class InputNoiseReductionOptions : IJsonModel, IPersistableModel { + public InputNoiseReductionKind Kind { get; set; } + public static InputNoiseReductionOptions CreateDisabledOptions(); + public static InputNoiseReductionOptions CreateFarFieldOptions(); + public static InputNoiseReductionOptions CreateNearFieldOptions(); + [Experimental("OPENAI001")] + protected virtual InputNoiseReductionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual InputNoiseReductionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public readonly partial struct InputTranscriptionModel : IEquatable { + public InputTranscriptionModel(string value); + public static InputTranscriptionModel Whisper1 { get; } + public readonly bool Equals(InputTranscriptionModel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(InputTranscriptionModel left, InputTranscriptionModel right); + public static implicit operator InputTranscriptionModel(string value); + public static bool operator !=(InputTranscriptionModel left, InputTranscriptionModel right); + public override readonly string ToString(); + } + [Experimental("OPENAI002")] + public class InputTranscriptionOptions : IJsonModel, IPersistableModel { + public string Language { get; set; } + public InputTranscriptionModel? Model { get; set; } + public string Prompt { get; set; } + [Experimental("OPENAI001")] + protected virtual InputTranscriptionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual InputTranscriptionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class ItemCreatedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public string PreviousItemId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class ItemDeletedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string ItemId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class ItemRetrievedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public RealtimeItem Item { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class ItemTruncatedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int AudioEndMs { get; } + public int ContentIndex { get; } + public string ItemId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class OutputAudioFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class OutputAudioTranscriptionFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + public string Transcript { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class OutputDeltaUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public BinaryData AudioBytes { get; } + public string AudioTranscript { get; } + public int ContentPartIndex { get; } + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public string ResponseId { get; } + public string Text { get; } + } + [Experimental("OPENAI002")] + public class OutputPartFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string AudioTranscript { get; } + public int ContentPartIndex { get; } + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public string ResponseId { get; } + public string Text { get; } + } + [Experimental("OPENAI002")] + public class OutputStreamingFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class OutputStreamingStartedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public string ResponseId { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class OutputTextFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + public string Text { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class RateLimitsUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList AllDetails { get; } + public ConversationRateLimitDetailsItem RequestDetails { get; } + public ConversationRateLimitDetailsItem TokenDetails { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] - public readonly partial struct ConversationToolKind : IEquatable { - public ConversationToolKind(string value); - public static ConversationToolKind Function { get; } - public readonly bool Equals(ConversationToolKind other); + public readonly partial struct RealtimeAudioFormat : IEquatable { + public RealtimeAudioFormat(string value); + public static RealtimeAudioFormat G711Alaw { get; } + public static RealtimeAudioFormat G711Ulaw { get; } + public static RealtimeAudioFormat Pcm16 { get; } + public readonly bool Equals(RealtimeAudioFormat other); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly bool Equals(object obj); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly int GetHashCode(); - public static bool operator ==(ConversationToolKind left, ConversationToolKind right); - public static implicit operator ConversationToolKind(string value); - public static bool operator !=(ConversationToolKind left, ConversationToolKind right); + public static bool operator ==(RealtimeAudioFormat left, RealtimeAudioFormat right); + public static implicit operator RealtimeAudioFormat(string value); + public static bool operator !=(RealtimeAudioFormat left, RealtimeAudioFormat right); public override readonly string ToString(); } [Experimental("OPENAI002")] - public readonly partial struct ConversationTranscriptionModel : IEquatable { - public ConversationTranscriptionModel(string value); - public static ConversationTranscriptionModel Whisper1 { get; } - public readonly bool Equals(ConversationTranscriptionModel other); + public class RealtimeClient { + protected RealtimeClient(); + public RealtimeClient(ApiKeyCredential credential, OpenAIClientOptions options); + public RealtimeClient(ApiKeyCredential credential); + protected internal RealtimeClient(ClientPipeline pipeline, OpenAIClientOptions options); + public ClientPipeline Pipeline { get; } + public event EventHandler OnReceivingCommand { add; remove; } + public event EventHandler OnSendingCommand { add; remove; } + public virtual ClientResult CreateEphemeralToken(BinaryContent content, RequestOptions options = null); + public virtual Task CreateEphemeralTokenAsync(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateEphemeralTranscriptionToken(BinaryContent content, RequestOptions options = null); + public virtual Task CreateEphemeralTranscriptionTokenAsync(BinaryContent content, RequestOptions options = null); + public RealtimeSession StartConversationSession(string model, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly bool Equals(object obj); + public virtual Task StartConversationSessionAsync(string model, RequestOptions options); + public virtual Task StartConversationSessionAsync(string model, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly int GetHashCode(); - public static bool operator ==(ConversationTranscriptionModel left, ConversationTranscriptionModel right); - public static implicit operator ConversationTranscriptionModel(string value); - public static bool operator !=(ConversationTranscriptionModel left, ConversationTranscriptionModel right); - public override readonly string ToString(); - } - [Experimental("OPENAI002")] - public enum ConversationTurnDetectionKind { - ServerVoiceActivityDetection = 0, - Disabled = 1 - } - [Experimental("OPENAI002")] - public class ConversationTurnDetectionOptions : IJsonModel, IPersistableModel { - public ConversationTurnDetectionKind Kind { get; protected internal set; } - public static ConversationTurnDetectionOptions CreateDisabledTurnDetectionOptions(); - public static ConversationTurnDetectionOptions CreateServerVoiceActivityTurnDetectionOptions(float? detectionThreshold = null, TimeSpan? prefixPaddingDuration = null, TimeSpan? silenceDuration = null, bool? enableAutomaticResponseCreation = null); - public static explicit operator ConversationTurnDetectionOptions(ClientResult result); - public static implicit operator BinaryContent(ConversationTurnDetectionOptions conversationTurnDetectionOptions); - } - [Experimental("OPENAI002")] - public class ConversationUpdate : IJsonModel, IPersistableModel { - public string EventId { get; } - public ConversationUpdateKind Kind { get; protected internal set; } - public BinaryData GetRawContent(); - public static explicit operator ConversationUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationUpdate conversationUpdate); + public virtual Task StartSessionAsync(string model, string intent, RequestOptions options); + public RealtimeSession StartTranscriptionSession(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task StartTranscriptionSessionAsync(RequestOptions options); + public virtual Task StartTranscriptionSessionAsync(CancellationToken cancellationToken = default); } [Experimental("OPENAI002")] - public enum ConversationUpdateKind { - Unknown = 0, - SessionStarted = 1, - SessionConfigured = 2, - ItemCreated = 3, - ConversationCreated = 4, - ItemDeleted = 5, - ItemTruncated = 6, - ResponseStarted = 7, - ResponseFinished = 8, - RateLimitsUpdated = 9, - ItemStreamingStarted = 10, - ItemStreamingFinished = 11, - ItemContentPartStarted = 12, - ItemContentPartFinished = 13, - ItemStreamingPartAudioDelta = 14, - ItemStreamingPartAudioFinished = 15, - ItemStreamingPartAudioTranscriptionDelta = 16, - ItemStreamingPartAudioTranscriptionFinished = 17, - ItemStreamingPartTextDelta = 18, - ItemStreamingPartTextFinished = 19, - ItemStreamingFunctionCallArgumentsDelta = 20, - ItemStreamingFunctionCallArgumentsFinished = 21, - InputSpeechStarted = 22, - InputSpeechStopped = 23, - InputTranscriptionFinished = 24, - InputTranscriptionFailed = 25, - InputAudioCommitted = 26, - InputAudioCleared = 27, - Error = 28 + [Flags] + public enum RealtimeContentModalities { + Default = 0, + Text = 1, + Audio = 2 } [Experimental("OPENAI002")] - public readonly partial struct ConversationVoice : IEquatable { - public ConversationVoice(string value); - public static ConversationVoice Alloy { get; } - public static ConversationVoice Ash { get; } - public static ConversationVoice Ballad { get; } - public static ConversationVoice Coral { get; } - public static ConversationVoice Echo { get; } - public static ConversationVoice Sage { get; } - public static ConversationVoice Shimmer { get; } - public static ConversationVoice Verse { get; } - public readonly bool Equals(ConversationVoice other); - [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly bool Equals(object obj); - [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly int GetHashCode(); - public static bool operator ==(ConversationVoice left, ConversationVoice right); - public static implicit operator ConversationVoice(string value); - public static bool operator !=(ConversationVoice left, ConversationVoice right); - public override readonly string ToString(); + public class RealtimeErrorUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string ErrorCode { get; } + public string ErrorEventId { get; } + public string Message { get; } + public string ParameterName { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] - public class RealtimeConversationClient { - protected RealtimeConversationClient(); - protected internal RealtimeConversationClient(ClientPipeline pipeline, OpenAIClientOptions options); - public RealtimeConversationClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); - public RealtimeConversationClient(string model, ApiKeyCredential credential); - public ClientPipeline Pipeline { get; } - public event EventHandler OnReceivingCommand { add; remove; } - public event EventHandler OnSendingCommand { add; remove; } - public RealtimeConversationSession StartConversationSession(CancellationToken cancellationToken = default); - public virtual Task StartConversationSessionAsync(RequestOptions options); - public virtual Task StartConversationSessionAsync(CancellationToken cancellationToken = default); + public class RealtimeItem : IJsonModel, IPersistableModel { + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string FunctionName { get; } + public string Id { get; set; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public static RealtimeItem CreateAssistantMessage(IEnumerable contentItems); + public static RealtimeItem CreateFunctionCall(string name, string callId, string arguments); + public static RealtimeItem CreateFunctionCallOutput(string callId, string output); + public static RealtimeItem CreateSystemMessage(IEnumerable contentItems); + public static RealtimeItem CreateUserMessage(IEnumerable contentItems); + [Experimental("OPENAI001")] + protected virtual RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI002")] - public class RealtimeConversationSession : IDisposable { - protected internal RealtimeConversationSession(RealtimeConversationClient parentClient, Uri endpoint, ApiKeyCredential credential); + public class RealtimeSession : IDisposable { + protected internal RealtimeSession(RealtimeClient parentClient, Uri endpoint, ApiKeyCredential credential); public Net.WebSockets.WebSocket WebSocket { get; protected set; } - public virtual void AddItem(ConversationItem item, string previousItemId, CancellationToken cancellationToken = default); - public virtual void AddItem(ConversationItem item, CancellationToken cancellationToken = default); - public virtual Task AddItemAsync(ConversationItem item, string previousItemId, CancellationToken cancellationToken = default); - public virtual Task AddItemAsync(ConversationItem item, CancellationToken cancellationToken = default); + public virtual void AddItem(RealtimeItem item, string previousItemId, CancellationToken cancellationToken = default); + public virtual void AddItem(RealtimeItem item, CancellationToken cancellationToken = default); + public virtual Task AddItemAsync(RealtimeItem item, string previousItemId, CancellationToken cancellationToken = default); + public virtual Task AddItemAsync(RealtimeItem item, CancellationToken cancellationToken = default); public virtual void CancelResponse(CancellationToken cancellationToken = default); public virtual Task CancelResponseAsync(CancellationToken cancellationToken = default); public virtual void ClearInputAudio(CancellationToken cancellationToken = default); public virtual Task ClearInputAudioAsync(CancellationToken cancellationToken = default); public virtual void CommitPendingAudio(CancellationToken cancellationToken = default); public virtual Task CommitPendingAudioAsync(CancellationToken cancellationToken = default); + public virtual Task ConfigureConversationSessionAsync(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default); public virtual void ConfigureSession(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default); - public virtual Task ConfigureSessionAsync(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default); + public virtual void ConfigureTranscriptionSession(TranscriptionSessionOptions sessionOptions, CancellationToken cancellationToken = default); + public virtual Task ConfigureTranscriptionSessionAsync(TranscriptionSessionOptions sessionOptions, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] protected internal virtual void Connect(RequestOptions options); [EditorBrowsable(EditorBrowsableState.Never)] @@ -2795,10 +4206,12 @@ public class RealtimeConversationSession : IDisposable { public virtual Task InterruptResponseAsync(CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual IEnumerable ReceiveUpdates(RequestOptions options); - public virtual IEnumerable ReceiveUpdates(CancellationToken cancellationToken = default); + public virtual IEnumerable ReceiveUpdates(CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual IAsyncEnumerable ReceiveUpdatesAsync(RequestOptions options); - public virtual IAsyncEnumerable ReceiveUpdatesAsync(CancellationToken cancellationToken = default); + public virtual IAsyncEnumerable ReceiveUpdatesAsync(CancellationToken cancellationToken = default); + public virtual void RequestItemRetrieval(string itemId, CancellationToken cancellationToken = default); + public virtual Task RequestItemRetrievalAsync(string itemId, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual void SendCommand(BinaryData data, RequestOptions options); [EditorBrowsable(EditorBrowsableState.Never)] @@ -2815,6 +4228,60 @@ public class RealtimeConversationSession : IDisposable { public virtual Task TruncateItemAsync(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default); } [Experimental("OPENAI002")] + public class RealtimeUpdate : IJsonModel, IPersistableModel { + public string EventId { get; } + public RealtimeUpdateKind Kind { get; } + public BinaryData GetRawContent(); + [Experimental("OPENAI001")] + protected virtual RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + public static explicit operator RealtimeUpdate(ClientResult result); + [Experimental("OPENAI001")] + protected virtual RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public enum RealtimeUpdateKind { + Unknown = 0, + SessionStarted = 1, + SessionConfigured = 2, + ItemCreated = 3, + ConversationCreated = 4, + ItemRetrieved = 5, + ItemDeleted = 6, + ItemTruncated = 7, + ResponseStarted = 8, + ResponseFinished = 9, + RateLimitsUpdated = 10, + ItemStreamingStarted = 11, + ItemStreamingFinished = 12, + ItemContentPartStarted = 13, + ItemContentPartFinished = 14, + ItemStreamingPartAudioDelta = 15, + ItemStreamingPartAudioFinished = 16, + ItemStreamingPartAudioTranscriptionDelta = 17, + ItemStreamingPartAudioTranscriptionFinished = 18, + ItemStreamingPartTextDelta = 19, + ItemStreamingPartTextFinished = 20, + ItemStreamingFunctionCallArgumentsDelta = 21, + ItemStreamingFunctionCallArgumentsFinished = 22, + InputSpeechStarted = 23, + InputSpeechStopped = 24, + InputTranscriptionFinished = 25, + InputTranscriptionDelta = 26, + InputTranscriptionFailed = 27, + InputAudioCommitted = 28, + InputAudioCleared = 29, + OutputAudioBufferCleared = 30, + OutputAudioBufferStarted = 31, + OutputAudioBufferStopped = 32, + TranscriptionSessionStarted = 33, + TranscriptionSessionConfigured = 34, + Error = 35 + } + [Experimental("OPENAI002")] public readonly partial struct ResponseConversationSelection : IEquatable { public ResponseConversationSelection(string value); public static ResponseConversationSelection Auto { get; } @@ -2829,6 +4296,91 @@ public class RealtimeConversationSession : IDisposable { public static bool operator !=(ResponseConversationSelection left, ResponseConversationSelection right); public override readonly string ToString(); } + [Experimental("OPENAI002")] + public class ResponseFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList CreatedItems { get; } + public string ResponseId { get; } + public ConversationStatus? Status { get; } + public ConversationStatusDetails StatusDetails { get; } + public ConversationTokenUsage Usage { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class ResponseStartedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList CreatedItems { get; } + public string ResponseId { get; } + public ConversationStatus Status { get; } + public ConversationStatusDetails StatusDetails { get; } + public ConversationTokenUsage Usage { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class TranscriptionSessionConfiguredUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public RealtimeContentModalities ContentModalities { get; } + public RealtimeAudioFormat InputAudioFormat { get; } + public InputTranscriptionOptions InputAudioTranscription { get; } + public TurnDetectionOptions TurnDetection { get; } + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public class TranscriptionSessionOptions : IJsonModel, IPersistableModel { + public RealtimeContentModalities ContentModalities { get; set; } + public IList Include { get; } + public RealtimeAudioFormat? InputAudioFormat { get; set; } + public InputNoiseReductionOptions InputNoiseReductionOptions { get; set; } + public InputTranscriptionOptions InputTranscriptionOptions { get; set; } + public TurnDetectionOptions TurnDetectionOptions { get; set; } + [Experimental("OPENAI001")] + protected virtual TranscriptionSessionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual TranscriptionSessionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI002")] + public enum TurnDetectionKind { + Unknown = 0, + ServerVoiceActivityDetection = 1, + SemanticVoiceActivityDetection = 2, + Disabled = 3 + } + [Experimental("OPENAI002")] + public class TurnDetectionOptions : IJsonModel, IPersistableModel { + public TurnDetectionKind Kind { get; } + public static TurnDetectionOptions CreateDisabledTurnDetectionOptions(); + public static TurnDetectionOptions CreateServerVoiceActivityTurnDetectionOptions(float? detectionThreshold = null, TimeSpan? prefixPaddingDuration = null, TimeSpan? silenceDuration = null, bool? enableAutomaticResponseCreation = null, bool? enableResponseInterruption = null); + [Experimental("OPENAI001")] + protected virtual TurnDetectionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual TurnDetectionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } } namespace OpenAI.Responses { [Experimental("OPENAICUA001")] @@ -2853,8 +4405,14 @@ public class ComputerCallAction : IJsonModel, IPersistableMo public static ComputerCallAction CreateScrollAction(Drawing.Point scrollCoordinates, int horizontalOffset, int verticalOffset); public static ComputerCallAction CreateTypeAction(string typeText); public static ComputerCallAction CreateWaitAction(); - public static explicit operator ComputerCallAction(ClientResult result); - public static implicit operator BinaryContent(ComputerCallAction computerCallAction); + [Experimental("OPENAI001")] + protected virtual ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAICUA001")] public enum ComputerCallActionKind { @@ -2878,13 +4436,18 @@ public enum ComputerCallActionMouseButton { } [Experimental("OPENAICUA001")] public class ComputerCallOutputResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public ComputerCallOutputResponseItem(string callId, IEnumerable acknowledgedSafetyChecks, ComputerOutput output); public IList AcknowledgedSafetyChecks { get; } - public string CallId { get; set; } - public ComputerOutput Output { get; set; } + public string CallId { get; } + public ComputerOutput Output { get; } public ComputerCallOutputStatus? Status { get; } - public new static explicit operator ComputerCallOutputResponseItem(ClientResult result); - public static implicit operator BinaryContent(ComputerCallOutputResponseItem computerCallOutputResponseItem); + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAICUA001")] public enum ComputerCallOutputStatus { @@ -2895,12 +4458,18 @@ public enum ComputerCallOutputStatus { [Experimental("OPENAICUA001")] public class ComputerCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { public ComputerCallResponseItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); - public ComputerCallAction Action { get; set; } - public string CallId { get; set; } + public ComputerCallAction Action { get; } + public string CallId { get; } public IList PendingSafetyChecks { get; } - public ComputerCallStatus Status { get; } - public new static explicit operator ComputerCallResponseItem(ClientResult result); - public static implicit operator BinaryContent(ComputerCallResponseItem computerCallResponseItem); + public ComputerCallStatus? Status { get; } + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAICUA001")] public class ComputerCallSafetyCheck : IJsonModel, IPersistableModel { @@ -2908,8 +4477,14 @@ public class ComputerCallSafetyCheck : IJsonModel, IPer public string Code { get; set; } public string Id { get; set; } public string Message { get; set; } - public static explicit operator ComputerCallSafetyCheck(ClientResult result); - public static implicit operator BinaryContent(ComputerCallSafetyCheck computerCallSafetyCheck); + [Experimental("OPENAI001")] + protected virtual ComputerCallSafetyCheck JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ComputerCallSafetyCheck PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAICUA001")] public enum ComputerCallStatus { @@ -2922,13 +4497,20 @@ public class ComputerOutput : IJsonModel, IPersistableModel { public ComputerToolEnvironment(string value); public static ComputerToolEnvironment Browser { get; } + public static ComputerToolEnvironment Linux { get; } public static ComputerToolEnvironment Mac { get; } public static ComputerToolEnvironment Ubuntu { get; } public static ComputerToolEnvironment Windows { get; } @@ -2942,23 +4524,37 @@ public class ComputerOutput : IJsonModel, IPersistableModel, IPersistableModel { - public FileSearchCallResponseItem(IEnumerable queries, IEnumerable results); public IList Queries { get; } - public IList Results { get; set; } - public FileSearchCallStatus Status { get; } - public new static explicit operator FileSearchCallResponseItem(ClientResult result); - public static implicit operator BinaryContent(FileSearchCallResponseItem fileSearchCallResponseItem); + public IList Results { get; } + public FileSearchCallStatus? Status { get; } + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class FileSearchCallResult : IJsonModel, IPersistableModel { - public IDictionary Attributes { get; } + public IReadOnlyDictionary Attributes { get; } public string FileId { get; set; } public string Filename { get; set; } public float? Score { get; set; } public string Text { get; set; } - public static explicit operator FileSearchCallResult(ClientResult result); - public static implicit operator BinaryContent(FileSearchCallResult fileSearchCallResult); + [Experimental("OPENAI001")] + protected virtual FileSearchCallResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FileSearchCallResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum FileSearchCallStatus { InProgress = 0, Searching = 1, @@ -2966,6 +4562,7 @@ public enum FileSearchCallStatus { Incomplete = 3, Failed = 4 } + [Experimental("OPENAI001")] public readonly partial struct FileSearchToolRanker : IEquatable { public FileSearchToolRanker(string value); public static FileSearchToolRanker Auto { get; } @@ -2980,46 +4577,75 @@ public enum FileSearchCallStatus { public static bool operator !=(FileSearchToolRanker left, FileSearchToolRanker right); public override readonly string ToString(); } + [Experimental("OPENAI001")] public class FileSearchToolRankingOptions : IJsonModel, IPersistableModel { public FileSearchToolRanker? Ranker { get; set; } public float? ScoreThreshold { get; set; } - public static explicit operator FileSearchToolRankingOptions(ClientResult result); - public static implicit operator BinaryContent(FileSearchToolRankingOptions fileSearchToolRankingOptions); + [Experimental("OPENAI001")] + protected virtual FileSearchToolRankingOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FileSearchToolRankingOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class FunctionCallOutputResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public FunctionCallOutputResponseItem(string callId, string functionOutput); - public string CallId { get; set; } + public string CallId { get; } public string FunctionOutput { get; set; } public FunctionCallOutputStatus? Status { get; } - public new static explicit operator FunctionCallOutputResponseItem(ClientResult result); - public static implicit operator BinaryContent(FunctionCallOutputResponseItem functionCallOutputResponseItem); + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum FunctionCallOutputStatus { InProgress = 0, Completed = 1, Incomplete = 2 } + [Experimental("OPENAI001")] public class FunctionCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public FunctionCallResponseItem(string callId, string functionName, BinaryData functionArguments); - public string CallId { get; set; } + public string CallId { get; } public BinaryData FunctionArguments { get; set; } public string FunctionName { get; set; } public FunctionCallStatus? Status { get; } - public new static explicit operator FunctionCallResponseItem(ClientResult result); - public static implicit operator BinaryContent(FunctionCallResponseItem functionCallResponseItem); + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum FunctionCallStatus { InProgress = 0, Completed = 1, Incomplete = 2 } + [Experimental("OPENAI001")] public class MessageResponseItem : ResponseItem, IJsonModel, IPersistableModel { public IList Content { get; } public MessageRole Role { get; } public MessageStatus? Status { get; } - public new static explicit operator MessageResponseItem(ClientResult result); - public static implicit operator BinaryContent(MessageResponseItem messageResponseItem); + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum MessageRole { Unknown = 0, Assistant = 1, @@ -3027,12 +4653,15 @@ public enum MessageRole { System = 3, User = 4 } + [Experimental("OPENAI001")] public enum MessageStatus { InProgress = 0, Completed = 1, Incomplete = 2 } + [Experimental("OPENAI001")] public class OpenAIResponse : IJsonModel, IPersistableModel { + public bool? Background { get; } public DateTimeOffset CreatedAt { get; } public string EndUserId { get; } public ResponseError Error { get; } @@ -3047,17 +4676,24 @@ public class OpenAIResponse : IJsonModel, IPersistableModel Tools { get; } - public float TopP { get; } + public float? TopP { get; } public ResponseTruncationMode? TruncationMode { get; } public ResponseTokenUsage Usage { get; } public string GetOutputText(); - public static explicit operator OpenAIResponse(ClientResult result); - public static implicit operator BinaryContent(OpenAIResponse openAIResponse); + [Experimental("OPENAI001")] + protected virtual OpenAIResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual OpenAIResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class OpenAIResponseClient { protected OpenAIResponseClient(); protected internal OpenAIResponseClient(ClientPipeline pipeline, string model, OpenAIClientOptions options); @@ -3065,6 +4701,10 @@ public class OpenAIResponseClient { public OpenAIResponseClient(string model, ApiKeyCredential credential); public OpenAIResponseClient(string model, string apiKey); public ClientPipeline Pipeline { get; } + public virtual ClientResult CancelResponse(string responseId, RequestOptions options); + public virtual ClientResult CancelResponse(string responseId, CancellationToken cancellationToken = default); + public virtual Task CancelResponseAsync(string responseId, RequestOptions options); + public virtual Task> CancelResponseAsync(string responseId, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult CreateResponse(BinaryContent content, RequestOptions options = null); public virtual ClientResult CreateResponse(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); @@ -3084,10 +4724,10 @@ public class OpenAIResponseClient { public virtual Task DeleteResponseAsync(string responseId, RequestOptions options); public virtual Task> DeleteResponseAsync(string responseId, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] - public virtual ClientResult GetResponse(string responseId, RequestOptions options); + public virtual ClientResult GetResponse(string responseId, bool? stream, int? startingAfter, RequestOptions options); public virtual ClientResult GetResponse(string responseId, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] - public virtual Task GetResponseAsync(string responseId, RequestOptions options); + public virtual Task GetResponseAsync(string responseId, bool? stream, int? startingAfter, RequestOptions options); public virtual Task> GetResponseAsync(string responseId, CancellationToken cancellationToken = default); public virtual CollectionResult GetResponseInputItems(string responseId, ResponseItemCollectionOptions options = null, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] @@ -3095,26 +4735,73 @@ public class OpenAIResponseClient { public virtual AsyncCollectionResult GetResponseInputItemsAsync(string responseId, ResponseItemCollectionOptions options = null, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual AsyncCollectionResult GetResponseInputItemsAsync(string responseId, int? limit, string order, string after, string before, RequestOptions options = null); + public virtual CollectionResult GetResponseStreaming(string responseId, int? startingAfter = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetResponseStreamingAsync(string responseId, int? startingAfter = null, CancellationToken cancellationToken = default); } + [Experimental("OPENAI001")] public class ReasoningResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public ReasoningResponseItem(IEnumerable summaryTextParts); + public ReasoningResponseItem(IEnumerable summaryParts); + public ReasoningResponseItem(string summaryText); + public string EncryptedContent { get; } public ReasoningStatus? Status { get; } - public IReadOnlyList SummaryTextParts { get; } - public new static explicit operator ReasoningResponseItem(ClientResult result); - public static implicit operator BinaryContent(ReasoningResponseItem reasoningResponseItem); + public IReadOnlyList SummaryParts { get; } + public string GetSummaryText(); + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum ReasoningStatus { InProgress = 0, Completed = 1, Incomplete = 2 } + [Experimental("OPENAI001")] + public class ReasoningSummaryPart : IJsonModel, IPersistableModel { + public static ReasoningSummaryPart CreateTextPart(string text); + [Experimental("OPENAI001")] + protected virtual ReasoningSummaryPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ReasoningSummaryPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class ReasoningSummaryTextPart : ReasoningSummaryPart, IJsonModel, IPersistableModel { + public ReasoningSummaryTextPart(string text); + public string Text { get; set; } + [Experimental("OPENAI001")] + protected override ReasoningSummaryPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ReasoningSummaryPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] public class ReferenceResponseItem : ResponseItem, IJsonModel, IPersistableModel { public ReferenceResponseItem(string id); - public new static explicit operator ReferenceResponseItem(ClientResult result); - public static implicit operator BinaryContent(ReferenceResponseItem referenceResponseItem); + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class ResponseContentPart : IJsonModel, IPersistableModel { public BinaryData InputFileBytes { get; } + public string InputFileBytesMediaType { get; } public string InputFileId { get; } public string InputFilename { get; } public ResponseImageDetailLevel? InputImageDetailLevel { get; } @@ -3123,16 +4810,24 @@ public class ResponseContentPart : IJsonModel, IPersistable public IReadOnlyList OutputTextAnnotations { get; } public string Refusal { get; } public string Text { get; } - public static ResponseContentPart CreateInputFilePart(string fileId, string filename, BinaryData fileBytes); + public static ResponseContentPart CreateInputFilePart(BinaryData fileBytes, string fileBytesMediaType, string filename); + public static ResponseContentPart CreateInputFilePart(string fileId); public static ResponseContentPart CreateInputImagePart(BinaryData imageBytes, string imageBytesMediaType, ResponseImageDetailLevel? imageDetailLevel = null); public static ResponseContentPart CreateInputImagePart(string imageFileId, ResponseImageDetailLevel? imageDetailLevel = null); public static ResponseContentPart CreateInputImagePart(Uri imageUri, ResponseImageDetailLevel? imageDetailLevel = null); public static ResponseContentPart CreateInputTextPart(string text); public static ResponseContentPart CreateOutputTextPart(string text, IEnumerable annotations); public static ResponseContentPart CreateRefusalPart(string refusal); - public static explicit operator ResponseContentPart(ClientResult result); - public static implicit operator BinaryContent(ResponseContentPart responseContentPart); + [Experimental("OPENAI001")] + protected virtual ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum ResponseContentPartKind { Unknown = 0, InputText = 1, @@ -3141,7 +4836,9 @@ public enum ResponseContentPartKind { OutputText = 4, Refusal = 5 } + [Experimental("OPENAI001")] public class ResponseCreationOptions : IJsonModel, IPersistableModel { + public bool? Background { get; set; } public string EndUserId { get; set; } public string Instructions { get; set; } public int? MaxOutputTokenCount { get; set; } @@ -3156,21 +4853,73 @@ public class ResponseCreationOptions : IJsonModel, IPer public IList Tools { get; } public float? TopP { get; set; } public ResponseTruncationMode? TruncationMode { get; set; } - public static explicit operator ResponseCreationOptions(ClientResult result); - public static implicit operator BinaryContent(ResponseCreationOptions responseCreationOptions); + [Experimental("OPENAI001")] + protected virtual ResponseCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class ResponseDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string Id { get; } - public static explicit operator ResponseDeletionResult(ClientResult result); - public static implicit operator BinaryContent(ResponseDeletionResult responseDeletionResult); + [Experimental("OPENAI001")] + protected virtual ResponseDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class ResponseError : IJsonModel, IPersistableModel { - public string Code { get; } + public ResponseErrorCode Code { get; } public string Message { get; } - public static explicit operator ResponseError(ClientResult result); - public static implicit operator BinaryContent(ResponseError responseError); + [Experimental("OPENAI001")] + protected virtual ResponseError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] + public readonly partial struct ResponseErrorCode : IEquatable { + public ResponseErrorCode(string value); + public static ResponseErrorCode EmptyImageFile { get; } + public static ResponseErrorCode FailedToDownloadImage { get; } + public static ResponseErrorCode ImageContentPolicyViolation { get; } + public static ResponseErrorCode ImageFileNotFound { get; } + public static ResponseErrorCode ImageFileTooLarge { get; } + public static ResponseErrorCode ImageParseError { get; } + public static ResponseErrorCode ImageTooLarge { get; } + public static ResponseErrorCode ImageTooSmall { get; } + public static ResponseErrorCode InvalidBase64Image { get; } + public static ResponseErrorCode InvalidImage { get; } + public static ResponseErrorCode InvalidImageFormat { get; } + public static ResponseErrorCode InvalidImageMode { get; } + public static ResponseErrorCode InvalidImageUrl { get; } + public static ResponseErrorCode InvalidPrompt { get; } + public static ResponseErrorCode RateLimitExceeded { get; } + public static ResponseErrorCode ServerError { get; } + public static ResponseErrorCode UnsupportedImageMediaType { get; } + public static ResponseErrorCode VectorStoreTimeout { get; } + public readonly bool Equals(ResponseErrorCode other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseErrorCode left, ResponseErrorCode right); + public static implicit operator ResponseErrorCode(string value); + public static bool operator !=(ResponseErrorCode left, ResponseErrorCode right); + public override readonly string ToString(); + } + [Experimental("OPENAI001")] public readonly partial struct ResponseImageDetailLevel : IEquatable { public ResponseImageDetailLevel(string value); public static ResponseImageDetailLevel Auto { get; } @@ -3186,11 +4935,19 @@ public class ResponseError : IJsonModel, IPersistableModel, IPersistableModel { public ResponseIncompleteStatusReason? Reason { get; } - public static explicit operator ResponseIncompleteStatusDetails(ClientResult result); - public static implicit operator BinaryContent(ResponseIncompleteStatusDetails responseIncompleteStatusDetails); + [Experimental("OPENAI001")] + protected virtual ResponseIncompleteStatusDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseIncompleteStatusDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public readonly partial struct ResponseIncompleteStatusReason : IEquatable { public ResponseIncompleteStatusReason(string value); public static ResponseIncompleteStatusReason ContentFilter { get; } @@ -3205,32 +4962,52 @@ public class ResponseIncompleteStatusDetails : IJsonModel, IPersistableModel { + public int CachedTokenCount { get; } + [Experimental("OPENAI001")] + protected virtual ResponseInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] public class ResponseItem : IJsonModel, IPersistableModel { public string Id { get; } public static MessageResponseItem CreateAssistantMessageItem(IEnumerable contentParts); public static MessageResponseItem CreateAssistantMessageItem(string outputTextContent, IEnumerable annotations = null); [Experimental("OPENAICUA001")] - public static ResponseItem CreateComputerCallItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); + public static ComputerCallResponseItem CreateComputerCallItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); [Experimental("OPENAICUA001")] - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, BinaryData screenshotImageBytes, string screenshotImageBytesMediaType); + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, BinaryData screenshotImageBytes, string screenshotImageBytesMediaType); [Experimental("OPENAICUA001")] - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, string screenshotImageFileId); + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, string screenshotImageFileId); [Experimental("OPENAICUA001")] - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, Uri screenshotImageUri); + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, Uri screenshotImageUri); public static MessageResponseItem CreateDeveloperMessageItem(IEnumerable contentParts); public static MessageResponseItem CreateDeveloperMessageItem(string inputTextContent); public static FileSearchCallResponseItem CreateFileSearchCallItem(IEnumerable queries, IEnumerable results); public static FunctionCallResponseItem CreateFunctionCallItem(string callId, string functionName, BinaryData functionArguments); public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string callId, string functionOutput); - public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryTextParts); + public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryParts); + 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 WebSearchCallResponseItem CreateWebSearchCallItem(); - public static explicit operator ResponseItem(ClientResult result); - public static implicit operator BinaryContent(ResponseItem responseItem); + [Experimental("OPENAI001")] + protected virtual ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class ResponseItemCollectionOptions { @@ -3254,6 +5031,7 @@ public class ResponseItemCollectionOptions { public static bool operator !=(ResponseItemCollectionOrder left, ResponseItemCollectionOrder right); public override readonly string ToString(); } + [Experimental("OPENAI001")] public class ResponseMessageAnnotation : IJsonModel, IPersistableModel { public string FileCitationFileId { get; } public int? FileCitationIndex { get; } @@ -3263,20 +5041,36 @@ public class ResponseMessageAnnotation : IJsonModel, public int? UriCitationEndIndex { get; } public int? UriCitationStartIndex { get; } public string UriCitationTitle { get; } - public string UriCitationUri { get; } - public static explicit operator ResponseMessageAnnotation(ClientResult result); - public static implicit operator BinaryContent(ResponseMessageAnnotation responseMessageAnnotation); + public Uri UriCitationUri { get; } + [Experimental("OPENAI001")] + protected virtual ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum ResponseMessageAnnotationKind { FileCitation = 0, UriCitation = 1, - FilePath = 2 + FilePath = 2, + ContainerFileCitation = 3 } + [Experimental("OPENAI001")] public class ResponseOutputTokenUsageDetails : IJsonModel, IPersistableModel { public int ReasoningTokenCount { get; } - public static explicit operator ResponseOutputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ResponseOutputTokenUsageDetails responseOutputTokenUsageDetails); + [Experimental("OPENAI001")] + protected virtual ResponseOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public readonly partial struct ResponseReasoningEffortLevel : IEquatable { public ResponseReasoningEffortLevel(string value); public static ResponseReasoningEffortLevel High { get; } @@ -3292,16 +5086,23 @@ public class ResponseOutputTokenUsageDetails : IJsonModel, IPersistableModel { - public ResponseReasoningOptions(); - public ResponseReasoningOptions(ResponseReasoningEffortLevel? reasoningEffortLevel); public ResponseReasoningEffortLevel? ReasoningEffortLevel { get; set; } public ResponseReasoningSummaryVerbosity? ReasoningSummaryVerbosity { get; set; } - public static explicit operator ResponseReasoningOptions(ClientResult result); - public static implicit operator BinaryContent(ResponseReasoningOptions responseReasoningOptions); + [Experimental("OPENAI001")] + protected virtual ResponseReasoningOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseReasoningOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public readonly partial struct ResponseReasoningSummaryVerbosity : IEquatable { public ResponseReasoningSummaryVerbosity(string value); + public static ResponseReasoningSummaryVerbosity Auto { get; } public static ResponseReasoningSummaryVerbosity Concise { get; } public static ResponseReasoningSummaryVerbosity Detailed { get; } public readonly bool Equals(ResponseReasoningSummaryVerbosity other); @@ -3314,48 +5115,82 @@ public class ResponseReasoningOptions : IJsonModel, IP public static bool operator !=(ResponseReasoningSummaryVerbosity left, ResponseReasoningSummaryVerbosity right); public override readonly string ToString(); } + [Experimental("OPENAI001")] public enum ResponseStatus { InProgress = 0, Completed = 1, - Incomplete = 2, - Failed = 3 + Cancelled = 2, + Queued = 3, + Incomplete = 4, + Failed = 5 } + [Experimental("OPENAI001")] public class ResponseTextFormat : IJsonModel, IPersistableModel { public ResponseTextFormatKind Kind { get; set; } public static ResponseTextFormat CreateJsonObjectFormat(); public static ResponseTextFormat CreateJsonSchemaFormat(string jsonSchemaFormatName, BinaryData jsonSchema, string jsonSchemaFormatDescription = null, bool? jsonSchemaIsStrict = null); public static ResponseTextFormat CreateTextFormat(); - public static explicit operator ResponseTextFormat(ClientResult result); - public static implicit operator BinaryContent(ResponseTextFormat responseTextFormat); + [Experimental("OPENAI001")] + protected virtual ResponseTextFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseTextFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum ResponseTextFormatKind { Unknown = 0, Text = 1, JsonObject = 2, JsonSchema = 3 } + [Experimental("OPENAI001")] public class ResponseTextOptions : IJsonModel, IPersistableModel { public ResponseTextFormat TextFormat { get; set; } - public static explicit operator ResponseTextOptions(ClientResult result); - public static implicit operator BinaryContent(ResponseTextOptions responseTextOptions); + [Experimental("OPENAI001")] + protected virtual ResponseTextOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseTextOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class ResponseTokenUsage : IJsonModel, IPersistableModel { public int InputTokenCount { get; } + public ResponseInputTokenUsageDetails InputTokenDetails { get; } public int OutputTokenCount { get; } public ResponseOutputTokenUsageDetails OutputTokenDetails { get; } public int TotalTokenCount { get; } - public static explicit operator ResponseTokenUsage(ClientResult result); - public static implicit operator BinaryContent(ResponseTokenUsage responseTokenUsage); + [Experimental("OPENAI001")] + protected virtual ResponseTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class ResponseTool : IJsonModel, IPersistableModel { [Experimental("OPENAICUA001")] - public static ResponseTool CreateComputerTool(int displayWidth, int displayHeight, ComputerToolEnvironment environment); + public static ResponseTool CreateComputerTool(ComputerToolEnvironment environment, int displayWidth, int displayHeight); public static ResponseTool CreateFileSearchTool(IEnumerable vectorStoreIds, int? maxResultCount = null, FileSearchToolRankingOptions rankingOptions = null, BinaryData filters = null); public static ResponseTool CreateFunctionTool(string functionName, string functionDescription, BinaryData functionParameters, bool functionSchemaIsStrict = false); - public static ResponseTool CreateWebSearchTool(WebSearchToolLocation webSearchToolUserLocation = null, WebSearchToolContextSize? webSearchToolContextSize = null); - public static explicit operator ResponseTool(ClientResult result); - public static implicit operator BinaryContent(ResponseTool responseTool); + public static ResponseTool CreateWebSearchTool(WebSearchUserLocation userLocation = null, WebSearchContextSize? searchContextSize = null); + [Experimental("OPENAI001")] + protected virtual ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class ResponseToolChoice : IJsonModel, IPersistableModel { public string FunctionName { get; } public ResponseToolChoiceKind Kind { get; } @@ -3368,6 +5203,7 @@ public class ResponseToolChoice : IJsonModel, IPersistableMo public static ResponseToolChoice CreateRequiredChoice(); public static ResponseToolChoice CreateWebSearchChoice(); } + [Experimental("OPENAI001")] public enum ResponseToolChoiceKind { Unknown = 0, Auto = 1, @@ -3378,6 +5214,7 @@ public enum ResponseToolChoiceKind { WebSearch = 6, Computer = 7 } + [Experimental("OPENAI001")] public readonly partial struct ResponseTruncationMode : IEquatable { public ResponseTruncationMode(string value); public static ResponseTruncationMode Auto { get; } @@ -3392,191 +5229,375 @@ public enum ResponseToolChoiceKind { public static bool operator !=(ResponseTruncationMode left, ResponseTruncationMode right); public override readonly string ToString(); } + [Experimental("OPENAI001")] public class StreamingResponseCompletedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseCompletedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseCompletedUpdate streamingResponseCompletedUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseContentPartAddedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public int OutputIndex { get; } public ResponseContentPart Part { get; } - public new static explicit operator StreamingResponseContentPartAddedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseContentPartAddedUpdate streamingResponseContentPartAddedUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseContentPartDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public int OutputIndex { get; } public ResponseContentPart Part { get; } - public new static explicit operator StreamingResponseContentPartDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseContentPartDoneUpdate streamingResponseContentPartDoneUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseCreatedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseCreatedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseCreatedUpdate streamingResponseCreatedUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseErrorUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string Code { get; } public string Message { get; } public string Param { get; } - public new static explicit operator StreamingResponseErrorUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseErrorUpdate streamingResponseErrorUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseFailedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseFailedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFailedUpdate streamingResponseFailedUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseFileSearchCallCompletedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFileSearchCallCompletedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFileSearchCallCompletedUpdate streamingResponseFileSearchCallCompletedUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseFileSearchCallInProgressUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFileSearchCallInProgressUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFileSearchCallInProgressUpdate streamingResponseFileSearchCallInProgressUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseFileSearchCallSearchingUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFileSearchCallSearchingUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFileSearchCallSearchingUpdate streamingResponseFileSearchCallSearchingUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseFunctionCallArgumentsDeltaUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string Delta { get; } public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFunctionCallArgumentsDeltaUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFunctionCallArgumentsDeltaUpdate streamingResponseFunctionCallArgumentsDeltaUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseFunctionCallArgumentsDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string Arguments { get; } public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFunctionCallArgumentsDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFunctionCallArgumentsDoneUpdate streamingResponseFunctionCallArgumentsDoneUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseIncompleteUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseIncompleteUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseIncompleteUpdate streamingResponseIncompleteUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseInProgressUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseInProgressUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseInProgressUpdate streamingResponseInProgressUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseOutputItemAddedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public ResponseItem Item { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseOutputItemAddedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseOutputItemAddedUpdate streamingResponseOutputItemAddedUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseOutputItemDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public ResponseItem Item { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseOutputItemDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseOutputItemDoneUpdate streamingResponseOutputItemDoneUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseOutputTextDeltaUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string Delta { get; } public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseOutputTextDeltaUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseOutputTextDeltaUpdate streamingResponseOutputTextDeltaUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseOutputTextDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public int OutputIndex { get; } public string Text { get; } - public new static explicit operator StreamingResponseOutputTextDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseOutputTextDoneUpdate streamingResponseOutputTextDoneUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + [Experimental("OPENAI001")] + public class StreamingResponseQueuedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public OpenAIResponse Response { get; } + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseRefusalDeltaUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string Delta { get; } public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseRefusalDeltaUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseRefusalDeltaUpdate streamingResponseRefusalDeltaUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseRefusalDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public int OutputIndex { get; } public string Refusal { get; } - public new static explicit operator StreamingResponseRefusalDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseRefusalDoneUpdate streamingResponseRefusalDoneUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } - public class StreamingResponseTextAnnotationAddedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { - public ResponseMessageAnnotation Annotation { get; } - public int ContentIndex { get; } - public string ItemId { get; } - public int OutputIndex { get; } - public new static explicit operator StreamingResponseTextAnnotationAddedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseTextAnnotationAddedUpdate streamingResponseTextAnnotationAddedUpdate); + [Experimental("OPENAI001")] + public class StreamingResponseTextAnnotationAddedUpdate { } + [Experimental("OPENAI001")] public class StreamingResponseUpdate : IJsonModel, IPersistableModel { - public static explicit operator StreamingResponseUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseUpdate streamingResponseUpdate); + public int SequenceNumber { get; } + [Experimental("OPENAI001")] + protected virtual StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseWebSearchCallCompletedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseWebSearchCallCompletedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseWebSearchCallCompletedUpdate streamingResponseWebSearchCallCompletedUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseWebSearchCallInProgressUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseWebSearchCallInProgressUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseWebSearchCallInProgressUpdate streamingResponseWebSearchCallInProgressUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class StreamingResponseWebSearchCallSearchingUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseWebSearchCallSearchingUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseWebSearchCallSearchingUpdate streamingResponseWebSearchCallSearchingUpdate); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public class WebSearchCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public WebSearchCallResponseItem(); - public WebSearchCallStatus Status { get; } - public new static explicit operator WebSearchCallResponseItem(ClientResult result); - public static implicit operator BinaryContent(WebSearchCallResponseItem webSearchCallResponseItem); + public WebSearchCallStatus? Status { get; } + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } + [Experimental("OPENAI001")] public enum WebSearchCallStatus { InProgress = 0, Searching = 1, Completed = 2, Failed = 3 } - public readonly partial struct WebSearchToolContextSize : IEquatable { - public WebSearchToolContextSize(string value); - public static WebSearchToolContextSize High { get; } - public static WebSearchToolContextSize Low { get; } - public static WebSearchToolContextSize Medium { get; } - public readonly bool Equals(WebSearchToolContextSize other); + [Experimental("OPENAI001")] + public readonly partial struct WebSearchContextSize : IEquatable { + public WebSearchContextSize(string value); + public static WebSearchContextSize High { get; } + public static WebSearchContextSize Low { get; } + public static WebSearchContextSize Medium { get; } + public readonly bool Equals(WebSearchContextSize other); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly bool Equals(object obj); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly int GetHashCode(); - public static bool operator ==(WebSearchToolContextSize left, WebSearchToolContextSize right); - public static implicit operator WebSearchToolContextSize(string value); - public static bool operator !=(WebSearchToolContextSize left, WebSearchToolContextSize right); + public static bool operator ==(WebSearchContextSize left, WebSearchContextSize right); + public static implicit operator WebSearchContextSize(string value); + public static bool operator !=(WebSearchContextSize left, WebSearchContextSize right); public override readonly string ToString(); } - public class WebSearchToolLocation : IJsonModel, IPersistableModel { - public static WebSearchToolLocation CreateApproximateLocation(string country = null, string region = null, string city = null, string timezone = null); - public static explicit operator WebSearchToolLocation(ClientResult result); - public static implicit operator BinaryContent(WebSearchToolLocation webSearchToolLocation); + [Experimental("OPENAI001")] + public class WebSearchUserLocation : IJsonModel, IPersistableModel { + public static WebSearchUserLocation CreateApproximateLocation(string country = null, string region = null, string city = null, string timezone = null); + [Experimental("OPENAI001")] + protected virtual WebSearchUserLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual WebSearchUserLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } } namespace OpenAI.VectorStores { @@ -3644,23 +5665,41 @@ public abstract class FileChunkingStrategy : IJsonModel, I public static FileChunkingStrategy Auto { get; } public static FileChunkingStrategy Unknown { get; } public static FileChunkingStrategy CreateStaticStrategy(int maxTokensPerChunk, int overlappingTokenCount); - public static explicit operator FileChunkingStrategy(ClientResult result); - public static implicit operator BinaryContent(FileChunkingStrategy fileChunkingStrategy); + [Experimental("OPENAI001")] + protected virtual FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class FileFromStoreRemovalResult : IJsonModel, IPersistableModel { public string FileId { get; } public bool Removed { get; } - public static explicit operator FileFromStoreRemovalResult(ClientResult result); - public static implicit operator BinaryContent(FileFromStoreRemovalResult fileFromStoreRemovalResult); + [Experimental("OPENAI001")] + protected virtual FileFromStoreRemovalResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual FileFromStoreRemovalResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class StaticFileChunkingStrategy : FileChunkingStrategy, IJsonModel, IPersistableModel { public StaticFileChunkingStrategy(int maxTokensPerChunk, int overlappingTokenCount); public int MaxTokensPerChunk { get; } public int OverlappingTokenCount { get; } - public new static explicit operator StaticFileChunkingStrategy(ClientResult result); - public static implicit operator BinaryContent(StaticFileChunkingStrategy staticFileChunkingStrategy); + [Experimental("OPENAI001")] + protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class VectorStore : IJsonModel, IPersistableModel { @@ -3674,8 +5713,14 @@ public class VectorStore : IJsonModel, IPersistableModel, IPersistableModel { @@ -3684,8 +5729,14 @@ public class VectorStoreBatchFileJob : IJsonModel, IPer public VectorStoreFileCounts FileCounts { get; } public VectorStoreBatchFileJobStatus Status { get; } public string VectorStoreId { get; } - public static explicit operator VectorStoreBatchFileJob(ClientResult result); - public static implicit operator BinaryContent(VectorStoreBatchFileJob vectorStoreBatchFileJob); + [Experimental("OPENAI001")] + protected virtual VectorStoreBatchFileJob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual VectorStoreBatchFileJob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct VectorStoreBatchFileJobStatus : IEquatable { @@ -3730,11 +5781,11 @@ public class VectorStoreClient { [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task CreateBatchFileJobAsync(string vectorStoreId, BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); public virtual Task CreateBatchFileJobAsync(string vectorStoreId, IEnumerable fileIds, bool waitUntilCompleted, CancellationToken cancellationToken = default); - public virtual CreateVectorStoreOperation CreateVectorStore(bool waitUntilCompleted, VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default); + public virtual CreateVectorStoreOperation CreateVectorStore(bool waitUntilCompleted, VectorStoreCreationOptions options = null, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual CreateVectorStoreOperation CreateVectorStore(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); public virtual ClientResult CreateVectorStore(BinaryContent content, RequestOptions options = null); - public virtual Task CreateVectorStoreAsync(bool waitUntilCompleted, VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default); + public virtual Task CreateVectorStoreAsync(bool waitUntilCompleted, VectorStoreCreationOptions options = null, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task CreateVectorStoreAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); public virtual Task CreateVectorStoreAsync(BinaryContent content, RequestOptions options = null); @@ -3777,10 +5828,10 @@ public class VectorStoreClient { public virtual AsyncCollectionResult GetVectorStoresAsync(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual AsyncCollectionResult GetVectorStoresAsync(int? limit, string order, string after, string before, RequestOptions options); - public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default); + public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions options, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult ModifyVectorStore(string vectorStoreId, BinaryContent content, RequestOptions options = null); - public virtual Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default); + public virtual Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions options, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task ModifyVectorStoreAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null); [EditorBrowsable(EditorBrowsableState.Never)] @@ -3789,6 +5840,14 @@ public class VectorStoreClient { [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task RemoveFileFromStoreAsync(string vectorStoreId, string fileId, RequestOptions options); public virtual Task> RemoveFileFromStoreAsync(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); + public virtual ClientResult RetrieveVectorStoreFileContent(string vectorStoreId, string fileId, RequestOptions options); + public virtual Task RetrieveVectorStoreFileContentAsync(string vectorStoreId, string fileId, RequestOptions options); + public virtual ClientResult SearchVectorStore(string vectorStoreId, BinaryContent content, RequestOptions options = null); + public virtual Task SearchVectorStoreAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult UpdateVectorStoreFileAttributes(string vectorStoreId, string fileId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult UpdateVectorStoreFileAttributes(string vectorStoreId, string fileId, IDictionary attributes, CancellationToken cancellationToken = default); + public virtual Task UpdateVectorStoreFileAttributesAsync(string vectorStoreId, string fileId, BinaryContent content, RequestOptions options = null); + public virtual Task> UpdateVectorStoreFileAttributesAsync(string vectorStoreId, string fileId, IDictionary attributes, CancellationToken cancellationToken = default); } [Experimental("OPENAI001")] public class VectorStoreCollectionOptions { @@ -3819,15 +5878,27 @@ public class VectorStoreCreationOptions : IJsonModel public IList FileIds { get; } public IDictionary Metadata { get; } public string Name { get; set; } - public static explicit operator VectorStoreCreationOptions(ClientResult result); - public static implicit operator BinaryContent(VectorStoreCreationOptions vectorStoreCreationOptions); + [Experimental("OPENAI001")] + protected virtual VectorStoreCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual VectorStoreCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class VectorStoreDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string VectorStoreId { get; } - public static explicit operator VectorStoreDeletionResult(ClientResult result); - public static implicit operator BinaryContent(VectorStoreDeletionResult vectorStoreDeletionResult); + [Experimental("OPENAI001")] + protected virtual VectorStoreDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual VectorStoreDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public enum VectorStoreExpirationAnchor { @@ -3839,8 +5910,14 @@ public class VectorStoreExpirationPolicy : IJsonModel, IPersistableModel { @@ -3852,8 +5929,14 @@ public class VectorStoreFileAssociation : IJsonModel public int Size { get; } public VectorStoreFileAssociationStatus Status { get; } public string VectorStoreId { get; } - public static explicit operator VectorStoreFileAssociation(ClientResult result); - public static implicit operator BinaryContent(VectorStoreFileAssociation vectorStoreFileAssociation); + [Experimental("OPENAI001")] + protected virtual VectorStoreFileAssociation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual VectorStoreFileAssociation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public class VectorStoreFileAssociationCollectionOptions { @@ -3882,8 +5965,14 @@ public class VectorStoreFileAssociationCollectionOptions { public class VectorStoreFileAssociationError : IJsonModel, IPersistableModel { public VectorStoreFileAssociationErrorCode Code { get; } public string Message { get; } - public static explicit operator VectorStoreFileAssociationError(ClientResult result); - public static implicit operator BinaryContent(VectorStoreFileAssociationError vectorStoreFileAssociationError); + [Experimental("OPENAI001")] + protected virtual VectorStoreFileAssociationError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual VectorStoreFileAssociationError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct VectorStoreFileAssociationErrorCode : IEquatable { @@ -3916,8 +6005,14 @@ public class VectorStoreFileCounts : IJsonModel, IPersist public int Failed { get; } public int InProgress { get; } public int Total { get; } - public static explicit operator VectorStoreFileCounts(ClientResult result); - public static implicit operator BinaryContent(VectorStoreFileCounts vectorStoreFileCounts); + [Experimental("OPENAI001")] + protected virtual VectorStoreFileCounts JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual VectorStoreFileCounts PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public readonly partial struct VectorStoreFileStatusFilter : IEquatable { @@ -3941,8 +6036,14 @@ public class VectorStoreModificationOptions : IJsonModel Metadata { get; } public string Name { get; set; } - public static explicit operator VectorStoreModificationOptions(ClientResult result); - public static implicit operator BinaryContent(VectorStoreModificationOptions vectorStoreModificationOptions); + [Experimental("OPENAI001")] + protected virtual VectorStoreModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual VectorStoreModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Experimental("OPENAI001")] public enum VectorStoreStatus { diff --git a/api/OpenAI.netstandard2.0.cs b/api/OpenAI.netstandard2.0.cs index 9df325324..8689cb397 100644 --- a/api/OpenAI.netstandard2.0.cs +++ b/api/OpenAI.netstandard2.0.cs @@ -11,14 +11,14 @@ public class OpenAIClient { public virtual BatchClient GetBatchClient(); public virtual ChatClient GetChatClient(string model); public virtual EmbeddingClient GetEmbeddingClient(string model); + public virtual EvaluationClient GetEvaluationClient(); public virtual FineTuningClient GetFineTuningClient(); public virtual ImageClient GetImageClient(string model); public virtual ModerationClient GetModerationClient(string model); public virtual OpenAIFileClient GetOpenAIFileClient(); public virtual OpenAIModelClient GetOpenAIModelClient(); - public virtual Responses.OpenAIResponseClient GetOpenAIResponseClient(); - public virtual Responses.OpenAIResponseClient GetOpenAIResponseClient(string model); - public virtual RealtimeConversation.RealtimeConversationClient GetRealtimeConversationClient(string model); + public virtual OpenAIResponseClient GetOpenAIResponseClient(string model); + public virtual RealtimeClient GetRealtimeClient(); public virtual VectorStoreClient GetVectorStoreClient(); } public class OpenAIClientOptions : ClientPipelineOptions { @@ -27,6 +27,10 @@ public class OpenAIClientOptions : ClientPipelineOptions { public string ProjectId { get; set; } public string UserAgentApplicationId { get; set; } } + public class OpenAIContext : ModelReaderWriterContext { + public static OpenAIContext Default { get; } + protected override bool TryGetTypeBuilderCore(Type type, out ModelReaderWriterTypeBuilder builder); + } } namespace OpenAI.Assistants { public class Assistant : IJsonModel, IPersistableModel { @@ -42,8 +46,10 @@ public class Assistant : IJsonModel, IPersistableModel { public float? Temperature { get; } public ToolResources ToolResources { get; } public IReadOnlyList Tools { get; } - public static explicit operator Assistant(ClientResult result); - public static implicit operator BinaryContent(Assistant assistant); + protected virtual Assistant JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual Assistant PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class AssistantClient { protected AssistantClient(); @@ -233,14 +239,18 @@ public class AssistantCreationOptions : IJsonModel, IP public float? Temperature { get; set; } public ToolResources ToolResources { get; set; } public IList Tools { get; } - public static explicit operator AssistantCreationOptions(ClientResult result); - public static implicit operator BinaryContent(AssistantCreationOptions assistantCreationOptions); + protected virtual AssistantCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual AssistantCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class AssistantDeletionResult : IJsonModel, IPersistableModel { public string AssistantId { get; } public bool Deleted { get; } - public static explicit operator AssistantDeletionResult(ClientResult result); - public static implicit operator BinaryContent(AssistantDeletionResult assistantDeletionResult); + protected virtual AssistantDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual AssistantDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class AssistantModificationOptions : IJsonModel, IPersistableModel { public IList DefaultTools { get; } @@ -253,8 +263,10 @@ public class AssistantModificationOptions : IJsonModel, IEquatable, IJsonModel, IPersistableModel { public static AssistantResponseFormat Auto { get; } @@ -268,14 +280,16 @@ public class AssistantResponseFormat : IEquatable, IEqu public override bool Equals(object obj); [EditorBrowsable(EditorBrowsableState.Never)] public override int GetHashCode(); + protected virtual AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); [EditorBrowsable(EditorBrowsableState.Never)] public static bool operator ==(AssistantResponseFormat first, AssistantResponseFormat second); - public static explicit operator AssistantResponseFormat(ClientResult result); - public static implicit operator BinaryContent(AssistantResponseFormat assistantResponseFormat); [EditorBrowsable(EditorBrowsableState.Never)] public static implicit operator AssistantResponseFormat(string plainTextFormat); [EditorBrowsable(EditorBrowsableState.Never)] public static bool operator !=(AssistantResponseFormat first, AssistantResponseFormat second); + protected virtual AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); [EditorBrowsable(EditorBrowsableState.Never)] bool IEquatable.Equals(AssistantResponseFormat other); [EditorBrowsable(EditorBrowsableState.Never)] @@ -287,17 +301,24 @@ public class AssistantThread : IJsonModel, IPersistableModel Metadata { get; } public ToolResources ToolResources { get; } - public static explicit operator AssistantThread(ClientResult result); - public static implicit operator BinaryContent(AssistantThread assistantThread); + protected virtual AssistantThread JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual AssistantThread PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class CodeInterpreterToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { - public new static explicit operator CodeInterpreterToolDefinition(ClientResult result); - public static implicit operator BinaryContent(CodeInterpreterToolDefinition codeInterpreterToolDefinition); + public CodeInterpreterToolDefinition(); + protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class CodeInterpreterToolResources : IJsonModel, IPersistableModel { public IList FileIds { get; } - public static explicit operator CodeInterpreterToolResources(ClientResult result); - public static implicit operator BinaryContent(CodeInterpreterToolResources codeInterpreterToolResources); + protected virtual CodeInterpreterToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual CodeInterpreterToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct FileSearchRanker : IEquatable { public FileSearchRanker(string value); @@ -317,29 +338,39 @@ public class FileSearchRankingOptions : IJsonModel, IP public FileSearchRankingOptions(float scoreThreshold); public FileSearchRanker? Ranker { get; set; } public float ScoreThreshold { get; set; } - public static explicit operator FileSearchRankingOptions(ClientResult result); - public static implicit operator BinaryContent(FileSearchRankingOptions fileSearchRankingOptions); + protected virtual FileSearchRankingOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FileSearchRankingOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class FileSearchToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { + public FileSearchToolDefinition(); public int? MaxResults { get; set; } public FileSearchRankingOptions RankingOptions { get; set; } - public new static explicit operator FileSearchToolDefinition(ClientResult result); - public static implicit operator BinaryContent(FileSearchToolDefinition fileSearchToolDefinition); + protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class FileSearchToolResources : IJsonModel, IPersistableModel { public IList NewVectorStores { get; } public IList VectorStoreIds { get; } - public static explicit operator FileSearchToolResources(ClientResult result); - public static implicit operator BinaryContent(FileSearchToolResources fileSearchToolResources); + protected virtual FileSearchToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FileSearchToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class FunctionToolDefinition : ToolDefinition, IJsonModel, IPersistableModel { + public FunctionToolDefinition(); public FunctionToolDefinition(string name); public string Description { get; set; } public string FunctionName { get; set; } public BinaryData Parameters { get; set; } public bool? StrictParameterSchemaEnabled { get; set; } - public new static explicit operator FunctionToolDefinition(ClientResult result); - public static implicit operator BinaryContent(FunctionToolDefinition functionToolDefinition); + protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class MessageCollectionOptions { public string AfterId { get; set; } @@ -371,9 +402,11 @@ public abstract class MessageContent : IJsonModel, IPersistableM public static MessageContent FromImageFileId(string imageFileId, MessageImageDetail? detail = null); public static MessageContent FromImageUri(Uri imageUri, MessageImageDetail? detail = null); public static MessageContent FromText(string text); - public static explicit operator MessageContent(ClientResult result); - public static implicit operator BinaryContent(MessageContent messageContent); + protected virtual MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public static implicit operator MessageContent(string value); + protected virtual MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class MessageContentUpdate : StreamingUpdate { public MessageImageDetail? ImageDetail { get; } @@ -389,25 +422,33 @@ public class MessageCreationAttachment : IJsonModel, public MessageCreationAttachment(string fileId, IEnumerable tools); public string FileId { get; } public IReadOnlyList Tools { get; } - public static explicit operator MessageCreationAttachment(ClientResult result); - public static implicit operator BinaryContent(MessageCreationAttachment messageCreationAttachment); + protected virtual MessageCreationAttachment JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual MessageCreationAttachment PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class MessageCreationOptions : IJsonModel, IPersistableModel { public IList Attachments { get; set; } public IDictionary Metadata { get; } - public static explicit operator MessageCreationOptions(ClientResult result); - public static implicit operator BinaryContent(MessageCreationOptions messageCreationOptions); + protected virtual MessageCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual MessageCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class MessageDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string MessageId { get; } - public static explicit operator MessageDeletionResult(ClientResult result); - public static implicit operator BinaryContent(MessageDeletionResult messageDeletionResult); + protected virtual MessageDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual MessageDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class MessageFailureDetails : IJsonModel, IPersistableModel { public MessageFailureReason Reason { get; } - public static explicit operator MessageFailureDetails(ClientResult result); - public static implicit operator BinaryContent(MessageFailureDetails messageFailureDetails); + protected virtual MessageFailureDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual MessageFailureDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct MessageFailureReason : IEquatable { public MessageFailureReason(string value); @@ -433,8 +474,10 @@ public enum MessageImageDetail { } public class MessageModificationOptions : IJsonModel, IPersistableModel { public IDictionary Metadata { get; } - public static explicit operator MessageModificationOptions(ClientResult result); - public static implicit operator BinaryContent(MessageModificationOptions messageModificationOptions); + protected virtual MessageModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual MessageModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum MessageRole { User = 0, @@ -503,14 +546,18 @@ public class RunCreationOptions : IJsonModel, IPersistableMo public ToolConstraint ToolConstraint { get; set; } public IList ToolsOverride { get; } public RunTruncationStrategy TruncationStrategy { get; set; } - public static explicit operator RunCreationOptions(ClientResult result); - public static implicit operator BinaryContent(RunCreationOptions runCreationOptions); + protected virtual RunCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class RunError : IJsonModel, IPersistableModel { public RunErrorCode Code { get; } public string Message { get; } - public static explicit operator RunError(ClientResult result); - public static implicit operator BinaryContent(RunError runError); + protected virtual RunError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct RunErrorCode : IEquatable { public RunErrorCode(string value); @@ -529,8 +576,10 @@ public class RunError : IJsonModel, IPersistableModel { } public class RunIncompleteDetails : IJsonModel, IPersistableModel { public RunIncompleteReason? Reason { get; } - public static explicit operator RunIncompleteDetails(ClientResult result); - public static implicit operator BinaryContent(RunIncompleteDetails runIncompleteDetails); + protected virtual RunIncompleteDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunIncompleteDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct RunIncompleteReason : IEquatable { public RunIncompleteReason(string value); @@ -548,8 +597,10 @@ public class RunIncompleteDetails : IJsonModel, IPersistab } public class RunModificationOptions : IJsonModel, IPersistableModel { public IDictionary Metadata { get; } - public static explicit operator RunModificationOptions(ClientResult result); - public static implicit operator BinaryContent(RunModificationOptions runModificationOptions); + protected virtual RunModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct RunStatus : IEquatable { public RunStatus(string value); @@ -589,14 +640,18 @@ public class RunStep : IJsonModel, IPersistableModel { public RunStepStatus Status { get; } public string ThreadId { get; } public RunStepTokenUsage Usage { get; } - public static explicit operator RunStep(ClientResult result); - public static implicit operator BinaryContent(RunStep runStep); + protected virtual RunStep JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunStep PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public abstract class RunStepCodeInterpreterOutput : IJsonModel, IPersistableModel { public string ImageFileId { get; } public string Logs { get; } - public static explicit operator RunStepCodeInterpreterOutput(ClientResult result); - public static implicit operator BinaryContent(RunStepCodeInterpreterOutput runStepCodeInterpreterOutput); + protected virtual RunStepCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunStepCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class RunStepCollectionOptions { public string AfterId { get; set; } @@ -621,8 +676,10 @@ public class RunStepCollectionOptions { public abstract class RunStepDetails : IJsonModel, IPersistableModel { public string CreatedMessageId { get; } public IReadOnlyList ToolCalls { get; } - public static explicit operator RunStepDetails(ClientResult result); - public static implicit operator BinaryContent(RunStepDetails runStepDetails); + protected virtual RunStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class RunStepDetailsUpdate : StreamingUpdate { public string CodeInterpreterInput { get; } @@ -640,8 +697,10 @@ public class RunStepDetailsUpdate : StreamingUpdate { public class RunStepError : IJsonModel, IPersistableModel { public RunStepErrorCode Code { get; } public string Message { get; } - public static explicit operator RunStepError(ClientResult result); - public static implicit operator BinaryContent(RunStepError runStepError); + protected virtual RunStepError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunStepError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct RunStepErrorCode : IEquatable { public RunStepErrorCode(string value); @@ -662,14 +721,18 @@ public class RunStepFileSearchResult : IJsonModel, IPer public string FileId { get; } public string FileName { get; } public float Score { get; } - public static explicit operator RunStepFileSearchResult(ClientResult result); - public static implicit operator BinaryContent(RunStepFileSearchResult runStepFileSearchResult); + protected virtual RunStepFileSearchResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunStepFileSearchResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class RunStepFileSearchResultContent : IJsonModel, IPersistableModel { public RunStepFileSearchResultContentKind Kind { get; } public string Text { get; } - public static explicit operator RunStepFileSearchResultContent(ClientResult result); - public static implicit operator BinaryContent(RunStepFileSearchResultContent runStepFileSearchResultContent); + protected virtual RunStepFileSearchResultContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunStepFileSearchResultContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum RunStepFileSearchResultContentKind { Text = 0 @@ -699,8 +762,10 @@ public class RunStepTokenUsage : IJsonModel, IPersistableMode public int InputTokenCount { get; } public int OutputTokenCount { get; } public int TotalTokenCount { get; } - public static explicit operator RunStepTokenUsage(ClientResult result); - public static implicit operator BinaryContent(RunStepTokenUsage runStepTokenUsage); + protected virtual RunStepTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunStepTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class RunStepToolCall : IJsonModel, IPersistableModel { public string CodeInterpreterInput { get; } @@ -712,8 +777,10 @@ public class RunStepToolCall : IJsonModel, IPersistableModel, IPersistableModel { public int InputTokenCount { get; } public int OutputTokenCount { get; } public int TotalTokenCount { get; } - public static explicit operator RunTokenUsage(ClientResult result); - public static implicit operator BinaryContent(RunTokenUsage runTokenUsage); + protected virtual RunTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class RunTruncationStrategy : IJsonModel, IPersistableModel { public static RunTruncationStrategy Auto { get; } public int? LastMessages { get; } public static RunTruncationStrategy CreateLastMessagesStrategy(int lastMessageCount); - public static explicit operator RunTruncationStrategy(ClientResult result); - public static implicit operator BinaryContent(RunTruncationStrategy runTruncationStrategy); + protected virtual RunTruncationStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RunTruncationStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class RunUpdate : StreamingUpdate { } @@ -799,14 +872,18 @@ public class ThreadCreationOptions : IJsonModel, IPersist public IList InitialMessages { get; } public IDictionary Metadata { get; } public ToolResources ToolResources { get; set; } - public static explicit operator ThreadCreationOptions(ClientResult result); - public static implicit operator BinaryContent(ThreadCreationOptions threadCreationOptions); + protected virtual ThreadCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ThreadCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ThreadDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string ThreadId { get; } - public static explicit operator ThreadDeletionResult(ClientResult result); - public static implicit operator BinaryContent(ThreadDeletionResult threadDeletionResult); + protected virtual ThreadDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ThreadDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ThreadInitializationMessage : MessageCreationOptions { public ThreadInitializationMessage(MessageRole role, IEnumerable content); @@ -826,14 +903,18 @@ public class ThreadMessage : IJsonModel, IPersistableModel, IPersistableModel { public IDictionary Metadata { get; } public ToolResources ToolResources { get; set; } - public static explicit operator ThreadModificationOptions(ClientResult result); - public static implicit operator BinaryContent(ThreadModificationOptions threadModificationOptions); + protected virtual ThreadModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ThreadModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ThreadRun : IJsonModel, IPersistableModel { public bool? AllowParallelToolCalls { get; } @@ -862,8 +943,10 @@ public class ThreadRun : IJsonModel, IPersistableModel { public IReadOnlyList Tools { get; } public RunTruncationStrategy TruncationStrategy { get; } public RunTokenUsage Usage { get; } - public static explicit operator ThreadRun(ClientResult result); - public static implicit operator BinaryContent(ThreadRun threadRun); + protected virtual ThreadRun JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ThreadRun PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ThreadUpdate : StreamingUpdate { public DateTimeOffset CreatedAt { get; } @@ -876,31 +959,37 @@ public class ToolConstraint : IJsonModel, IPersistableModel, IPersistableModel { - protected ToolDefinition(); - protected ToolDefinition(string type); + public class ToolDefinition : IJsonModel, IPersistableModel { public static CodeInterpreterToolDefinition CreateCodeInterpreter(); public static FileSearchToolDefinition CreateFileSearch(int? maxResults = null); public static FunctionToolDefinition CreateFunction(string name, string description = null, BinaryData parameters = null, bool? strictParameterSchemaEnabled = null); - public static explicit operator ToolDefinition(ClientResult result); - public static implicit operator BinaryContent(ToolDefinition toolDefinition); + protected virtual ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ToolOutput : IJsonModel, IPersistableModel { public ToolOutput(); public ToolOutput(string toolCallId, string output); public string Output { get; set; } public string ToolCallId { get; set; } - public static explicit operator ToolOutput(ClientResult result); - public static implicit operator BinaryContent(ToolOutput toolOutput); + protected virtual ToolOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ToolOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ToolResources : IJsonModel, IPersistableModel { public CodeInterpreterToolResources CodeInterpreter { get; set; } public FileSearchToolResources FileSearch { get; set; } - public static explicit operator ToolResources(ClientResult result); - public static implicit operator BinaryContent(ToolResources toolResources); + protected virtual ToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class VectorStoreCreationHelper : IJsonModel, IPersistableModel { public VectorStoreCreationHelper(); @@ -909,8 +998,10 @@ public class VectorStoreCreationHelper : IJsonModel, public FileChunkingStrategy ChunkingStrategy { get; set; } public IList FileIds { get; } public IDictionary Metadata { get; } - public static explicit operator VectorStoreCreationHelper(ClientResult result); - public static implicit operator BinaryContent(VectorStoreCreationHelper vectorStoreCreationHelper); + protected virtual VectorStoreCreationHelper JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual VectorStoreCreationHelper PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } } namespace OpenAI.Audio { @@ -935,6 +1026,10 @@ public class AudioClient { public virtual Task TranscribeAudioAsync(BinaryContent content, string contentType, RequestOptions options = null); public virtual Task> TranscribeAudioAsync(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); public virtual Task> TranscribeAudioAsync(string audioFilePath, AudioTranscriptionOptions options = null); + public virtual CollectionResult TranscribeAudioStreaming(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult TranscribeAudioStreaming(string audioFilePath, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult TranscribeAudioStreamingAsync(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult TranscribeAudioStreamingAsync(string audioFilePath, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult TranslateAudio(BinaryContent content, string contentType, RequestOptions options = null); public virtual ClientResult TranslateAudio(Stream audio, string audioFilename, AudioTranslationOptions options = null, CancellationToken cancellationToken = default); public virtual ClientResult TranslateAudio(string audioFilePath, AudioTranslationOptions options = null); @@ -948,14 +1043,26 @@ public enum AudioTimestampGranularities { Word = 1, Segment = 2 } + public class AudioTokenLogProbabilityDetails : IJsonModel, IPersistableModel { + public float LogProbability { get; } + public string Token { get; } + public ReadOnlyMemory Utf8Bytes { get; } + protected virtual AudioTokenLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual AudioTokenLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class AudioTranscription : IJsonModel, IPersistableModel { public TimeSpan? Duration { get; } public string Language { get; } public IReadOnlyList Segments { get; } public string Text { get; } + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } public IReadOnlyList Words { get; } - public static explicit operator AudioTranscription(ClientResult result); - public static implicit operator BinaryContent(AudioTranscription audioTranscription); + protected virtual AudioTranscription JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual AudioTranscription PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct AudioTranscriptionFormat : IEquatable { public AudioTranscriptionFormat(string value); @@ -975,22 +1082,32 @@ public class AudioTranscription : IJsonModel, IPersistableMo public static bool operator !=(AudioTranscriptionFormat left, AudioTranscriptionFormat right); public override readonly string ToString(); } + [Flags] + public enum AudioTranscriptionIncludes { + Default = 0, + Logprobs = 1 + } public class AudioTranscriptionOptions : IJsonModel, IPersistableModel { + public AudioTranscriptionIncludes Includes { get; set; } public string Language { get; set; } public string Prompt { get; set; } public AudioTranscriptionFormat? ResponseFormat { get; set; } public float? Temperature { get; set; } public AudioTimestampGranularities TimestampGranularities { get; set; } - public static explicit operator AudioTranscriptionOptions(ClientResult result); - public static implicit operator BinaryContent(AudioTranscriptionOptions audioTranscriptionOptions); + protected virtual AudioTranscriptionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual AudioTranscriptionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class AudioTranslation : IJsonModel, IPersistableModel { public TimeSpan? Duration { get; } public string Language { get; } public IReadOnlyList Segments { get; } public string Text { get; } - public static explicit operator AudioTranslation(ClientResult result); - public static implicit operator BinaryContent(AudioTranslation audioTranslation); + protected virtual AudioTranslation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual AudioTranslation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct AudioTranslationFormat : IEquatable { public AudioTranslationFormat(string value); @@ -1014,8 +1131,10 @@ public class AudioTranslationOptions : IJsonModel, IPer public string Prompt { get; set; } public AudioTranslationFormat? ResponseFormat { get; set; } public float? Temperature { get; set; } - public static explicit operator AudioTranslationOptions(ClientResult result); - public static implicit operator BinaryContent(AudioTranslationOptions audioTranslationOptions); + protected virtual AudioTranslationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual AudioTranslationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct GeneratedSpeechFormat : IEquatable { public GeneratedSpeechFormat(string value); @@ -1039,6 +1158,7 @@ public class AudioTranslationOptions : IJsonModel, IPer public GeneratedSpeechVoice(string value); public static GeneratedSpeechVoice Alloy { get; } public static GeneratedSpeechVoice Ash { get; } + public static GeneratedSpeechVoice Ballad { get; } public static GeneratedSpeechVoice Coral { get; } public static GeneratedSpeechVoice Echo { get; } public static GeneratedSpeechVoice Fable { get; } @@ -1046,6 +1166,7 @@ public class AudioTranslationOptions : IJsonModel, IPer public static GeneratedSpeechVoice Onyx { get; } public static GeneratedSpeechVoice Sage { get; } public static GeneratedSpeechVoice Shimmer { get; } + public static GeneratedSpeechVoice Verse { get; } public readonly bool Equals(GeneratedSpeechVoice other); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly bool Equals(object obj); @@ -1057,16 +1178,57 @@ public class AudioTranslationOptions : IJsonModel, IPer public override readonly string ToString(); } public static class OpenAIAudioModelFactory { - public static AudioTranscription AudioTranscription(string language = null, TimeSpan? duration = null, string text = null, IEnumerable words = null, IEnumerable segments = null); + public static AudioTranscription AudioTranscription(string language = null, TimeSpan? duration = null, string text = null, IEnumerable words = null, IEnumerable segments = null, IEnumerable transcriptionTokenLogProbabilities = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static AudioTranscription AudioTranscription(string language, TimeSpan? duration, string text, IEnumerable words, IEnumerable segments); public static AudioTranslation AudioTranslation(string language = null, TimeSpan? duration = null, string text = null, IEnumerable segments = null); public static TranscribedSegment TranscribedSegment(int id = 0, int seekOffset = 0, TimeSpan startTime = default, TimeSpan endTime = default, string text = null, ReadOnlyMemory tokenIds = default, float temperature = 0, float averageLogProbability = 0, float compressionRatio = 0, float noSpeechProbability = 0); public static TranscribedWord TranscribedWord(string word = null, TimeSpan startTime = default, TimeSpan endTime = default); } public class SpeechGenerationOptions : IJsonModel, IPersistableModel { + public string Instructions { get; set; } public GeneratedSpeechFormat? ResponseFormat { get; set; } public float? SpeedRatio { get; set; } - public static explicit operator SpeechGenerationOptions(ClientResult result); - public static implicit operator BinaryContent(SpeechGenerationOptions speechGenerationOptions); + protected virtual SpeechGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual SpeechGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class StreamingAudioTranscriptionTextDeltaUpdate : StreamingAudioTranscriptionUpdate, IJsonModel, IPersistableModel { + public string Delta { get; } + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } + protected override StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class StreamingAudioTranscriptionTextDoneUpdate : StreamingAudioTranscriptionUpdate, IJsonModel, IPersistableModel { + public string Text { get; } + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } + protected override StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class StreamingAudioTranscriptionUpdate : IJsonModel, IPersistableModel { + protected virtual StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public readonly partial struct StreamingAudioTranscriptionUpdateKind : IEquatable { + public StreamingAudioTranscriptionUpdateKind(string value); + public static StreamingAudioTranscriptionUpdateKind TranscriptTextDelta { get; } + public static StreamingAudioTranscriptionUpdateKind TranscriptTextDone { get; } + public readonly bool Equals(StreamingAudioTranscriptionUpdateKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(StreamingAudioTranscriptionUpdateKind left, StreamingAudioTranscriptionUpdateKind right); + public static implicit operator StreamingAudioTranscriptionUpdateKind(string value); + public static bool operator !=(StreamingAudioTranscriptionUpdateKind left, StreamingAudioTranscriptionUpdateKind right); + public override readonly string ToString(); } public readonly partial struct TranscribedSegment : IJsonModel, IPersistableModel, IJsonModel, IPersistableModel { public float AverageLogProbability { get; } @@ -1079,15 +1241,11 @@ public class SpeechGenerationOptions : IJsonModel, IPer public float Temperature { get; } public string Text { get; } public ReadOnlyMemory TokenIds { get; } - public static explicit operator TranscribedSegment(ClientResult result); - public static implicit operator BinaryContent(TranscribedSegment transcribedSegment); } public readonly partial struct TranscribedWord : IJsonModel, IPersistableModel, IJsonModel, IPersistableModel { public TimeSpan EndTime { get; } public TimeSpan StartTime { get; } public string Word { get; } - public static explicit operator TranscribedWord(ClientResult result); - public static implicit operator BinaryContent(TranscribedWord transcribedWord); } } namespace OpenAI.Batch { @@ -1111,7 +1269,9 @@ public class CreateBatchOperation : OperationResult { public virtual ClientResult GetBatch(RequestOptions? options); public virtual Task GetBatchAsync(RequestOptions? options); public static CreateBatchOperation Rehydrate(BatchClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static CreateBatchOperation Rehydrate(BatchClient client, string batchId, CancellationToken cancellationToken = default); public static Task RehydrateAsync(BatchClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(BatchClient client, string batchId, CancellationToken cancellationToken = default); public override ClientResult UpdateStatus(RequestOptions? options = null); public override ValueTask UpdateStatusAsync(RequestOptions? options = null); } @@ -1132,15 +1292,19 @@ public class AssistantChatMessage : ChatMessage, IJsonModel ToolCalls { get; } - public new static explicit operator AssistantChatMessage(ClientResult result); - public static implicit operator BinaryContent(AssistantChatMessage assistantChatMessage); + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatAudioOptions : IJsonModel, IPersistableModel { public ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice, ChatOutputAudioFormat outputAudioFormat); public ChatOutputAudioFormat OutputAudioFormat { get; } public ChatOutputAudioVoice OutputAudioVoice { get; } - public static explicit operator ChatAudioOptions(ClientResult result); - public static implicit operator BinaryContent(ChatAudioOptions chatAudioOptions); + protected virtual ChatAudioOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatAudioOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatClient { protected ChatClient(); @@ -1161,6 +1325,14 @@ public class ChatClient { public virtual CollectionResult CompleteChatStreaming(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); public virtual AsyncCollectionResult CompleteChatStreamingAsync(params ChatMessage[] messages); public virtual AsyncCollectionResult CompleteChatStreamingAsync(IEnumerable messages, ChatCompletionOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult DeleteChatCompletion(string completionId, RequestOptions options); + public virtual ClientResult DeleteChatCompletion(string completionId, CancellationToken cancellationToken = default); + public virtual Task DeleteChatCompletionAsync(string completionId, RequestOptions options); + public virtual Task> DeleteChatCompletionAsync(string completionId, CancellationToken cancellationToken = default); + public virtual ClientResult GetChatCompletion(string completionId, RequestOptions options); + public virtual ClientResult GetChatCompletion(string completionId, CancellationToken cancellationToken = default); + public virtual Task GetChatCompletionAsync(string completionId, RequestOptions options); + public virtual Task> GetChatCompletionAsync(string completionId, CancellationToken cancellationToken = default); } public class ChatCompletion : IJsonModel, IPersistableModel { public IReadOnlyList Annotations { get; } @@ -1179,8 +1351,18 @@ public class ChatCompletion : IJsonModel, IPersistableModel ToolCalls { get; } public ChatTokenUsage Usage { get; } - public static explicit operator ChatCompletion(ClientResult result); - public static implicit operator BinaryContent(ChatCompletion chatCompletion); + protected virtual ChatCompletion JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatCompletion PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ChatCompletionDeletionResult : IJsonModel, IPersistableModel { + public string ChatCompletionId { get; } + public bool Deleted { get; } + protected virtual ChatCompletionDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatCompletionDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatCompletionOptions : IJsonModel, IPersistableModel { public bool? AllowParallelToolCalls { get; set; } @@ -1209,8 +1391,10 @@ public class ChatCompletionOptions : IJsonModel, IPersist public int? TopLogProbabilityCount { get; set; } public float? TopP { get; set; } public ChatWebSearchOptions WebSearchOptions { get; set; } - public static explicit operator ChatCompletionOptions(ClientResult result); - public static implicit operator BinaryContent(ChatCompletionOptions chatCompletionOptions); + protected virtual ChatCompletionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatCompletionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ChatFinishReason { Stop = 0, @@ -1225,24 +1409,30 @@ public class ChatFunction : IJsonModel, IPersistableModel, IPersistableModel { public ChatFunctionCall(string functionName, BinaryData functionArguments); public BinaryData FunctionArguments { get; } public string FunctionName { get; } - public static explicit operator ChatFunctionCall(ClientResult result); - public static implicit operator BinaryContent(ChatFunctionCall chatFunctionCall); + protected virtual ChatFunctionCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatFunctionCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Obsolete("This class is obsolete. Please use ChatToolChoice instead.")] public class ChatFunctionChoice : IJsonModel, IPersistableModel { public static ChatFunctionChoice CreateAutoChoice(); public static ChatFunctionChoice CreateNamedChoice(string functionName); public static ChatFunctionChoice CreateNoneChoice(); - public static explicit operator ChatFunctionChoice(ClientResult result); - public static implicit operator BinaryContent(ChatFunctionChoice chatFunctionChoice); + protected virtual ChatFunctionChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatFunctionChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ChatImageDetailLevel : IEquatable { public ChatImageDetailLevel(string value); @@ -1276,8 +1466,10 @@ public class ChatFunctionChoice : IJsonModel, IPersistableMo public class ChatInputTokenUsageDetails : IJsonModel, IPersistableModel { public int AudioTokenCount { get; } public int CachedTokenCount { get; } - public static explicit operator ChatInputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ChatInputTokenUsageDetails chatInputTokenUsageDetails); + protected virtual ChatInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatMessage : IJsonModel, IPersistableModel { public ChatMessageContent Content { get; } @@ -1302,17 +1494,21 @@ public class ChatMessage : IJsonModel, IPersistableModel contentParts); public static UserChatMessage CreateUserMessage(string content); - public static explicit operator ChatMessage(ClientResult result); - public static implicit operator BinaryContent(ChatMessage chatMessage); + protected virtual ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public static implicit operator ChatMessage(string content); + protected virtual ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatMessageAnnotation : IJsonModel, IPersistableModel { public int EndIndex { get; } public int StartIndex { get; } public string WebResourceTitle { get; } public Uri WebResourceUri { get; } - public static explicit operator ChatMessageAnnotation(ClientResult result); - public static implicit operator BinaryContent(ChatMessageAnnotation chatMessageAnnotation); + protected virtual ChatMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatMessageContent : ObjectModel.Collection { public ChatMessageContent(); @@ -1341,9 +1537,11 @@ public class ChatMessageContentPart : IJsonModel, IPersi public static ChatMessageContentPart CreateInputAudioPart(BinaryData inputAudioBytes, ChatInputAudioFormat inputAudioFormat); public static ChatMessageContentPart CreateRefusalPart(string refusal); public static ChatMessageContentPart CreateTextPart(string text); - public static explicit operator ChatMessageContentPart(ClientResult result); - public static implicit operator BinaryContent(ChatMessageContentPart chatMessageContentPart); + protected virtual ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public static implicit operator ChatMessageContentPart(string text); + protected virtual ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ChatMessageContentPartKind { Text = 0, @@ -1365,11 +1563,14 @@ public class ChatOutputAudio : IJsonModel, IPersistableModel { public ChatOutputAudioFormat(string value); + public static ChatOutputAudioFormat Aac { get; } public static ChatOutputAudioFormat Flac { get; } public static ChatOutputAudioFormat Mp3 { get; } public static ChatOutputAudioFormat Opus { get; } @@ -1388,8 +1589,10 @@ public class ChatOutputAudio : IJsonModel, IPersistableModel, IPersistableModel { public ChatOutputAudioReference(string id); public string Id { get; } - public static explicit operator ChatOutputAudioReference(ClientResult result); - public static implicit operator BinaryContent(ChatOutputAudioReference chatOutputAudioReference); + protected virtual ChatOutputAudioReference JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatOutputAudioReference PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ChatOutputAudioVoice : IEquatable { public ChatOutputAudioVoice(string value); @@ -1398,6 +1601,9 @@ public class ChatOutputAudioReference : IJsonModel, IP public static ChatOutputAudioVoice Ballad { get; } public static ChatOutputAudioVoice Coral { get; } public static ChatOutputAudioVoice Echo { get; } + public static ChatOutputAudioVoice Fable { get; } + public static ChatOutputAudioVoice Nova { get; } + public static ChatOutputAudioVoice Onyx { get; } public static ChatOutputAudioVoice Sage { get; } public static ChatOutputAudioVoice Shimmer { get; } public static ChatOutputAudioVoice Verse { get; } @@ -1414,16 +1620,20 @@ public class ChatOutputAudioReference : IJsonModel, IP public class ChatOutputPrediction : IJsonModel, IPersistableModel { public static ChatOutputPrediction CreateStaticContentPrediction(IEnumerable staticContentParts); public static ChatOutputPrediction CreateStaticContentPrediction(string staticContent); - public static explicit operator ChatOutputPrediction(ClientResult result); - public static implicit operator BinaryContent(ChatOutputPrediction chatOutputPrediction); + protected virtual ChatOutputPrediction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatOutputPrediction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatOutputTokenUsageDetails : IJsonModel, IPersistableModel { public int AcceptedPredictionTokenCount { get; } public int AudioTokenCount { get; } public int ReasoningTokenCount { get; } public int RejectedPredictionTokenCount { get; } - public static explicit operator ChatOutputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ChatOutputTokenUsageDetails chatOutputTokenUsageDetails); + protected virtual ChatOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ChatReasoningEffortLevel : IEquatable { public ChatReasoningEffortLevel(string value); @@ -1444,8 +1654,10 @@ public class ChatResponseFormat : IJsonModel, IPersistableMo public static ChatResponseFormat CreateJsonObjectFormat(); public static ChatResponseFormat CreateJsonSchemaFormat(string jsonSchemaFormatName, BinaryData jsonSchema, string jsonSchemaFormatDescription = null, bool? jsonSchemaIsStrict = null); public static ChatResponseFormat CreateTextFormat(); - public static explicit operator ChatResponseFormat(ClientResult result); - public static implicit operator BinaryContent(ChatResponseFormat chatResponseFormat); + protected virtual ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Flags] public enum ChatResponseModalities { @@ -1458,15 +1670,19 @@ public class ChatTokenLogProbabilityDetails : IJsonModel TopLogProbabilities { get; } public ReadOnlyMemory? Utf8Bytes { get; } - public static explicit operator ChatTokenLogProbabilityDetails(ClientResult result); - public static implicit operator BinaryContent(ChatTokenLogProbabilityDetails chatTokenLogProbabilityDetails); + protected virtual ChatTokenLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatTokenLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatTokenTopLogProbabilityDetails : IJsonModel, IPersistableModel { public float LogProbability { get; } public string Token { get; } public ReadOnlyMemory? Utf8Bytes { get; } - public static explicit operator ChatTokenTopLogProbabilityDetails(ClientResult result); - public static implicit operator BinaryContent(ChatTokenTopLogProbabilityDetails chatTokenTopLogProbabilityDetails); + protected virtual ChatTokenTopLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatTokenTopLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatTokenUsage : IJsonModel, IPersistableModel { public int InputTokenCount { get; } @@ -1474,8 +1690,10 @@ public class ChatTokenUsage : IJsonModel, IPersistableModel, IPersistableModel { public string FunctionDescription { get; } @@ -1484,8 +1702,10 @@ public class ChatTool : IJsonModel, IPersistableModel { public bool? FunctionSchemaIsStrict { get; } public ChatToolKind Kind { get; } public static ChatTool CreateFunctionTool(string functionName, string functionDescription = null, BinaryData functionParameters = null, bool? functionSchemaIsStrict = null); - public static explicit operator ChatTool(ClientResult result); - public static implicit operator BinaryContent(ChatTool chatTool); + protected virtual ChatTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ChatToolCall : IJsonModel, IPersistableModel { public BinaryData FunctionArguments { get; } @@ -1493,8 +1713,10 @@ public class ChatToolCall : IJsonModel, IPersistableModel, IPersistableModel, IPersistableModel { - public static explicit operator ChatWebSearchOptions(ClientResult result); - public static implicit operator BinaryContent(ChatWebSearchOptions chatWebSearchOptions); + protected virtual ChatWebSearchOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ChatWebSearchOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class DeveloperChatMessage : ChatMessage, IJsonModel, IPersistableModel { public DeveloperChatMessage(params ChatMessageContentPart[] contentParts); public DeveloperChatMessage(IEnumerable contentParts); public DeveloperChatMessage(string content); public string ParticipantName { get; set; } - public new static explicit operator DeveloperChatMessage(ClientResult result); - public static implicit operator BinaryContent(DeveloperChatMessage developerChatMessage); + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Obsolete("This class is obsolete. Please use ToolChatMessage instead.")] public class FunctionChatMessage : ChatMessage, IJsonModel, IPersistableModel { public FunctionChatMessage(string functionName, string content); public string FunctionName { get; } - public new static explicit operator FunctionChatMessage(ClientResult result); - public static implicit operator BinaryContent(FunctionChatMessage functionChatMessage); + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIChatModelFactory { public static ChatCompletion ChatCompletion(string id = null, ChatFinishReason finishReason = ChatFinishReason.Stop, ChatMessageContent content = null, string refusal = null, IEnumerable toolCalls = null, ChatMessageRole role = ChatMessageRole.System, ChatFunctionCall functionCall = null, IEnumerable contentTokenLogProbabilities = null, IEnumerable refusalTokenLogProbabilities = null, DateTimeOffset createdAt = default, string model = null, string systemFingerprint = null, ChatTokenUsage usage = null, ChatOutputAudio outputAudio = null, IEnumerable messageAnnotations = null); @@ -1570,23 +1800,29 @@ public class StreamingChatCompletionUpdate : IJsonModel ToolCallUpdates { get; } public ChatTokenUsage Usage { get; } - public static explicit operator StreamingChatCompletionUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingChatCompletionUpdate streamingChatCompletionUpdate); + protected virtual StreamingChatCompletionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual StreamingChatCompletionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } [Obsolete("This class is obsolete. Please use StreamingChatToolCallUpdate instead.")] public class StreamingChatFunctionCallUpdate : IJsonModel, IPersistableModel { public BinaryData FunctionArgumentsUpdate { get; } public string FunctionName { get; } - public static explicit operator StreamingChatFunctionCallUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingChatFunctionCallUpdate streamingChatFunctionCallUpdate); + protected virtual StreamingChatFunctionCallUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual StreamingChatFunctionCallUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingChatOutputAudioUpdate : IJsonModel, IPersistableModel { public BinaryData AudioBytesUpdate { get; } public DateTimeOffset? ExpiresAt { get; } public string Id { get; } public string TranscriptUpdate { get; } - public static explicit operator StreamingChatOutputAudioUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingChatOutputAudioUpdate streamingChatOutputAudioUpdate); + protected virtual StreamingChatOutputAudioUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual StreamingChatOutputAudioUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingChatToolCallUpdate : IJsonModel, IPersistableModel { public BinaryData FunctionArgumentsUpdate { get; } @@ -1594,32 +1830,40 @@ public class StreamingChatToolCallUpdate : IJsonModel, IPersistableModel { public SystemChatMessage(params ChatMessageContentPart[] contentParts); public SystemChatMessage(IEnumerable contentParts); public SystemChatMessage(string content); public string ParticipantName { get; set; } - public new static explicit operator SystemChatMessage(ClientResult result); - public static implicit operator BinaryContent(SystemChatMessage systemChatMessage); + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ToolChatMessage : ChatMessage, IJsonModel, IPersistableModel { public ToolChatMessage(string toolCallId, params ChatMessageContentPart[] contentParts); public ToolChatMessage(string toolCallId, IEnumerable contentParts); public ToolChatMessage(string toolCallId, string content); public string ToolCallId { get; } - public new static explicit operator ToolChatMessage(ClientResult result); - public static implicit operator BinaryContent(ToolChatMessage toolChatMessage); + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class UserChatMessage : ChatMessage, IJsonModel, IPersistableModel { public UserChatMessage(params ChatMessageContentPart[] contentParts); public UserChatMessage(IEnumerable contentParts); public UserChatMessage(string content); public string ParticipantName { get; set; } - public new static explicit operator UserChatMessage(ClientResult result); - public static implicit operator BinaryContent(UserChatMessage userChatMessage); + protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } } namespace OpenAI.Embeddings { @@ -1644,26 +1888,34 @@ public class EmbeddingClient { public class EmbeddingGenerationOptions : IJsonModel, IPersistableModel { public int? Dimensions { get; set; } public string EndUserId { get; set; } - public static explicit operator EmbeddingGenerationOptions(ClientResult result); - public static implicit operator BinaryContent(EmbeddingGenerationOptions embeddingGenerationOptions); + protected virtual EmbeddingGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual EmbeddingGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class EmbeddingTokenUsage : IJsonModel, IPersistableModel { public int InputTokenCount { get; } public int TotalTokenCount { get; } - public static explicit operator EmbeddingTokenUsage(ClientResult result); - public static implicit operator BinaryContent(EmbeddingTokenUsage embeddingTokenUsage); + protected virtual EmbeddingTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual EmbeddingTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIEmbedding : IJsonModel, IPersistableModel { public int Index { get; } - public static explicit operator OpenAIEmbedding(ClientResult result); - public static implicit operator BinaryContent(OpenAIEmbedding openAIEmbedding); + protected virtual OpenAIEmbedding JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual OpenAIEmbedding PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); public ReadOnlyMemory ToFloats(); } public class OpenAIEmbeddingCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { public string Model { get; } public EmbeddingTokenUsage Usage { get; } - public static explicit operator OpenAIEmbeddingCollection(ClientResult result); - public static implicit operator BinaryContent(OpenAIEmbeddingCollection openAIEmbeddingCollection); + protected virtual OpenAIEmbeddingCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual OpenAIEmbeddingCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIEmbeddingsModelFactory { public static EmbeddingTokenUsage EmbeddingTokenUsage(int inputTokenCount = 0, int totalTokenCount = 0); @@ -1671,12 +1923,48 @@ public static class OpenAIEmbeddingsModelFactory { public static OpenAIEmbeddingCollection OpenAIEmbeddingCollection(IEnumerable items = null, string model = null, EmbeddingTokenUsage usage = null); } } +namespace OpenAI.Evals { + public class EvaluationClient { + protected EvaluationClient(); + public EvaluationClient(ApiKeyCredential credential, OpenAIClientOptions options); + public EvaluationClient(ApiKeyCredential credential); + protected internal EvaluationClient(ClientPipeline pipeline, OpenAIClientOptions options); + public EvaluationClient(string apiKey); + public ClientPipeline Pipeline { get; } + public virtual ClientResult CancelEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual Task CancelEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual ClientResult CreateEvaluation(BinaryContent content, RequestOptions options = null); + public virtual Task CreateEvaluationAsync(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateEvaluationRun(string evaluationId, BinaryContent content, RequestOptions options = null); + public virtual Task CreateEvaluationRunAsync(string evaluationId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult DeleteEvaluation(string evaluationId, RequestOptions options); + public virtual Task DeleteEvaluationAsync(string evaluationId, RequestOptions options); + public virtual ClientResult DeleteEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual Task DeleteEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual ClientResult GetEvaluation(string evaluationId, RequestOptions options); + public virtual Task GetEvaluationAsync(string evaluationId, RequestOptions options); + public virtual ClientResult GetEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual Task GetEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options); + public virtual ClientResult GetEvaluationRunOutputItem(string evaluationId, string evaluationRunId, string outputItemId, RequestOptions options); + public virtual Task GetEvaluationRunOutputItemAsync(string evaluationId, string evaluationRunId, string outputItemId, RequestOptions options); + public virtual ClientResult GetEvaluationRunOutputItems(string evaluationId, string evaluationRunId, int? limit, string order, string after, string outputItemStatus, RequestOptions options); + public virtual Task GetEvaluationRunOutputItemsAsync(string evaluationId, string evaluationRunId, int? limit, string order, string after, string outputItemStatus, RequestOptions options); + public virtual ClientResult GetEvaluationRuns(string evaluationId, int? limit, string order, string after, string evaluationRunStatus, RequestOptions options); + public virtual Task GetEvaluationRunsAsync(string evaluationId, int? limit, string order, string after, string evaluationRunStatus, RequestOptions options); + public virtual ClientResult GetEvaluations(int? limit, string orderBy, string order, string after, RequestOptions options); + public virtual Task GetEvaluationsAsync(int? limit, string orderBy, string order, string after, RequestOptions options); + public virtual ClientResult UpdateEvaluation(string evaluationId, BinaryContent content, RequestOptions options = null); + public virtual Task UpdateEvaluationAsync(string evaluationId, BinaryContent content, RequestOptions options = null); + } +} namespace OpenAI.Files { public class FileDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string FileId { get; } - public static explicit operator FileDeletionResult(ClientResult result); - public static implicit operator BinaryContent(FileDeletionResult fileDeletionResult); + protected virtual FileDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FileDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum FilePurpose { Assistants = 0, @@ -1719,13 +2007,17 @@ public class OpenAIFile : IJsonModel, IPersistableModel public string Filename { get; } public string Id { get; } public FilePurpose Purpose { get; } + [EditorBrowsable(EditorBrowsableState.Never)] public int? SizeInBytes { get; } + public long? SizeInBytesLong { get; } [Obsolete("This property is obsolete. If this is a fine-tuning training file, it may take some time to process after it has been uploaded. While the file is processing, you can still create a fine-tuning job but it will not start until the file processing has completed.")] public FileStatus Status { get; } [Obsolete("This property is obsolete. For details on why a fine-tuning training file failed validation, see the `error` field on the fine-tuning job.")] public string StatusDetails { get; } - public static explicit operator OpenAIFile(ClientResult result); - public static implicit operator BinaryContent(OpenAIFile openAIFile); + protected virtual OpenAIFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual OpenAIFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIFileClient { protected OpenAIFileClient(); @@ -1780,49 +2072,322 @@ public class OpenAIFileClient { public virtual Task> UploadFileAsync(string filePath, FileUploadPurpose purpose); } public class OpenAIFileCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { - public static explicit operator OpenAIFileCollection(ClientResult result); - public static implicit operator BinaryContent(OpenAIFileCollection openAIFileCollection); + protected virtual OpenAIFileCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual OpenAIFileCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIFilesModelFactory { public static FileDeletionResult FileDeletionResult(string fileId = null, bool deleted = false); public static OpenAIFileCollection OpenAIFileCollection(IEnumerable items = null); - public static OpenAIFile OpenAIFileInfo(string id = null, int? sizeInBytes = null, DateTimeOffset createdAt = default, string filename = null, FilePurpose purpose = FilePurpose.Assistants, FileStatus status = FileStatus.Uploaded, string statusDetails = null, DateTimeOffset? expiresAt = null); + public static OpenAIFile OpenAIFileInfo(string id = null, int? sizeInBytes = null, DateTimeOffset createdAt = default, string filename = null, FilePurpose purpose = FilePurpose.Assistants, FileStatus status = FileStatus.Uploaded, string statusDetails = null, DateTimeOffset? expiresAt = null, long? sizeInBytesLong = null); [EditorBrowsable(EditorBrowsableState.Never)] public static OpenAIFile OpenAIFileInfo(string id, int? sizeInBytes, DateTimeOffset createdAt, string filename, FilePurpose purpose, FileStatus status, string statusDetails); } } namespace OpenAI.FineTuning { + public class FineTuningCheckpoint : IJsonModel, IPersistableModel { + public DateTimeOffset CreatedAt { get; } + public string Id { get; } + public string JobId { get; } + public FineTuningCheckpointMetrics Metrics { get; } + public string ModelId { get; } + public int StepNumber { get; } + protected virtual FineTuningCheckpoint JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FineTuningCheckpoint PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + public override string ToString(); + } + public class FineTuningCheckpointMetrics : IJsonModel, IPersistableModel { + public float? FullValidLoss { get; } + public float? FullValidMeanTokenAccuracy { get; } + public int StepNumber { get; } + public float? TrainLoss { get; } + public float? TrainMeanTokenAccuracy { get; } + public float? ValidLoss { get; } + public float? ValidMeanTokenAccuracy { get; } + protected virtual FineTuningCheckpointMetrics JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FineTuningCheckpointMetrics PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class FineTuningClient { protected FineTuningClient(); public FineTuningClient(ApiKeyCredential credential, OpenAIClientOptions options); public FineTuningClient(ApiKeyCredential credential); protected internal FineTuningClient(ClientPipeline pipeline, OpenAIClientOptions options); + protected internal FineTuningClient(ClientPipeline pipeline, Uri endpoint); public FineTuningClient(string apiKey); public ClientPipeline Pipeline { get; } - public virtual FineTuningJobOperation CreateFineTuningJob(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); - public virtual Task CreateFineTuningJobAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); - public virtual ClientResult GetJob(string fineTuningJobId, RequestOptions options); - public virtual Task GetJobAsync(string fineTuningJobId, RequestOptions options); - public virtual CollectionResult GetJobs(string after, int? limit, RequestOptions options); - public virtual AsyncCollectionResult GetJobsAsync(string after, int? limit, RequestOptions options); - } - public class FineTuningJobOperation : OperationResult { + public virtual ClientResult CreateFineTuningCheckpointPermission(string fineTunedModelCheckpoint, BinaryContent content, RequestOptions options = null); + public virtual Task CreateFineTuningCheckpointPermissionAsync(string fineTunedModelCheckpoint, BinaryContent content, RequestOptions options = null); + public virtual ClientResult DeleteFineTuningCheckpointPermission(string fineTunedModelCheckpoint, string permissionId, RequestOptions options); + public virtual Task DeleteFineTuningCheckpointPermissionAsync(string fineTunedModelCheckpoint, string permissionId, RequestOptions options); + public virtual FineTuningJob FineTune(BinaryContent content, bool waitUntilCompleted, RequestOptions options); + public virtual FineTuningJob FineTune(string baseModel, string trainingFileId, bool waitUntilCompleted, FineTuningOptions options = null, CancellationToken cancellationToken = default); + public virtual Task FineTuneAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options); + public virtual Task FineTuneAsync(string baseModel, string trainingFileId, bool waitUntilCompleted, FineTuningOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult GetFineTuningCheckpointPermissions(string fineTunedModelCheckpoint, string after, int? limit, string order, string projectId, RequestOptions options); + public virtual Task GetFineTuningCheckpointPermissionsAsync(string fineTunedModelCheckpoint, string after, int? limit, string order, string projectId, RequestOptions options); + public virtual FineTuningJob GetJob(string jobId, CancellationToken cancellationToken = default); + public virtual Task GetJobAsync(string jobId, CancellationToken cancellationToken = default); + public virtual CollectionResult GetJobs(FineTuningJobCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetJobsAsync(FineTuningJobCollectionOptions options = null, CancellationToken cancellationToken = default); + public virtual ClientResult PauseFineTuningJob(string fineTuningJobId, RequestOptions options); + public virtual Task PauseFineTuningJobAsync(string fineTuningJobId, RequestOptions options); + public virtual ClientResult ResumeFineTuningJob(string fineTuningJobId, RequestOptions options); + public virtual Task ResumeFineTuningJobAsync(string fineTuningJobId, RequestOptions options); + } + public class FineTuningError : IJsonModel, IPersistableModel { + public string Code { get; } + public string InvalidParameter { get; } + public string Message { get; } + protected virtual FineTuningError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FineTuningError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class FineTuningEvent : IJsonModel, IPersistableModel { + public string Level; + public DateTimeOffset CreatedAt { get; } + public BinaryData Data { get; } + public string Id { get; } + public FineTuningJobEventKind? Kind { get; } + public string Message { get; } + protected virtual FineTuningEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FineTuningEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public readonly partial struct FineTuningHyperparameters : IJsonModel, IPersistableModel, IJsonModel, IPersistableModel { + public int BatchSize { get; } + public int EpochCount { get; } + public float LearningRateMultiplier { get; } + } + public class FineTuningIntegration : IJsonModel, IPersistableModel { + protected virtual FineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class FineTuningJob : OperationResult { + public string? Value; + public string BaseModel { get; } + public int BillableTrainedTokenCount { get; } + public DateTimeOffset? EstimatedFinishAt { get; } + [Obsolete("This property is deprecated. Use the MethodHyperparameters property instead.")] + public FineTuningHyperparameters Hyperparameters { get; } + public IReadOnlyList Integrations { get; } public string JobId { get; } + public IDictionary Metadata { get; } + public MethodHyperparameters? MethodHyperparameters { get; } public override ContinuationToken? RehydrationToken { get; protected set; } - public virtual ClientResult Cancel(RequestOptions? options); - public virtual Task CancelAsync(RequestOptions? options); - public virtual ClientResult GetJob(RequestOptions? options); - public virtual Task GetJobAsync(RequestOptions? options); - public virtual CollectionResult GetJobCheckpoints(string? after, int? limit, RequestOptions? options); - public virtual AsyncCollectionResult GetJobCheckpointsAsync(string? after, int? limit, RequestOptions? options); - public virtual CollectionResult GetJobEvents(string? after, int? limit, RequestOptions options); - public virtual AsyncCollectionResult GetJobEventsAsync(string? after, int? limit, RequestOptions options); - public static FineTuningJobOperation Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); - public static FineTuningJobOperation Rehydrate(FineTuningClient client, string fineTuningJobId, CancellationToken cancellationToken = default); - public static Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); - public static Task RehydrateAsync(FineTuningClient client, string fineTuningJobId, CancellationToken cancellationToken = default); - public override ClientResult UpdateStatus(RequestOptions? options = null); - public override ValueTask UpdateStatusAsync(RequestOptions? options = null); + public IReadOnlyList ResultFileIds { get; } + public int? Seed { get; } + public FineTuningStatus Status { get; } + public string TrainingFileId { get; } + public FineTuningTrainingMethod? TrainingMethod { get; } + public string? UserProvidedSuffix { get; } + public string ValidationFileId { get; } + public virtual ClientResult Cancel(RequestOptions options); + public virtual ClientResult CancelAndUpdate(CancellationToken cancellationToken = default); + public virtual Task CancelAndUpdateAsync(CancellationToken cancellationToken = default); + public virtual Task CancelAsync(RequestOptions options); + public virtual CollectionResult GetCheckpoints(GetCheckpointsOptions? options = null, CancellationToken cancellationToken = default); + public virtual CollectionResult GetCheckpoints(string? after, int? limit, RequestOptions? options); + public virtual AsyncCollectionResult GetCheckpointsAsync(GetCheckpointsOptions? options = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetCheckpointsAsync(string? after, int? limit, RequestOptions? options); + public virtual CollectionResult GetEvents(GetEventsOptions options, CancellationToken cancellationToken = default); + public virtual CollectionResult GetEvents(string? after, int? limit, RequestOptions options); + public virtual AsyncCollectionResult GetEventsAsync(GetEventsOptions options, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetEventsAsync(string? after, int? limit, RequestOptions options); + public static FineTuningJob Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, RequestOptions options); + public static FineTuningJob Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static FineTuningJob Rehydrate(FineTuningClient client, string JobId, RequestOptions options); + public static FineTuningJob Rehydrate(FineTuningClient client, string JobId, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, RequestOptions options); + public static Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default); + public static Task RehydrateAsync(FineTuningClient client, string JobId, RequestOptions options); + public static Task RehydrateAsync(FineTuningClient client, string JobId, CancellationToken cancellationToken = default); + public override ClientResult UpdateStatus(RequestOptions? options); + public ClientResult UpdateStatus(CancellationToken cancellationToken = default); + public override ValueTask UpdateStatusAsync(RequestOptions? options); + public ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default); + public override void WaitForCompletion(CancellationToken cancellationToken = default); + public override ValueTask WaitForCompletionAsync(CancellationToken cancellationToken = default); + } + public class FineTuningJobCollectionOptions { + public string AfterJobId { get; set; } + public int? PageSize { get; set; } + } + public readonly partial struct FineTuningJobEventKind : IEquatable { + public FineTuningJobEventKind(string value); + public static FineTuningJobEventKind Message { get; } + public static FineTuningJobEventKind Metrics { get; } + public readonly bool Equals(FineTuningJobEventKind other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(FineTuningJobEventKind left, FineTuningJobEventKind right); + public static implicit operator FineTuningJobEventKind(string value); + public static bool operator !=(FineTuningJobEventKind left, FineTuningJobEventKind right); + public override readonly string ToString(); + } + public class FineTuningOptions : IJsonModel, IPersistableModel { + public IList Integrations { get; } + public IDictionary Metadata { get; } + public int? Seed { get; set; } + public string Suffix { get; set; } + public FineTuningTrainingMethod TrainingMethod { get; set; } + public string ValidationFile { get; set; } + protected virtual FineTuningOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FineTuningOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public readonly partial struct FineTuningStatus : IEquatable, IEquatable { + public FineTuningStatus(string value); + public static FineTuningStatus Cancelled { get; } + public static FineTuningStatus Failed { get; } + public bool InProgress { get; } + public static FineTuningStatus Queued { get; } + public static FineTuningStatus Running { get; } + public static FineTuningStatus Succeeded { get; } + public static FineTuningStatus ValidatingFiles { get; } + public readonly bool Equals(FineTuningStatus other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + public readonly bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(FineTuningStatus left, FineTuningStatus right); + public static implicit operator FineTuningStatus(string value); + public static bool operator !=(FineTuningStatus left, FineTuningStatus right); + public override readonly string ToString(); + } + public class FineTuningTrainingMethod : IJsonModel, IPersistableModel { + public static FineTuningTrainingMethod CreateDirectPreferenceOptimization(HyperparameterBatchSize batchSize = null, HyperparameterEpochCount epochCount = null, HyperparameterLearningRate learningRate = null, HyperparameterBetaFactor betaFactor = null); + public static FineTuningTrainingMethod CreateSupervised(HyperparameterBatchSize batchSize = null, HyperparameterEpochCount epochCount = null, HyperparameterLearningRate learningRate = null); + protected virtual FineTuningTrainingMethod JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FineTuningTrainingMethod PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class GetCheckpointsOptions { + public string AfterCheckpointId { get; set; } + public int? PageSize { get; set; } + } + public class GetEventsOptions { + public string AfterEventId { get; set; } + public int? PageSize { get; set; } + } + public class HyperparameterBatchSize : IEquatable, IEquatable, IJsonModel, IPersistableModel { + public HyperparameterBatchSize(int batchSize); + public static HyperparameterBatchSize CreateAuto(); + public static HyperparameterBatchSize CreateSize(int batchSize); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterBatchSize first, HyperparameterBatchSize second); + public static implicit operator HyperparameterBatchSize(int batchSize); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterBatchSize first, HyperparameterBatchSize second); + } + public class HyperparameterBetaFactor : IEquatable, IEquatable, IJsonModel, IPersistableModel { + public HyperparameterBetaFactor(int beta); + public static HyperparameterBetaFactor CreateAuto(); + public static HyperparameterBetaFactor CreateBeta(int beta); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterBetaFactor first, HyperparameterBetaFactor second); + public static implicit operator HyperparameterBetaFactor(int beta); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterBetaFactor first, HyperparameterBetaFactor second); + } + public class HyperparameterEpochCount : IEquatable, IEquatable, IJsonModel, IPersistableModel { + public HyperparameterEpochCount(int epochCount); + public static HyperparameterEpochCount CreateAuto(); + public static HyperparameterEpochCount CreateEpochCount(int epochCount); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterEpochCount first, HyperparameterEpochCount second); + public static implicit operator HyperparameterEpochCount(int epochCount); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterEpochCount first, HyperparameterEpochCount second); + } + public class HyperparameterLearningRate : IEquatable, IEquatable, IEquatable, IJsonModel, IPersistableModel { + public HyperparameterLearningRate(double learningRateMultiplier); + public static HyperparameterLearningRate CreateAuto(); + public static HyperparameterLearningRate CreateMultiplier(double learningRateMultiplier); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(double other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode(); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterLearningRate first, HyperparameterLearningRate second); + public static implicit operator HyperparameterLearningRate(double learningRateMultiplier); + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterLearningRate first, HyperparameterLearningRate second); + } + public class HyperparametersForDPO : MethodHyperparameters, IJsonModel, IPersistableModel { + public int BatchSize { get; } + public float Beta { get; } + public int EpochCount { get; } + public float LearningRateMultiplier { get; } + protected virtual HyperparametersForDPO JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual HyperparametersForDPO PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class HyperparametersForSupervised : MethodHyperparameters, IJsonModel, IPersistableModel { + public int BatchSize { get; } + public int EpochCount { get; } + public float LearningRateMultiplier { get; } + protected virtual HyperparametersForSupervised JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual HyperparametersForSupervised PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class MethodHyperparameters { + } + public class WeightsAndBiasesIntegration : FineTuningIntegration, IJsonModel, IPersistableModel { + public WeightsAndBiasesIntegration(string projectName); + public string DisplayName { get; set; } + public string EntityName { get; set; } + public string ProjectName { get; set; } + public IList Tags { get; } + protected override FineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override FineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } } namespace OpenAI.Images { @@ -1830,13 +2395,48 @@ public class GeneratedImage : IJsonModel, IPersistableModel { + public GeneratedImageBackground(string value); + public static GeneratedImageBackground Auto { get; } + public static GeneratedImageBackground Opaque { get; } + public static GeneratedImageBackground Transparent { get; } + public readonly bool Equals(GeneratedImageBackground other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageBackground left, GeneratedImageBackground right); + public static implicit operator GeneratedImageBackground(string value); + public static bool operator !=(GeneratedImageBackground left, GeneratedImageBackground right); + public override readonly string ToString(); } public class GeneratedImageCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } - public static explicit operator GeneratedImageCollection(ClientResult result); - public static implicit operator BinaryContent(GeneratedImageCollection generatedImageCollection); + public ImageTokenUsage Usage { get; } + protected virtual GeneratedImageCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual GeneratedImageCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public readonly partial struct GeneratedImageFileFormat : IEquatable { + public GeneratedImageFileFormat(string value); + public static GeneratedImageFileFormat Jpeg { get; } + public static GeneratedImageFileFormat Png { get; } + public static GeneratedImageFileFormat Webp { get; } + public readonly bool Equals(GeneratedImageFileFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageFileFormat left, GeneratedImageFileFormat right); + public static implicit operator GeneratedImageFileFormat(string value); + public static bool operator !=(GeneratedImageFileFormat left, GeneratedImageFileFormat right); + public override readonly string ToString(); } public readonly partial struct GeneratedImageFormat : IEquatable { public GeneratedImageFormat(string value); @@ -1852,9 +2452,26 @@ public class GeneratedImageCollection : ObjectModel.ReadOnlyCollection { + public GeneratedImageModerationLevel(string value); + public static GeneratedImageModerationLevel Auto { get; } + public static GeneratedImageModerationLevel Low { get; } + public readonly bool Equals(GeneratedImageModerationLevel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(GeneratedImageModerationLevel left, GeneratedImageModerationLevel right); + public static implicit operator GeneratedImageModerationLevel(string value); + public static bool operator !=(GeneratedImageModerationLevel left, GeneratedImageModerationLevel right); + public override readonly string ToString(); + } public readonly partial struct GeneratedImageQuality : IEquatable { public GeneratedImageQuality(string value); + public static GeneratedImageQuality Auto { get; } public static GeneratedImageQuality High { get; } + public static GeneratedImageQuality Low { get; } + public static GeneratedImageQuality Medium { get; } public static GeneratedImageQuality Standard { get; } public readonly bool Equals(GeneratedImageQuality other); [EditorBrowsable(EditorBrowsableState.Never)] @@ -1868,11 +2485,14 @@ public class GeneratedImageCollection : ObjectModel.ReadOnlyCollection { public static readonly GeneratedImageSize W1024xH1024; + public static readonly GeneratedImageSize W1024xH1536; public static readonly GeneratedImageSize W1024xH1792; + public static readonly GeneratedImageSize W1536xH1024; public static readonly GeneratedImageSize W1792xH1024; public static readonly GeneratedImageSize W256xH256; public static readonly GeneratedImageSize W512xH512; public GeneratedImageSize(int width, int height); + public static GeneratedImageSize Auto { get; } public readonly bool Equals(GeneratedImageSize other); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly bool Equals(object obj); @@ -1948,43 +2568,77 @@ public class ImageEditOptions : IJsonModel, IPersistableModel< public string EndUserId { get; set; } public GeneratedImageFormat? ResponseFormat { get; set; } public GeneratedImageSize? Size { get; set; } - public static explicit operator ImageEditOptions(ClientResult result); - public static implicit operator BinaryContent(ImageEditOptions imageEditOptions); + protected virtual ImageEditOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ImageEditOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ImageGenerationOptions : IJsonModel, IPersistableModel { + public GeneratedImageBackground? Background { get; set; } public string EndUserId { get; set; } + public GeneratedImageModerationLevel? ModerationLevel { get; set; } + public int? OutputCompressionFactor { get; set; } + public GeneratedImageFileFormat? OutputFileFormat { get; set; } public GeneratedImageQuality? Quality { get; set; } public GeneratedImageFormat? ResponseFormat { get; set; } public GeneratedImageSize? Size { get; set; } public GeneratedImageStyle? Style { get; set; } - public static explicit operator ImageGenerationOptions(ClientResult result); - public static implicit operator BinaryContent(ImageGenerationOptions imageGenerationOptions); + protected virtual ImageGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ImageGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ImageInputTokenUsageDetails : IJsonModel, IPersistableModel { + public int ImageTokenCount { get; } + public int TextTokenCount { get; } + protected virtual ImageInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ImageInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ImageTokenUsage : IJsonModel, IPersistableModel { + public int InputTokenCount { get; } + public ImageInputTokenUsageDetails InputTokenDetails { get; } + public int OutputTokenCount { get; } + public int TotalTokenCount { get; } + protected virtual ImageTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ImageTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ImageVariationOptions : IJsonModel, IPersistableModel { public string EndUserId { get; set; } public GeneratedImageFormat? ResponseFormat { get; set; } public GeneratedImageSize? Size { get; set; } - public static explicit operator ImageVariationOptions(ClientResult result); - public static implicit operator BinaryContent(ImageVariationOptions imageVariationOptions); + protected virtual ImageVariationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ImageVariationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIImagesModelFactory { public static GeneratedImage GeneratedImage(BinaryData imageBytes = null, Uri imageUri = null, string revisedPrompt = null); - public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt = default, IEnumerable items = null); + public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt = default, IEnumerable items = null, ImageTokenUsage usage = null); + [EditorBrowsable(EditorBrowsableState.Never)] + public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt, IEnumerable items); } } namespace OpenAI.Models { public class ModelDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string ModelId { get; } - public static explicit operator ModelDeletionResult(ClientResult result); - public static implicit operator BinaryContent(ModelDeletionResult modelDeletionResult); + protected virtual ModelDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ModelDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIModel : IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } public string Id { get; } public string OwnedBy { get; } - public static explicit operator OpenAIModel(ClientResult result); - public static implicit operator BinaryContent(OpenAIModel openAIModel); + protected virtual OpenAIModel JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual OpenAIModel PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIModelClient { protected OpenAIModelClient(); @@ -2013,8 +2667,10 @@ public class OpenAIModelClient { public virtual Task> GetModelsAsync(CancellationToken cancellationToken = default); } public class OpenAIModelCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { - public static explicit operator OpenAIModelCollection(ClientResult result); - public static implicit operator BinaryContent(OpenAIModelCollection openAIModelCollection); + protected virtual OpenAIModelCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual OpenAIModelCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIModelsModelFactory { public static ModelDeletionResult ModelDeletionResult(string modelId = null, bool deleted = false); @@ -2058,14 +2714,18 @@ public class ModerationResult : IJsonModel, IPersistableModel< public ModerationCategory SexualMinors { get; } public ModerationCategory Violence { get; } public ModerationCategory ViolenceGraphic { get; } - public static explicit operator ModerationResult(ClientResult result); - public static implicit operator BinaryContent(ModerationResult moderationResult); + protected virtual ModerationResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ModerationResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ModerationResultCollection : ObjectModel.ReadOnlyCollection, IJsonModel, IPersistableModel { public string Id { get; } public string Model { get; } - public static explicit operator ModerationResultCollection(ClientResult result); - public static implicit operator BinaryContent(ModerationResultCollection moderationResultCollection); + protected virtual ModerationResultCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ModerationResultCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public static class OpenAIModerationsModelFactory { public static ModerationCategory ModerationCategory(bool flagged = false, float score = 0); @@ -2075,28 +2735,7 @@ public static class OpenAIModerationsModelFactory { public static ModerationResultCollection ModerationResultCollection(string id = null, string model = null, IEnumerable items = null); } } -namespace OpenAI.RealtimeConversation { - public readonly partial struct ConversationAudioFormat : IEquatable { - public ConversationAudioFormat(string value); - public static ConversationAudioFormat G711Alaw { get; } - public static ConversationAudioFormat G711Ulaw { get; } - public static ConversationAudioFormat Pcm16 { get; } - public readonly bool Equals(ConversationAudioFormat other); - [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly bool Equals(object obj); - [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly int GetHashCode(); - public static bool operator ==(ConversationAudioFormat left, ConversationAudioFormat right); - public static implicit operator ConversationAudioFormat(string value); - public static bool operator !=(ConversationAudioFormat left, ConversationAudioFormat right); - public override readonly string ToString(); - } - [Flags] - public enum ConversationContentModalities { - Default = 0, - Text = 1, - Audio = 2 - } +namespace OpenAI.Realtime { public class ConversationContentPart : IJsonModel, IPersistableModel { public string AudioTranscript { get; } public string Text { get; } @@ -2104,9 +2743,11 @@ public class ConversationContentPart : IJsonModel, IPer public static ConversationContentPart CreateInputTextPart(string text); public static ConversationContentPart CreateOutputAudioTranscriptPart(string transcript = null); public static ConversationContentPart CreateOutputTextPart(string text); - public static explicit operator ConversationContentPart(ClientResult result); - public static implicit operator BinaryContent(ConversationContentPart conversationContentPart); + protected virtual ConversationContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); public static implicit operator ConversationContentPart(string text); + protected virtual ConversationContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ConversationContentPartKind : IEquatable { public ConversationContentPartKind(string value); @@ -2124,21 +2765,15 @@ public class ConversationContentPart : IJsonModel, IPer public static bool operator !=(ConversationContentPartKind left, ConversationContentPartKind right); public override readonly string ToString(); } - public class ConversationErrorUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string ErrorCode { get; } - public string ErrorEventId { get; } - public string Message { get; } - public string ParameterName { get; } - public new static explicit operator ConversationErrorUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationErrorUpdate conversationErrorUpdate); - } public class ConversationFunctionTool : ConversationTool, IJsonModel, IPersistableModel { public ConversationFunctionTool(string name); public string Description { get; set; } public string Name { get; set; } public BinaryData Parameters { get; set; } - public new static explicit operator ConversationFunctionTool(ClientResult result); - public static implicit operator BinaryContent(ConversationFunctionTool conversationFunctionTool); + protected override ConversationTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ConversationTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ConversationIncompleteReason : IEquatable { public ConversationIncompleteReason(string value); @@ -2156,87 +2791,14 @@ public class ConversationFunctionTool : ConversationTool, IJsonModel, IPersistableModel { - public new static explicit operator ConversationInputAudioClearedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputAudioClearedUpdate conversationInputAudioClearedUpdate); - } - public class ConversationInputAudioCommittedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string ItemId { get; } - public string PreviousItemId { get; } - public new static explicit operator ConversationInputAudioCommittedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputAudioCommittedUpdate conversationInputAudioCommittedUpdate); - } - public class ConversationInputSpeechFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public TimeSpan AudioEndTime { get; } - public string ItemId { get; } - public new static explicit operator ConversationInputSpeechFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputSpeechFinishedUpdate conversationInputSpeechFinishedUpdate); - } - public class ConversationInputSpeechStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public TimeSpan AudioStartTime { get; } - public string ItemId { get; } - public new static explicit operator ConversationInputSpeechStartedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputSpeechStartedUpdate conversationInputSpeechStartedUpdate); - } public class ConversationInputTokenUsageDetails : IJsonModel, IPersistableModel { public int AudioTokenCount { get; } public int CachedTokenCount { get; } public int TextTokenCount { get; } - public static explicit operator ConversationInputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ConversationInputTokenUsageDetails conversationInputTokenUsageDetails); - } - public class ConversationInputTranscriptionFailedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ErrorCode { get; } - public string ErrorMessage { get; } - public string ErrorParameterName { get; } - public string ItemId { get; } - public new static explicit operator ConversationInputTranscriptionFailedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputTranscriptionFailedUpdate conversationInputTranscriptionFailedUpdate); - } - public class ConversationInputTranscriptionFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ItemId { get; } - public string Transcript { get; } - public new static explicit operator ConversationInputTranscriptionFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationInputTranscriptionFinishedUpdate conversationInputTranscriptionFinishedUpdate); - } - public class ConversationInputTranscriptionOptions : IJsonModel, IPersistableModel { - public ConversationTranscriptionModel? Model { get; set; } - public static explicit operator ConversationInputTranscriptionOptions(ClientResult result); - public static implicit operator BinaryContent(ConversationInputTranscriptionOptions conversationInputTranscriptionOptions); - } - public class ConversationItem : IJsonModel, IPersistableModel { - public string FunctionArguments { get; } - public string FunctionCallId { get; } - public string FunctionName { get; } - public string Id { get; set; } - public IReadOnlyList MessageContentParts { get; } - public ConversationMessageRole? MessageRole { get; } - public static ConversationItem CreateAssistantMessage(IEnumerable contentItems); - public static ConversationItem CreateFunctionCall(string name, string callId, string arguments); - public static ConversationItem CreateFunctionCallOutput(string callId, string output); - public static ConversationItem CreateSystemMessage(IEnumerable contentItems); - public static ConversationItem CreateUserMessage(IEnumerable contentItems); - public static explicit operator ConversationItem(ClientResult result); - public static implicit operator BinaryContent(ConversationItem conversationItem); - } - public class ConversationItemCreatedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string FunctionCallArguments { get; } - public string FunctionCallId { get; } - public string FunctionCallOutput { get; } - public string FunctionName { get; } - public string ItemId { get; } - public IReadOnlyList MessageContentParts { get; } - public ConversationMessageRole? MessageRole { get; } - public string PreviousItemId { get; } - public new static explicit operator ConversationItemCreatedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemCreatedUpdate conversationItemCreatedUpdate); - } - public class ConversationItemDeletedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string ItemId { get; } - public new static explicit operator ConversationItemDeletedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemDeletedUpdate conversationItemDeletedUpdate); + protected virtual ConversationInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ConversationInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ConversationItemStatus : IEquatable { public ConversationItemStatus(string value); @@ -2253,86 +2815,6 @@ public class ConversationItemDeletedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ItemId { get; } - public int OutputIndex { get; } - public string ResponseId { get; } - public new static explicit operator ConversationItemStreamingAudioFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingAudioFinishedUpdate conversationItemStreamingAudioFinishedUpdate); - } - public class ConversationItemStreamingAudioTranscriptionFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ItemId { get; } - public int OutputIndex { get; } - public string ResponseId { get; } - public string Transcript { get; } - public new static explicit operator ConversationItemStreamingAudioTranscriptionFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingAudioTranscriptionFinishedUpdate conversationItemStreamingAudioTranscriptionFinishedUpdate); - } - public class ConversationItemStreamingFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string FunctionCallArguments { get; } - public string FunctionCallId { get; } - public string FunctionCallOutput { get; } - public string FunctionName { get; } - public string ItemId { get; } - public IReadOnlyList MessageContentParts { get; } - public ConversationMessageRole? MessageRole { get; } - public int OutputIndex { get; } - public string ResponseId { get; } - public new static explicit operator ConversationItemStreamingFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingFinishedUpdate conversationItemStreamingFinishedUpdate); - } - public class ConversationItemStreamingPartDeltaUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public BinaryData AudioBytes { get; } - public string AudioTranscript { get; } - public int ContentPartIndex { get; } - public string FunctionArguments { get; } - public string FunctionCallId { get; } - public string ItemId { get; } - public int ItemIndex { get; } - public string ResponseId { get; } - public string Text { get; } - } - public class ConversationItemStreamingPartFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string AudioTranscript { get; } - public int ContentPartIndex { get; } - public string FunctionArguments { get; } - public string FunctionCallId { get; } - public string ItemId { get; } - public int ItemIndex { get; } - public string ResponseId { get; } - public string Text { get; } - } - public class ConversationItemStreamingStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public string FunctionCallArguments { get; } - public string FunctionCallId { get; } - public string FunctionCallOutput { get; } - public string FunctionName { get; } - public string ItemId { get; } - public int ItemIndex { get; } - public IReadOnlyList MessageContentParts { get; } - public ConversationMessageRole? MessageRole { get; } - public string ResponseId { get; } - public new static explicit operator ConversationItemStreamingStartedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingStartedUpdate conversationItemStreamingStartedUpdate); - } - public class ConversationItemStreamingTextFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int ContentIndex { get; } - public string ItemId { get; } - public int OutputIndex { get; } - public string ResponseId { get; } - public string Text { get; } - public new static explicit operator ConversationItemStreamingTextFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemStreamingTextFinishedUpdate conversationItemStreamingTextFinishedUpdate); - } - public class ConversationItemTruncatedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public int AudioEndMs { get; } - public int ContentIndex { get; } - public string ItemId { get; } - public new static explicit operator ConversationItemTruncatedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationItemTruncatedUpdate conversationItemTruncatedUpdate); - } public class ConversationMaxTokensChoice : IJsonModel, IPersistableModel { public ConversationMaxTokensChoice(int numberValue); public int? NumericValue { get; } @@ -2359,105 +2841,93 @@ public class ConversationMaxTokensChoice : IJsonModel, IPersistableModel { public int AudioTokenCount { get; } public int TextTokenCount { get; } - public static explicit operator ConversationOutputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ConversationOutputTokenUsageDetails conversationOutputTokenUsageDetails); + protected virtual ConversationOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ConversationOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationRateLimitDetailsItem : IJsonModel, IPersistableModel { public int MaximumCount { get; } public string Name { get; } public int RemainingCount { get; } public TimeSpan TimeUntilReset { get; } - public static explicit operator ConversationRateLimitDetailsItem(ClientResult result); - public static implicit operator BinaryContent(ConversationRateLimitDetailsItem conversationRateLimitDetailsItem); - } - public class ConversationRateLimitsUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public IReadOnlyList AllDetails { get; } - public ConversationRateLimitDetailsItem RequestDetails { get; } - public ConversationRateLimitDetailsItem TokenDetails { get; } - public new static explicit operator ConversationRateLimitsUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationRateLimitsUpdate conversationRateLimitsUpdate); - } - public class ConversationResponseFinishedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public IReadOnlyList CreatedItems { get; } - public string ResponseId { get; } - public ConversationStatus? Status { get; } - public ConversationStatusDetails StatusDetails { get; } - public ConversationTokenUsage Usage { get; } - public new static explicit operator ConversationResponseFinishedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationResponseFinishedUpdate conversationResponseFinishedUpdate); + protected virtual ConversationRateLimitDetailsItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ConversationRateLimitDetailsItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationResponseOptions : IJsonModel, IPersistableModel { - public ConversationContentModalities ContentModalities { get; set; } + public ConversationVoice? Voice; + public RealtimeContentModalities ContentModalities { get; set; } public ResponseConversationSelection? ConversationSelection { get; set; } public string Instructions { get; set; } public ConversationMaxTokensChoice MaxOutputTokens { get; set; } public IDictionary Metadata { get; } - public ConversationAudioFormat? OutputAudioFormat { get; set; } - public IList OverrideItems { get; } + public RealtimeAudioFormat? OutputAudioFormat { get; set; } + public IList OverrideItems { get; } public float? Temperature { get; set; } public ConversationToolChoice ToolChoice { get; set; } public IList Tools { get; } - public ConversationVoice? Voice { get; set; } - public static explicit operator ConversationResponseOptions(ClientResult result); - public static implicit operator BinaryContent(ConversationResponseOptions conversationResponseOptions); - } - public class ConversationResponseStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public IReadOnlyList CreatedItems { get; } - public string ResponseId { get; } - public ConversationStatus Status { get; } - public ConversationStatusDetails StatusDetails { get; } - public ConversationTokenUsage Usage { get; } - public new static explicit operator ConversationResponseStartedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationResponseStartedUpdate conversationResponseStartedUpdate); - } - public class ConversationSessionConfiguredUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public ConversationContentModalities ContentModalities { get; } - public ConversationAudioFormat InputAudioFormat { get; } - public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; } + protected virtual ConversationResponseOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ConversationResponseOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ConversationSessionConfiguredUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public RealtimeContentModalities ContentModalities { get; } + public RealtimeAudioFormat InputAudioFormat { get; } + public InputTranscriptionOptions InputTranscriptionOptions { get; } public string Instructions { get; } public ConversationMaxTokensChoice MaxOutputTokens { get; } public string Model { get; } - public ConversationAudioFormat OutputAudioFormat { get; } + public RealtimeAudioFormat OutputAudioFormat { get; } public string SessionId { get; } public float Temperature { get; } public ConversationToolChoice ToolChoice { get; } public IReadOnlyList Tools { get; } - public ConversationTurnDetectionOptions TurnDetectionOptions { get; } + public TurnDetectionOptions TurnDetectionOptions { get; } public ConversationVoice Voice { get; } - public new static explicit operator ConversationSessionConfiguredUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationSessionConfiguredUpdate conversationSessionConfiguredUpdate); + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationSessionOptions : IJsonModel, IPersistableModel { - public ConversationContentModalities ContentModalities { get; set; } - public ConversationAudioFormat? InputAudioFormat { get; set; } - public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; set; } + public RealtimeContentModalities ContentModalities { get; set; } + public RealtimeAudioFormat? InputAudioFormat { get; set; } + public InputNoiseReductionOptions InputNoiseReductionOptions { get; set; } + public InputTranscriptionOptions InputTranscriptionOptions { get; set; } public string Instructions { get; set; } public ConversationMaxTokensChoice MaxOutputTokens { get; set; } - public ConversationAudioFormat? OutputAudioFormat { get; set; } + public RealtimeAudioFormat? OutputAudioFormat { get; set; } public float? Temperature { get; set; } public ConversationToolChoice ToolChoice { get; set; } public IList Tools { get; } - public ConversationTurnDetectionOptions TurnDetectionOptions { get; set; } + public TurnDetectionOptions TurnDetectionOptions { get; set; } public ConversationVoice? Voice { get; set; } - public static explicit operator ConversationSessionOptions(ClientResult result); - public static implicit operator BinaryContent(ConversationSessionOptions conversationSessionOptions); - } - public class ConversationSessionStartedUpdate : ConversationUpdate, IJsonModel, IPersistableModel { - public ConversationContentModalities ContentModalities { get; } - public ConversationAudioFormat InputAudioFormat { get; } - public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; } + protected virtual ConversationSessionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ConversationSessionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ConversationSessionStartedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public RealtimeContentModalities ContentModalities { get; } + public RealtimeAudioFormat InputAudioFormat { get; } + public InputTranscriptionOptions InputTranscriptionOptions { get; } public string Instructions { get; } public ConversationMaxTokensChoice MaxOutputTokens { get; } public string Model { get; } - public ConversationAudioFormat OutputAudioFormat { get; } + public RealtimeAudioFormat OutputAudioFormat { get; } public string SessionId { get; } public float Temperature { get; } public ConversationToolChoice ToolChoice { get; } public IReadOnlyList Tools { get; } - public ConversationTurnDetectionOptions TurnDetectionOptions { get; } + public TurnDetectionOptions TurnDetectionOptions { get; } public ConversationVoice Voice { get; } - public new static explicit operator ConversationSessionStartedUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationSessionStartedUpdate conversationSessionStartedUpdate); + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ConversationStatus : IEquatable { public ConversationStatus(string value); @@ -2480,8 +2950,10 @@ public class ConversationStatusDetails : IJsonModel, public string ErrorKind { get; } public ConversationIncompleteReason? IncompleteReason { get; } public ConversationStatus StatusKind { get; } - public static explicit operator ConversationStatusDetails(ClientResult result); - public static implicit operator BinaryContent(ConversationStatusDetails conversationStatusDetails); + protected virtual ConversationStatusDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ConversationStatusDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationTokenUsage : IJsonModel, IPersistableModel { public int InputTokenCount { get; } @@ -2489,14 +2961,18 @@ public class ConversationTokenUsage : IJsonModel, IPersi public int OutputTokenCount { get; } public ConversationOutputTokenUsageDetails OutputTokenDetails { get; } public int TotalTokenCount { get; } - public static explicit operator ConversationTokenUsage(ClientResult result); - public static implicit operator BinaryContent(ConversationTokenUsage conversationTokenUsage); + protected virtual ConversationTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ConversationTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } - public abstract class ConversationTool : IJsonModel, IPersistableModel { + public class ConversationTool : IJsonModel, IPersistableModel { public ConversationToolKind Kind { get; } public static ConversationTool CreateFunctionTool(string name, string description = null, BinaryData parameters = null); - public static explicit operator ConversationTool(ClientResult result); - public static implicit operator BinaryContent(ConversationTool conversationTool); + protected virtual ConversationTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ConversationTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ConversationToolChoice : IJsonModel, IPersistableModel { public string FunctionName { get; } @@ -2526,68 +3002,6 @@ public enum ConversationToolChoiceKind { public static bool operator !=(ConversationToolKind left, ConversationToolKind right); public override readonly string ToString(); } - public readonly partial struct ConversationTranscriptionModel : IEquatable { - public ConversationTranscriptionModel(string value); - public static ConversationTranscriptionModel Whisper1 { get; } - public readonly bool Equals(ConversationTranscriptionModel other); - [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly bool Equals(object obj); - [EditorBrowsable(EditorBrowsableState.Never)] - public override readonly int GetHashCode(); - public static bool operator ==(ConversationTranscriptionModel left, ConversationTranscriptionModel right); - public static implicit operator ConversationTranscriptionModel(string value); - public static bool operator !=(ConversationTranscriptionModel left, ConversationTranscriptionModel right); - public override readonly string ToString(); - } - public enum ConversationTurnDetectionKind { - ServerVoiceActivityDetection = 0, - Disabled = 1 - } - public class ConversationTurnDetectionOptions : IJsonModel, IPersistableModel { - public ConversationTurnDetectionKind Kind { get; protected internal set; } - public static ConversationTurnDetectionOptions CreateDisabledTurnDetectionOptions(); - public static ConversationTurnDetectionOptions CreateServerVoiceActivityTurnDetectionOptions(float? detectionThreshold = null, TimeSpan? prefixPaddingDuration = null, TimeSpan? silenceDuration = null, bool? enableAutomaticResponseCreation = null); - public static explicit operator ConversationTurnDetectionOptions(ClientResult result); - public static implicit operator BinaryContent(ConversationTurnDetectionOptions conversationTurnDetectionOptions); - } - public class ConversationUpdate : IJsonModel, IPersistableModel { - public string EventId { get; } - public ConversationUpdateKind Kind { get; protected internal set; } - public BinaryData GetRawContent(); - public static explicit operator ConversationUpdate(ClientResult result); - public static implicit operator BinaryContent(ConversationUpdate conversationUpdate); - } - public enum ConversationUpdateKind { - Unknown = 0, - SessionStarted = 1, - SessionConfigured = 2, - ItemCreated = 3, - ConversationCreated = 4, - ItemDeleted = 5, - ItemTruncated = 6, - ResponseStarted = 7, - ResponseFinished = 8, - RateLimitsUpdated = 9, - ItemStreamingStarted = 10, - ItemStreamingFinished = 11, - ItemContentPartStarted = 12, - ItemContentPartFinished = 13, - ItemStreamingPartAudioDelta = 14, - ItemStreamingPartAudioFinished = 15, - ItemStreamingPartAudioTranscriptionDelta = 16, - ItemStreamingPartAudioTranscriptionFinished = 17, - ItemStreamingPartTextDelta = 18, - ItemStreamingPartTextFinished = 19, - ItemStreamingFunctionCallArgumentsDelta = 20, - ItemStreamingFunctionCallArgumentsFinished = 21, - InputSpeechStarted = 22, - InputSpeechStopped = 23, - InputTranscriptionFinished = 24, - InputTranscriptionFailed = 25, - InputAudioCommitted = 26, - InputAudioCleared = 27, - Error = 28 - } public readonly partial struct ConversationVoice : IEquatable { public ConversationVoice(string value); public static ConversationVoice Alloy { get; } @@ -2595,6 +3009,9 @@ public enum ConversationUpdateKind { public static ConversationVoice Ballad { get; } public static ConversationVoice Coral { get; } public static ConversationVoice Echo { get; } + public static ConversationVoice Fable { get; } + public static ConversationVoice Nova { get; } + public static ConversationVoice Onyx { get; } public static ConversationVoice Sage { get; } public static ConversationVoice Shimmer { get; } public static ConversationVoice Verse { get; } @@ -2608,33 +3025,320 @@ public enum ConversationUpdateKind { public static bool operator !=(ConversationVoice left, ConversationVoice right); public override readonly string ToString(); } - public class RealtimeConversationClient { - protected RealtimeConversationClient(); - protected internal RealtimeConversationClient(ClientPipeline pipeline, OpenAIClientOptions options); - public RealtimeConversationClient(string model, ApiKeyCredential credential, OpenAIClientOptions options); - public RealtimeConversationClient(string model, ApiKeyCredential credential); + public class InputAudioClearedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class InputAudioCommittedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string ItemId { get; } + public string PreviousItemId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class InputAudioSpeechFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public TimeSpan AudioEndTime { get; } + public string ItemId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class InputAudioSpeechStartedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public TimeSpan AudioStartTime { get; } + public string ItemId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class InputAudioTranscriptionDeltaUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int? ContentIndex { get; } + public string Delta { get; } + public string ItemId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class InputAudioTranscriptionFailedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ErrorCode { get; } + public string ErrorMessage { get; } + public string ErrorParameterName { get; } + public string ItemId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class InputAudioTranscriptionFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public string Transcript { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public enum InputNoiseReductionKind { + Unknown = 0, + NearField = 1, + FarField = 2, + Disabled = 3 + } + public class InputNoiseReductionOptions : IJsonModel, IPersistableModel { + public InputNoiseReductionKind Kind { get; set; } + public static InputNoiseReductionOptions CreateDisabledOptions(); + public static InputNoiseReductionOptions CreateFarFieldOptions(); + public static InputNoiseReductionOptions CreateNearFieldOptions(); + protected virtual InputNoiseReductionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual InputNoiseReductionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public readonly partial struct InputTranscriptionModel : IEquatable { + public InputTranscriptionModel(string value); + public static InputTranscriptionModel Whisper1 { get; } + public readonly bool Equals(InputTranscriptionModel other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(InputTranscriptionModel left, InputTranscriptionModel right); + public static implicit operator InputTranscriptionModel(string value); + public static bool operator !=(InputTranscriptionModel left, InputTranscriptionModel right); + public override readonly string ToString(); + } + public class InputTranscriptionOptions : IJsonModel, IPersistableModel { + public string Language { get; set; } + public InputTranscriptionModel? Model { get; set; } + public string Prompt { get; set; } + protected virtual InputTranscriptionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual InputTranscriptionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ItemCreatedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public string PreviousItemId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ItemDeletedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string ItemId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ItemRetrievedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public RealtimeItem Item { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ItemTruncatedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int AudioEndMs { get; } + public int ContentIndex { get; } + public string ItemId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class OutputAudioFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class OutputAudioTranscriptionFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + public string Transcript { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class OutputDeltaUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public BinaryData AudioBytes { get; } + public string AudioTranscript { get; } + public int ContentPartIndex { get; } + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public string ResponseId { get; } + public string Text { get; } + } + public class OutputPartFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string AudioTranscript { get; } + public int ContentPartIndex { get; } + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public string ResponseId { get; } + public string Text { get; } + } + public class OutputStreamingFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class OutputStreamingStartedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string FunctionCallArguments { get; } + public string FunctionCallId { get; } + public string FunctionCallOutput { get; } + public string FunctionName { get; } + public string ItemId { get; } + public int ItemIndex { get; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public string ResponseId { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class OutputTextFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public int ContentIndex { get; } + public string ItemId { get; } + public int OutputIndex { get; } + public string ResponseId { get; } + public string Text { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class RateLimitsUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList AllDetails { get; } + public ConversationRateLimitDetailsItem RequestDetails { get; } + public ConversationRateLimitDetailsItem TokenDetails { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public readonly partial struct RealtimeAudioFormat : IEquatable { + public RealtimeAudioFormat(string value); + public static RealtimeAudioFormat G711Alaw { get; } + public static RealtimeAudioFormat G711Ulaw { get; } + public static RealtimeAudioFormat Pcm16 { get; } + public readonly bool Equals(RealtimeAudioFormat other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(RealtimeAudioFormat left, RealtimeAudioFormat right); + public static implicit operator RealtimeAudioFormat(string value); + public static bool operator !=(RealtimeAudioFormat left, RealtimeAudioFormat right); + public override readonly string ToString(); + } + public class RealtimeClient { + protected RealtimeClient(); + public RealtimeClient(ApiKeyCredential credential, OpenAIClientOptions options); + public RealtimeClient(ApiKeyCredential credential); + protected internal RealtimeClient(ClientPipeline pipeline, OpenAIClientOptions options); public ClientPipeline Pipeline { get; } public event EventHandler OnReceivingCommand { add; remove; } public event EventHandler OnSendingCommand { add; remove; } - public RealtimeConversationSession StartConversationSession(CancellationToken cancellationToken = default); - public virtual Task StartConversationSessionAsync(RequestOptions options); - public virtual Task StartConversationSessionAsync(CancellationToken cancellationToken = default); + public virtual ClientResult CreateEphemeralToken(BinaryContent content, RequestOptions options = null); + public virtual Task CreateEphemeralTokenAsync(BinaryContent content, RequestOptions options = null); + public virtual ClientResult CreateEphemeralTranscriptionToken(BinaryContent content, RequestOptions options = null); + public virtual Task CreateEphemeralTranscriptionTokenAsync(BinaryContent content, RequestOptions options = null); + public RealtimeSession StartConversationSession(string model, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task StartConversationSessionAsync(string model, RequestOptions options); + public virtual Task StartConversationSessionAsync(string model, CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task StartSessionAsync(string model, string intent, RequestOptions options); + public RealtimeSession StartTranscriptionSession(CancellationToken cancellationToken = default); + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task StartTranscriptionSessionAsync(RequestOptions options); + public virtual Task StartTranscriptionSessionAsync(CancellationToken cancellationToken = default); } - public class RealtimeConversationSession : IDisposable { - protected internal RealtimeConversationSession(RealtimeConversationClient parentClient, Uri endpoint, ApiKeyCredential credential); + [Flags] + public enum RealtimeContentModalities { + Default = 0, + Text = 1, + Audio = 2 + } + public class RealtimeErrorUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public string ErrorCode { get; } + public string ErrorEventId { get; } + public string Message { get; } + public string ParameterName { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class RealtimeItem : IJsonModel, IPersistableModel { + public string FunctionArguments { get; } + public string FunctionCallId { get; } + public string FunctionName { get; } + public string Id { get; set; } + public IReadOnlyList MessageContentParts { get; } + public ConversationMessageRole? MessageRole { get; } + public static RealtimeItem CreateAssistantMessage(IEnumerable contentItems); + public static RealtimeItem CreateFunctionCall(string name, string callId, string arguments); + public static RealtimeItem CreateFunctionCallOutput(string callId, string output); + public static RealtimeItem CreateSystemMessage(IEnumerable contentItems); + public static RealtimeItem CreateUserMessage(IEnumerable contentItems); + protected virtual RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class RealtimeSession : IDisposable { + protected internal RealtimeSession(RealtimeClient parentClient, Uri endpoint, ApiKeyCredential credential); public Net.WebSockets.WebSocket WebSocket { get; protected set; } - public virtual void AddItem(ConversationItem item, string previousItemId, CancellationToken cancellationToken = default); - public virtual void AddItem(ConversationItem item, CancellationToken cancellationToken = default); - public virtual Task AddItemAsync(ConversationItem item, string previousItemId, CancellationToken cancellationToken = default); - public virtual Task AddItemAsync(ConversationItem item, CancellationToken cancellationToken = default); + public virtual void AddItem(RealtimeItem item, string previousItemId, CancellationToken cancellationToken = default); + public virtual void AddItem(RealtimeItem item, CancellationToken cancellationToken = default); + public virtual Task AddItemAsync(RealtimeItem item, string previousItemId, CancellationToken cancellationToken = default); + public virtual Task AddItemAsync(RealtimeItem item, CancellationToken cancellationToken = default); public virtual void CancelResponse(CancellationToken cancellationToken = default); public virtual Task CancelResponseAsync(CancellationToken cancellationToken = default); public virtual void ClearInputAudio(CancellationToken cancellationToken = default); public virtual Task ClearInputAudioAsync(CancellationToken cancellationToken = default); public virtual void CommitPendingAudio(CancellationToken cancellationToken = default); public virtual Task CommitPendingAudioAsync(CancellationToken cancellationToken = default); + public virtual Task ConfigureConversationSessionAsync(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default); public virtual void ConfigureSession(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default); - public virtual Task ConfigureSessionAsync(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default); + public virtual void ConfigureTranscriptionSession(TranscriptionSessionOptions sessionOptions, CancellationToken cancellationToken = default); + public virtual Task ConfigureTranscriptionSessionAsync(TranscriptionSessionOptions sessionOptions, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] protected internal virtual void Connect(RequestOptions options); [EditorBrowsable(EditorBrowsableState.Never)] @@ -2646,10 +3350,12 @@ public class RealtimeConversationSession : IDisposable { public virtual Task InterruptResponseAsync(CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual IEnumerable ReceiveUpdates(RequestOptions options); - public virtual IEnumerable ReceiveUpdates(CancellationToken cancellationToken = default); + public virtual IEnumerable ReceiveUpdates(CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual IAsyncEnumerable ReceiveUpdatesAsync(RequestOptions options); - public virtual IAsyncEnumerable ReceiveUpdatesAsync(CancellationToken cancellationToken = default); + public virtual IAsyncEnumerable ReceiveUpdatesAsync(CancellationToken cancellationToken = default); + public virtual void RequestItemRetrieval(string itemId, CancellationToken cancellationToken = default); + public virtual Task RequestItemRetrievalAsync(string itemId, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual void SendCommand(BinaryData data, RequestOptions options); [EditorBrowsable(EditorBrowsableState.Never)] @@ -2665,6 +3371,54 @@ public class RealtimeConversationSession : IDisposable { public virtual void TruncateItem(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default); public virtual Task TruncateItemAsync(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default); } + public class RealtimeUpdate : IJsonModel, IPersistableModel { + public string EventId { get; } + public RealtimeUpdateKind Kind { get; } + public BinaryData GetRawContent(); + protected virtual RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + public static explicit operator RealtimeUpdate(ClientResult result); + protected virtual RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public enum RealtimeUpdateKind { + Unknown = 0, + SessionStarted = 1, + SessionConfigured = 2, + ItemCreated = 3, + ConversationCreated = 4, + ItemRetrieved = 5, + ItemDeleted = 6, + ItemTruncated = 7, + ResponseStarted = 8, + ResponseFinished = 9, + RateLimitsUpdated = 10, + ItemStreamingStarted = 11, + ItemStreamingFinished = 12, + ItemContentPartStarted = 13, + ItemContentPartFinished = 14, + ItemStreamingPartAudioDelta = 15, + ItemStreamingPartAudioFinished = 16, + ItemStreamingPartAudioTranscriptionDelta = 17, + ItemStreamingPartAudioTranscriptionFinished = 18, + ItemStreamingPartTextDelta = 19, + ItemStreamingPartTextFinished = 20, + ItemStreamingFunctionCallArgumentsDelta = 21, + ItemStreamingFunctionCallArgumentsFinished = 22, + InputSpeechStarted = 23, + InputSpeechStopped = 24, + InputTranscriptionFinished = 25, + InputTranscriptionDelta = 26, + InputTranscriptionFailed = 27, + InputAudioCommitted = 28, + InputAudioCleared = 29, + OutputAudioBufferCleared = 30, + OutputAudioBufferStarted = 31, + OutputAudioBufferStopped = 32, + TranscriptionSessionStarted = 33, + TranscriptionSessionConfigured = 34, + Error = 35 + } public readonly partial struct ResponseConversationSelection : IEquatable { public ResponseConversationSelection(string value); public static ResponseConversationSelection Auto { get; } @@ -2679,6 +3433,65 @@ public class RealtimeConversationSession : IDisposable { public static bool operator !=(ResponseConversationSelection left, ResponseConversationSelection right); public override readonly string ToString(); } + public class ResponseFinishedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList CreatedItems { get; } + public string ResponseId { get; } + public ConversationStatus? Status { get; } + public ConversationStatusDetails StatusDetails { get; } + public ConversationTokenUsage Usage { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ResponseStartedUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public IReadOnlyList CreatedItems { get; } + public string ResponseId { get; } + public ConversationStatus Status { get; } + public ConversationStatusDetails StatusDetails { get; } + public ConversationTokenUsage Usage { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class TranscriptionSessionConfiguredUpdate : RealtimeUpdate, IJsonModel, IPersistableModel { + public RealtimeContentModalities ContentModalities { get; } + public RealtimeAudioFormat InputAudioFormat { get; } + public InputTranscriptionOptions InputAudioTranscription { get; } + public TurnDetectionOptions TurnDetection { get; } + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class TranscriptionSessionOptions : IJsonModel, IPersistableModel { + public RealtimeContentModalities ContentModalities { get; set; } + public IList Include { get; } + public RealtimeAudioFormat? InputAudioFormat { get; set; } + public InputNoiseReductionOptions InputNoiseReductionOptions { get; set; } + public InputTranscriptionOptions InputTranscriptionOptions { get; set; } + public TurnDetectionOptions TurnDetectionOptions { get; set; } + protected virtual TranscriptionSessionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual TranscriptionSessionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public enum TurnDetectionKind { + Unknown = 0, + ServerVoiceActivityDetection = 1, + SemanticVoiceActivityDetection = 2, + Disabled = 3 + } + public class TurnDetectionOptions : IJsonModel, IPersistableModel { + public TurnDetectionKind Kind { get; } + public static TurnDetectionOptions CreateDisabledTurnDetectionOptions(); + public static TurnDetectionOptions CreateServerVoiceActivityTurnDetectionOptions(float? detectionThreshold = null, TimeSpan? prefixPaddingDuration = null, TimeSpan? silenceDuration = null, bool? enableAutomaticResponseCreation = null, bool? enableResponseInterruption = null); + protected virtual TurnDetectionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual TurnDetectionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } } namespace OpenAI.Responses { public class ComputerCallAction : IJsonModel, IPersistableModel { @@ -2702,8 +3515,10 @@ public class ComputerCallAction : IJsonModel, IPersistableMo public static ComputerCallAction CreateScrollAction(Drawing.Point scrollCoordinates, int horizontalOffset, int verticalOffset); public static ComputerCallAction CreateTypeAction(string typeText); public static ComputerCallAction CreateWaitAction(); - public static explicit operator ComputerCallAction(ClientResult result); - public static implicit operator BinaryContent(ComputerCallAction computerCallAction); + protected virtual ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ComputerCallActionKind { Click = 0, @@ -2724,13 +3539,14 @@ public enum ComputerCallActionMouseButton { Forward = 4 } public class ComputerCallOutputResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public ComputerCallOutputResponseItem(string callId, IEnumerable acknowledgedSafetyChecks, ComputerOutput output); public IList AcknowledgedSafetyChecks { get; } - public string CallId { get; set; } - public ComputerOutput Output { get; set; } + public string CallId { get; } + public ComputerOutput Output { get; } public ComputerCallOutputStatus? Status { get; } - public new static explicit operator ComputerCallOutputResponseItem(ClientResult result); - public static implicit operator BinaryContent(ComputerCallOutputResponseItem computerCallOutputResponseItem); + 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 enum ComputerCallOutputStatus { InProgress = 0, @@ -2739,20 +3555,24 @@ public enum ComputerCallOutputStatus { } public class ComputerCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { public ComputerCallResponseItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); - public ComputerCallAction Action { get; set; } - public string CallId { get; set; } + public ComputerCallAction Action { get; } + public string CallId { get; } public IList PendingSafetyChecks { get; } - public ComputerCallStatus Status { get; } - public new static explicit operator ComputerCallResponseItem(ClientResult result); - public static implicit operator BinaryContent(ComputerCallResponseItem computerCallResponseItem); + public ComputerCallStatus? Status { get; } + 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 ComputerCallSafetyCheck : IJsonModel, IPersistableModel { public ComputerCallSafetyCheck(string id, string code, string message); public string Code { get; set; } public string Id { get; set; } public string Message { get; set; } - public static explicit operator ComputerCallSafetyCheck(ClientResult result); - public static implicit operator BinaryContent(ComputerCallSafetyCheck computerCallSafetyCheck); + protected virtual ComputerCallSafetyCheck JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ComputerCallSafetyCheck PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ComputerCallStatus { InProgress = 0, @@ -2763,12 +3583,15 @@ public class ComputerOutput : IJsonModel, IPersistableModel { public ComputerToolEnvironment(string value); public static ComputerToolEnvironment Browser { get; } + public static ComputerToolEnvironment Linux { get; } public static ComputerToolEnvironment Mac { get; } public static ComputerToolEnvironment Ubuntu { get; } public static ComputerToolEnvironment Windows { get; } @@ -2783,21 +3606,24 @@ public class ComputerOutput : IJsonModel, IPersistableModel, IPersistableModel { - public FileSearchCallResponseItem(IEnumerable queries, IEnumerable results); public IList Queries { get; } - public IList Results { get; set; } - public FileSearchCallStatus Status { get; } - public new static explicit operator FileSearchCallResponseItem(ClientResult result); - public static implicit operator BinaryContent(FileSearchCallResponseItem fileSearchCallResponseItem); + public IList Results { get; } + public FileSearchCallStatus? Status { get; } + 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 FileSearchCallResult : IJsonModel, IPersistableModel { - public IDictionary Attributes { get; } + public IReadOnlyDictionary Attributes { get; } public string FileId { get; set; } public string Filename { get; set; } public float? Score { get; set; } public string Text { get; set; } - public static explicit operator FileSearchCallResult(ClientResult result); - public static implicit operator BinaryContent(FileSearchCallResult fileSearchCallResult); + protected virtual FileSearchCallResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FileSearchCallResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum FileSearchCallStatus { InProgress = 0, @@ -2823,16 +3649,19 @@ public enum FileSearchCallStatus { public class FileSearchToolRankingOptions : IJsonModel, IPersistableModel { public FileSearchToolRanker? Ranker { get; set; } public float? ScoreThreshold { get; set; } - public static explicit operator FileSearchToolRankingOptions(ClientResult result); - public static implicit operator BinaryContent(FileSearchToolRankingOptions fileSearchToolRankingOptions); + protected virtual FileSearchToolRankingOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FileSearchToolRankingOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class FunctionCallOutputResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public FunctionCallOutputResponseItem(string callId, string functionOutput); - public string CallId { get; set; } + public string CallId { get; } public string FunctionOutput { get; set; } public FunctionCallOutputStatus? Status { get; } - public new static explicit operator FunctionCallOutputResponseItem(ClientResult result); - public static implicit operator BinaryContent(FunctionCallOutputResponseItem functionCallOutputResponseItem); + 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 enum FunctionCallOutputStatus { InProgress = 0, @@ -2840,13 +3669,14 @@ public enum FunctionCallOutputStatus { Incomplete = 2 } public class FunctionCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public FunctionCallResponseItem(string callId, string functionName, BinaryData functionArguments); - public string CallId { get; set; } + public string CallId { get; } public BinaryData FunctionArguments { get; set; } public string FunctionName { get; set; } public FunctionCallStatus? Status { get; } - public new static explicit operator FunctionCallResponseItem(ClientResult result); - public static implicit operator BinaryContent(FunctionCallResponseItem functionCallResponseItem); + 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 enum FunctionCallStatus { InProgress = 0, @@ -2857,8 +3687,10 @@ public class MessageResponseItem : ResponseItem, IJsonModel public IList Content { get; } public MessageRole Role { get; } public MessageStatus? Status { get; } - public new static explicit operator MessageResponseItem(ClientResult result); - public static implicit operator BinaryContent(MessageResponseItem messageResponseItem); + 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 enum MessageRole { Unknown = 0, @@ -2873,6 +3705,7 @@ public enum MessageStatus { Incomplete = 2 } public class OpenAIResponse : IJsonModel, IPersistableModel { + public bool? Background { get; } public DateTimeOffset CreatedAt { get; } public string EndUserId { get; } public ResponseError Error { get; } @@ -2887,16 +3720,18 @@ public class OpenAIResponse : IJsonModel, IPersistableModel Tools { get; } - public float TopP { get; } + public float? TopP { get; } public ResponseTruncationMode? TruncationMode { get; } public ResponseTokenUsage Usage { get; } public string GetOutputText(); - public static explicit operator OpenAIResponse(ClientResult result); - public static implicit operator BinaryContent(OpenAIResponse openAIResponse); + protected virtual OpenAIResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual OpenAIResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class OpenAIResponseClient { protected OpenAIResponseClient(); @@ -2905,6 +3740,10 @@ public class OpenAIResponseClient { public OpenAIResponseClient(string model, ApiKeyCredential credential); public OpenAIResponseClient(string model, string apiKey); public ClientPipeline Pipeline { get; } + public virtual ClientResult CancelResponse(string responseId, RequestOptions options); + public virtual ClientResult CancelResponse(string responseId, CancellationToken cancellationToken = default); + public virtual Task CancelResponseAsync(string responseId, RequestOptions options); + public virtual Task> CancelResponseAsync(string responseId, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult CreateResponse(BinaryContent content, RequestOptions options = null); public virtual ClientResult CreateResponse(IEnumerable inputItems, ResponseCreationOptions options = null, CancellationToken cancellationToken = default); @@ -2924,10 +3763,10 @@ public class OpenAIResponseClient { public virtual Task DeleteResponseAsync(string responseId, RequestOptions options); public virtual Task> DeleteResponseAsync(string responseId, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] - public virtual ClientResult GetResponse(string responseId, RequestOptions options); + public virtual ClientResult GetResponse(string responseId, bool? stream, int? startingAfter, RequestOptions options); public virtual ClientResult GetResponse(string responseId, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] - public virtual Task GetResponseAsync(string responseId, RequestOptions options); + public virtual Task GetResponseAsync(string responseId, bool? stream, int? startingAfter, RequestOptions options); public virtual Task> GetResponseAsync(string responseId, CancellationToken cancellationToken = default); public virtual CollectionResult GetResponseInputItems(string responseId, ResponseItemCollectionOptions options = null, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] @@ -2935,26 +3774,51 @@ public class OpenAIResponseClient { public virtual AsyncCollectionResult GetResponseInputItemsAsync(string responseId, ResponseItemCollectionOptions options = null, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual AsyncCollectionResult GetResponseInputItemsAsync(string responseId, int? limit, string order, string after, string before, RequestOptions options = null); + public virtual CollectionResult GetResponseStreaming(string responseId, int? startingAfter = null, CancellationToken cancellationToken = default); + public virtual AsyncCollectionResult GetResponseStreamingAsync(string responseId, int? startingAfter = null, CancellationToken cancellationToken = default); } public class ReasoningResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public ReasoningResponseItem(IEnumerable summaryTextParts); + public ReasoningResponseItem(IEnumerable summaryParts); + public ReasoningResponseItem(string summaryText); + public string EncryptedContent { get; } public ReasoningStatus? Status { get; } - public IReadOnlyList SummaryTextParts { get; } - public new static explicit operator ReasoningResponseItem(ClientResult result); - public static implicit operator BinaryContent(ReasoningResponseItem reasoningResponseItem); + public IReadOnlyList SummaryParts { get; } + public string GetSummaryText(); + 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 enum ReasoningStatus { InProgress = 0, Completed = 1, Incomplete = 2 } + public class ReasoningSummaryPart : IJsonModel, IPersistableModel { + public static ReasoningSummaryPart CreateTextPart(string text); + protected virtual ReasoningSummaryPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ReasoningSummaryPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class ReasoningSummaryTextPart : ReasoningSummaryPart, IJsonModel, IPersistableModel { + public ReasoningSummaryTextPart(string text); + public string Text { get; set; } + protected override ReasoningSummaryPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override ReasoningSummaryPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class ReferenceResponseItem : ResponseItem, IJsonModel, IPersistableModel { public ReferenceResponseItem(string id); - public new static explicit operator ReferenceResponseItem(ClientResult result); - public static implicit operator BinaryContent(ReferenceResponseItem referenceResponseItem); + 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 ResponseContentPart : IJsonModel, IPersistableModel { public BinaryData InputFileBytes { get; } + public string InputFileBytesMediaType { get; } public string InputFileId { get; } public string InputFilename { get; } public ResponseImageDetailLevel? InputImageDetailLevel { get; } @@ -2963,15 +3827,18 @@ public class ResponseContentPart : IJsonModel, IPersistable public IReadOnlyList OutputTextAnnotations { get; } public string Refusal { get; } public string Text { get; } - public static ResponseContentPart CreateInputFilePart(string fileId, string filename, BinaryData fileBytes); + public static ResponseContentPart CreateInputFilePart(BinaryData fileBytes, string fileBytesMediaType, string filename); + public static ResponseContentPart CreateInputFilePart(string fileId); public static ResponseContentPart CreateInputImagePart(BinaryData imageBytes, string imageBytesMediaType, ResponseImageDetailLevel? imageDetailLevel = null); public static ResponseContentPart CreateInputImagePart(string imageFileId, ResponseImageDetailLevel? imageDetailLevel = null); public static ResponseContentPart CreateInputImagePart(Uri imageUri, ResponseImageDetailLevel? imageDetailLevel = null); public static ResponseContentPart CreateInputTextPart(string text); public static ResponseContentPart CreateOutputTextPart(string text, IEnumerable annotations); public static ResponseContentPart CreateRefusalPart(string refusal); - public static explicit operator ResponseContentPart(ClientResult result); - public static implicit operator BinaryContent(ResponseContentPart responseContentPart); + protected virtual ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ResponseContentPartKind { Unknown = 0, @@ -2982,6 +3849,7 @@ public enum ResponseContentPartKind { Refusal = 5 } public class ResponseCreationOptions : IJsonModel, IPersistableModel { + public bool? Background { get; set; } public string EndUserId { get; set; } public string Instructions { get; set; } public int? MaxOutputTokenCount { get; set; } @@ -2996,20 +3864,56 @@ public class ResponseCreationOptions : IJsonModel, IPer public IList Tools { get; } public float? TopP { get; set; } public ResponseTruncationMode? TruncationMode { get; set; } - public static explicit operator ResponseCreationOptions(ClientResult result); - public static implicit operator BinaryContent(ResponseCreationOptions responseCreationOptions); + protected virtual ResponseCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ResponseDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string Id { get; } - public static explicit operator ResponseDeletionResult(ClientResult result); - public static implicit operator BinaryContent(ResponseDeletionResult responseDeletionResult); + protected virtual ResponseDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ResponseError : IJsonModel, IPersistableModel { - public string Code { get; } + public ResponseErrorCode Code { get; } public string Message { get; } - public static explicit operator ResponseError(ClientResult result); - public static implicit operator BinaryContent(ResponseError responseError); + protected virtual ResponseError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public readonly partial struct ResponseErrorCode : IEquatable { + public ResponseErrorCode(string value); + public static ResponseErrorCode EmptyImageFile { get; } + public static ResponseErrorCode FailedToDownloadImage { get; } + public static ResponseErrorCode ImageContentPolicyViolation { get; } + public static ResponseErrorCode ImageFileNotFound { get; } + public static ResponseErrorCode ImageFileTooLarge { get; } + public static ResponseErrorCode ImageParseError { get; } + public static ResponseErrorCode ImageTooLarge { get; } + public static ResponseErrorCode ImageTooSmall { get; } + public static ResponseErrorCode InvalidBase64Image { get; } + public static ResponseErrorCode InvalidImage { get; } + public static ResponseErrorCode InvalidImageFormat { get; } + public static ResponseErrorCode InvalidImageMode { get; } + public static ResponseErrorCode InvalidImageUrl { get; } + public static ResponseErrorCode InvalidPrompt { get; } + public static ResponseErrorCode RateLimitExceeded { get; } + public static ResponseErrorCode ServerError { get; } + public static ResponseErrorCode UnsupportedImageMediaType { get; } + public static ResponseErrorCode VectorStoreTimeout { get; } + public readonly bool Equals(ResponseErrorCode other); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly bool Equals(object obj); + [EditorBrowsable(EditorBrowsableState.Never)] + public override readonly int GetHashCode(); + public static bool operator ==(ResponseErrorCode left, ResponseErrorCode right); + public static implicit operator ResponseErrorCode(string value); + public static bool operator !=(ResponseErrorCode left, ResponseErrorCode right); + public override readonly string ToString(); } public readonly partial struct ResponseImageDetailLevel : IEquatable { public ResponseImageDetailLevel(string value); @@ -3028,8 +3932,10 @@ public class ResponseError : IJsonModel, IPersistableModel, IPersistableModel { public ResponseIncompleteStatusReason? Reason { get; } - public static explicit operator ResponseIncompleteStatusDetails(ClientResult result); - public static implicit operator BinaryContent(ResponseIncompleteStatusDetails responseIncompleteStatusDetails); + protected virtual ResponseIncompleteStatusDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseIncompleteStatusDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ResponseIncompleteStatusReason : IEquatable { public ResponseIncompleteStatusReason(string value); @@ -3045,28 +3951,38 @@ public class ResponseIncompleteStatusDetails : IJsonModel, IPersistableModel { + public int CachedTokenCount { get; } + protected virtual ResponseInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } public class ResponseItem : IJsonModel, IPersistableModel { public string Id { get; } public static MessageResponseItem CreateAssistantMessageItem(IEnumerable contentParts); public static MessageResponseItem CreateAssistantMessageItem(string outputTextContent, IEnumerable annotations = null); - public static ResponseItem CreateComputerCallItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, BinaryData screenshotImageBytes, string screenshotImageBytesMediaType); - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, string screenshotImageFileId); - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, Uri screenshotImageUri); + public static ComputerCallResponseItem CreateComputerCallItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks); + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, BinaryData screenshotImageBytes, string screenshotImageBytesMediaType); + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, string screenshotImageFileId); + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, Uri screenshotImageUri); public static MessageResponseItem CreateDeveloperMessageItem(IEnumerable contentParts); public static MessageResponseItem CreateDeveloperMessageItem(string inputTextContent); public static FileSearchCallResponseItem CreateFileSearchCallItem(IEnumerable queries, IEnumerable results); public static FunctionCallResponseItem CreateFunctionCallItem(string callId, string functionName, BinaryData functionArguments); public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string callId, string functionOutput); - public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryTextParts); + public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryParts); + 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 WebSearchCallResponseItem CreateWebSearchCallItem(); - public static explicit operator ResponseItem(ClientResult result); - public static implicit operator BinaryContent(ResponseItem responseItem); + protected virtual ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ResponseItemCollectionOptions { public string AfterId { get; set; } @@ -3097,19 +4013,24 @@ public class ResponseMessageAnnotation : IJsonModel, public int? UriCitationEndIndex { get; } public int? UriCitationStartIndex { get; } public string UriCitationTitle { get; } - public string UriCitationUri { get; } - public static explicit operator ResponseMessageAnnotation(ClientResult result); - public static implicit operator BinaryContent(ResponseMessageAnnotation responseMessageAnnotation); + public Uri UriCitationUri { get; } + protected virtual ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ResponseMessageAnnotationKind { FileCitation = 0, UriCitation = 1, - FilePath = 2 + FilePath = 2, + ContainerFileCitation = 3 } public class ResponseOutputTokenUsageDetails : IJsonModel, IPersistableModel { public int ReasoningTokenCount { get; } - public static explicit operator ResponseOutputTokenUsageDetails(ClientResult result); - public static implicit operator BinaryContent(ResponseOutputTokenUsageDetails responseOutputTokenUsageDetails); + protected virtual ResponseOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ResponseReasoningEffortLevel : IEquatable { public ResponseReasoningEffortLevel(string value); @@ -3127,15 +4048,16 @@ public class ResponseOutputTokenUsageDetails : IJsonModel, IPersistableModel { - public ResponseReasoningOptions(); - public ResponseReasoningOptions(ResponseReasoningEffortLevel? reasoningEffortLevel); public ResponseReasoningEffortLevel? ReasoningEffortLevel { get; set; } public ResponseReasoningSummaryVerbosity? ReasoningSummaryVerbosity { get; set; } - public static explicit operator ResponseReasoningOptions(ClientResult result); - public static implicit operator BinaryContent(ResponseReasoningOptions responseReasoningOptions); + protected virtual ResponseReasoningOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseReasoningOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct ResponseReasoningSummaryVerbosity : IEquatable { public ResponseReasoningSummaryVerbosity(string value); + public static ResponseReasoningSummaryVerbosity Auto { get; } public static ResponseReasoningSummaryVerbosity Concise { get; } public static ResponseReasoningSummaryVerbosity Detailed { get; } public readonly bool Equals(ResponseReasoningSummaryVerbosity other); @@ -3151,16 +4073,20 @@ public class ResponseReasoningOptions : IJsonModel, IP public enum ResponseStatus { InProgress = 0, Completed = 1, - Incomplete = 2, - Failed = 3 + Cancelled = 2, + Queued = 3, + Incomplete = 4, + Failed = 5 } public class ResponseTextFormat : IJsonModel, IPersistableModel { public ResponseTextFormatKind Kind { get; set; } public static ResponseTextFormat CreateJsonObjectFormat(); public static ResponseTextFormat CreateJsonSchemaFormat(string jsonSchemaFormatName, BinaryData jsonSchema, string jsonSchemaFormatDescription = null, bool? jsonSchemaIsStrict = null); public static ResponseTextFormat CreateTextFormat(); - public static explicit operator ResponseTextFormat(ClientResult result); - public static implicit operator BinaryContent(ResponseTextFormat responseTextFormat); + protected virtual ResponseTextFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseTextFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum ResponseTextFormatKind { Unknown = 0, @@ -3170,24 +4096,31 @@ public enum ResponseTextFormatKind { } public class ResponseTextOptions : IJsonModel, IPersistableModel { public ResponseTextFormat TextFormat { get; set; } - public static explicit operator ResponseTextOptions(ClientResult result); - public static implicit operator BinaryContent(ResponseTextOptions responseTextOptions); + protected virtual ResponseTextOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseTextOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ResponseTokenUsage : IJsonModel, IPersistableModel { public int InputTokenCount { get; } + public ResponseInputTokenUsageDetails InputTokenDetails { get; } public int OutputTokenCount { get; } public ResponseOutputTokenUsageDetails OutputTokenDetails { get; } public int TotalTokenCount { get; } - public static explicit operator ResponseTokenUsage(ClientResult result); - public static implicit operator BinaryContent(ResponseTokenUsage responseTokenUsage); + protected virtual ResponseTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ResponseTool : IJsonModel, IPersistableModel { - public static ResponseTool CreateComputerTool(int displayWidth, int displayHeight, ComputerToolEnvironment environment); + public static ResponseTool CreateComputerTool(ComputerToolEnvironment environment, int displayWidth, int displayHeight); public static ResponseTool CreateFileSearchTool(IEnumerable vectorStoreIds, int? maxResultCount = null, FileSearchToolRankingOptions rankingOptions = null, BinaryData filters = null); public static ResponseTool CreateFunctionTool(string functionName, string functionDescription, BinaryData functionParameters, bool functionSchemaIsStrict = false); - public static ResponseTool CreateWebSearchTool(WebSearchToolLocation webSearchToolUserLocation = null, WebSearchToolContextSize? webSearchToolContextSize = null); - public static explicit operator ResponseTool(ClientResult result); - public static implicit operator BinaryContent(ResponseTool responseTool); + public static ResponseTool CreateWebSearchTool(WebSearchUserLocation userLocation = null, WebSearchContextSize? searchContextSize = null); + protected virtual ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class ResponseToolChoice : IJsonModel, IPersistableModel { public string FunctionName { get; } @@ -3226,163 +4159,212 @@ public enum ResponseToolChoiceKind { } public class StreamingResponseCompletedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseCompletedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseCompletedUpdate streamingResponseCompletedUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseContentPartAddedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public int OutputIndex { get; } public ResponseContentPart Part { get; } - public new static explicit operator StreamingResponseContentPartAddedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseContentPartAddedUpdate streamingResponseContentPartAddedUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseContentPartDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public int OutputIndex { get; } public ResponseContentPart Part { get; } - public new static explicit operator StreamingResponseContentPartDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseContentPartDoneUpdate streamingResponseContentPartDoneUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseCreatedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseCreatedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseCreatedUpdate streamingResponseCreatedUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseErrorUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string Code { get; } public string Message { get; } public string Param { get; } - public new static explicit operator StreamingResponseErrorUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseErrorUpdate streamingResponseErrorUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseFailedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseFailedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFailedUpdate streamingResponseFailedUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseFileSearchCallCompletedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFileSearchCallCompletedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFileSearchCallCompletedUpdate streamingResponseFileSearchCallCompletedUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseFileSearchCallInProgressUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFileSearchCallInProgressUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFileSearchCallInProgressUpdate streamingResponseFileSearchCallInProgressUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseFileSearchCallSearchingUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFileSearchCallSearchingUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFileSearchCallSearchingUpdate streamingResponseFileSearchCallSearchingUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseFunctionCallArgumentsDeltaUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string Delta { get; } public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFunctionCallArgumentsDeltaUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFunctionCallArgumentsDeltaUpdate streamingResponseFunctionCallArgumentsDeltaUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseFunctionCallArgumentsDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string Arguments { get; } public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseFunctionCallArgumentsDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseFunctionCallArgumentsDoneUpdate streamingResponseFunctionCallArgumentsDoneUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseIncompleteUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseIncompleteUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseIncompleteUpdate streamingResponseIncompleteUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseInProgressUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public OpenAIResponse Response { get; } - public new static explicit operator StreamingResponseInProgressUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseInProgressUpdate streamingResponseInProgressUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseOutputItemAddedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public ResponseItem Item { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseOutputItemAddedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseOutputItemAddedUpdate streamingResponseOutputItemAddedUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseOutputItemDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public ResponseItem Item { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseOutputItemDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseOutputItemDoneUpdate streamingResponseOutputItemDoneUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseOutputTextDeltaUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string Delta { get; } public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseOutputTextDeltaUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseOutputTextDeltaUpdate streamingResponseOutputTextDeltaUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseOutputTextDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public int OutputIndex { get; } public string Text { get; } - public new static explicit operator StreamingResponseOutputTextDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseOutputTextDoneUpdate streamingResponseOutputTextDoneUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); + } + public class StreamingResponseQueuedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { + public OpenAIResponse Response { get; } + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseRefusalDeltaUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string Delta { get; } public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseRefusalDeltaUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseRefusalDeltaUpdate streamingResponseRefusalDeltaUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseRefusalDoneUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public int ContentIndex { get; } public string ItemId { get; } public int OutputIndex { get; } public string Refusal { get; } - public new static explicit operator StreamingResponseRefusalDoneUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseRefusalDoneUpdate streamingResponseRefusalDoneUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } - public class StreamingResponseTextAnnotationAddedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { - public ResponseMessageAnnotation Annotation { get; } - public int ContentIndex { get; } - public string ItemId { get; } - public int OutputIndex { get; } - public new static explicit operator StreamingResponseTextAnnotationAddedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseTextAnnotationAddedUpdate streamingResponseTextAnnotationAddedUpdate); + public class StreamingResponseTextAnnotationAddedUpdate { } public class StreamingResponseUpdate : IJsonModel, IPersistableModel { - public static explicit operator StreamingResponseUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseUpdate streamingResponseUpdate); + public int SequenceNumber { get; } + protected virtual StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseWebSearchCallCompletedUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseWebSearchCallCompletedUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseWebSearchCallCompletedUpdate streamingResponseWebSearchCallCompletedUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseWebSearchCallInProgressUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseWebSearchCallInProgressUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseWebSearchCallInProgressUpdate streamingResponseWebSearchCallInProgressUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StreamingResponseWebSearchCallSearchingUpdate : StreamingResponseUpdate, IJsonModel, IPersistableModel { public string ItemId { get; } public int OutputIndex { get; } - public new static explicit operator StreamingResponseWebSearchCallSearchingUpdate(ClientResult result); - public static implicit operator BinaryContent(StreamingResponseWebSearchCallSearchingUpdate streamingResponseWebSearchCallSearchingUpdate); + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class WebSearchCallResponseItem : ResponseItem, IJsonModel, IPersistableModel { - public WebSearchCallResponseItem(); - public WebSearchCallStatus Status { get; } - public new static explicit operator WebSearchCallResponseItem(ClientResult result); - public static implicit operator BinaryContent(WebSearchCallResponseItem webSearchCallResponseItem); + public WebSearchCallStatus? Status { get; } + 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 enum WebSearchCallStatus { InProgress = 0, @@ -3390,25 +4372,27 @@ public enum WebSearchCallStatus { Completed = 2, Failed = 3 } - public readonly partial struct WebSearchToolContextSize : IEquatable { - public WebSearchToolContextSize(string value); - public static WebSearchToolContextSize High { get; } - public static WebSearchToolContextSize Low { get; } - public static WebSearchToolContextSize Medium { get; } - public readonly bool Equals(WebSearchToolContextSize other); + public readonly partial struct WebSearchContextSize : IEquatable { + public WebSearchContextSize(string value); + public static WebSearchContextSize High { get; } + public static WebSearchContextSize Low { get; } + public static WebSearchContextSize Medium { get; } + public readonly bool Equals(WebSearchContextSize other); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly bool Equals(object obj); [EditorBrowsable(EditorBrowsableState.Never)] public override readonly int GetHashCode(); - public static bool operator ==(WebSearchToolContextSize left, WebSearchToolContextSize right); - public static implicit operator WebSearchToolContextSize(string value); - public static bool operator !=(WebSearchToolContextSize left, WebSearchToolContextSize right); + public static bool operator ==(WebSearchContextSize left, WebSearchContextSize right); + public static implicit operator WebSearchContextSize(string value); + public static bool operator !=(WebSearchContextSize left, WebSearchContextSize right); public override readonly string ToString(); } - public class WebSearchToolLocation : IJsonModel, IPersistableModel { - public static WebSearchToolLocation CreateApproximateLocation(string country = null, string region = null, string city = null, string timezone = null); - public static explicit operator WebSearchToolLocation(ClientResult result); - public static implicit operator BinaryContent(WebSearchToolLocation webSearchToolLocation); + public class WebSearchUserLocation : IJsonModel, IPersistableModel { + public static WebSearchUserLocation CreateApproximateLocation(string country = null, string region = null, string city = null, string timezone = null); + protected virtual WebSearchUserLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual WebSearchUserLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } } namespace OpenAI.VectorStores { @@ -3472,21 +4456,27 @@ public abstract class FileChunkingStrategy : IJsonModel, I public static FileChunkingStrategy Auto { get; } public static FileChunkingStrategy Unknown { get; } public static FileChunkingStrategy CreateStaticStrategy(int maxTokensPerChunk, int overlappingTokenCount); - public static explicit operator FileChunkingStrategy(ClientResult result); - public static implicit operator BinaryContent(FileChunkingStrategy fileChunkingStrategy); + protected virtual FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class FileFromStoreRemovalResult : IJsonModel, IPersistableModel { public string FileId { get; } public bool Removed { get; } - public static explicit operator FileFromStoreRemovalResult(ClientResult result); - public static implicit operator BinaryContent(FileFromStoreRemovalResult fileFromStoreRemovalResult); + protected virtual FileFromStoreRemovalResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual FileFromStoreRemovalResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class StaticFileChunkingStrategy : FileChunkingStrategy, IJsonModel, IPersistableModel { public StaticFileChunkingStrategy(int maxTokensPerChunk, int overlappingTokenCount); public int MaxTokensPerChunk { get; } public int OverlappingTokenCount { get; } - public new static explicit operator StaticFileChunkingStrategy(ClientResult result); - public static implicit operator BinaryContent(StaticFileChunkingStrategy staticFileChunkingStrategy); + protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class VectorStore : IJsonModel, IPersistableModel { public DateTimeOffset CreatedAt { get; } @@ -3499,8 +4489,10 @@ public class VectorStore : IJsonModel, IPersistableModel, IPersistableModel { public string BatchId { get; } @@ -3508,8 +4500,10 @@ public class VectorStoreBatchFileJob : IJsonModel, IPer public VectorStoreFileCounts FileCounts { get; } public VectorStoreBatchFileJobStatus Status { get; } public string VectorStoreId { get; } - public static explicit operator VectorStoreBatchFileJob(ClientResult result); - public static implicit operator BinaryContent(VectorStoreBatchFileJob vectorStoreBatchFileJob); + protected virtual VectorStoreBatchFileJob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual VectorStoreBatchFileJob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct VectorStoreBatchFileJobStatus : IEquatable { public VectorStoreBatchFileJobStatus(string value); @@ -3552,11 +4546,11 @@ public class VectorStoreClient { [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task CreateBatchFileJobAsync(string vectorStoreId, BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); public virtual Task CreateBatchFileJobAsync(string vectorStoreId, IEnumerable fileIds, bool waitUntilCompleted, CancellationToken cancellationToken = default); - public virtual CreateVectorStoreOperation CreateVectorStore(bool waitUntilCompleted, VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default); + public virtual CreateVectorStoreOperation CreateVectorStore(bool waitUntilCompleted, VectorStoreCreationOptions options = null, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual CreateVectorStoreOperation CreateVectorStore(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); public virtual ClientResult CreateVectorStore(BinaryContent content, RequestOptions options = null); - public virtual Task CreateVectorStoreAsync(bool waitUntilCompleted, VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default); + public virtual Task CreateVectorStoreAsync(bool waitUntilCompleted, VectorStoreCreationOptions options = null, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task CreateVectorStoreAsync(BinaryContent content, bool waitUntilCompleted, RequestOptions options = null); public virtual Task CreateVectorStoreAsync(BinaryContent content, RequestOptions options = null); @@ -3599,10 +4593,10 @@ public class VectorStoreClient { public virtual AsyncCollectionResult GetVectorStoresAsync(ContinuationToken firstPageToken, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual AsyncCollectionResult GetVectorStoresAsync(int? limit, string order, string after, string before, RequestOptions options); - public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default); + public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions options, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult ModifyVectorStore(string vectorStoreId, BinaryContent content, RequestOptions options = null); - public virtual Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default); + public virtual Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions options, CancellationToken cancellationToken = default); [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task ModifyVectorStoreAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null); [EditorBrowsable(EditorBrowsableState.Never)] @@ -3611,6 +4605,14 @@ public class VectorStoreClient { [EditorBrowsable(EditorBrowsableState.Never)] public virtual Task RemoveFileFromStoreAsync(string vectorStoreId, string fileId, RequestOptions options); public virtual Task> RemoveFileFromStoreAsync(string vectorStoreId, string fileId, CancellationToken cancellationToken = default); + public virtual ClientResult RetrieveVectorStoreFileContent(string vectorStoreId, string fileId, RequestOptions options); + public virtual Task RetrieveVectorStoreFileContentAsync(string vectorStoreId, string fileId, RequestOptions options); + public virtual ClientResult SearchVectorStore(string vectorStoreId, BinaryContent content, RequestOptions options = null); + public virtual Task SearchVectorStoreAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult UpdateVectorStoreFileAttributes(string vectorStoreId, string fileId, BinaryContent content, RequestOptions options = null); + public virtual ClientResult UpdateVectorStoreFileAttributes(string vectorStoreId, string fileId, IDictionary attributes, CancellationToken cancellationToken = default); + public virtual Task UpdateVectorStoreFileAttributesAsync(string vectorStoreId, string fileId, BinaryContent content, RequestOptions options = null); + public virtual Task> UpdateVectorStoreFileAttributesAsync(string vectorStoreId, string fileId, IDictionary attributes, CancellationToken cancellationToken = default); } public class VectorStoreCollectionOptions { public string AfterId { get; set; } @@ -3638,14 +4640,18 @@ public class VectorStoreCreationOptions : IJsonModel public IList FileIds { get; } public IDictionary Metadata { get; } public string Name { get; set; } - public static explicit operator VectorStoreCreationOptions(ClientResult result); - public static implicit operator BinaryContent(VectorStoreCreationOptions vectorStoreCreationOptions); + protected virtual VectorStoreCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual VectorStoreCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class VectorStoreDeletionResult : IJsonModel, IPersistableModel { public bool Deleted { get; } public string VectorStoreId { get; } - public static explicit operator VectorStoreDeletionResult(ClientResult result); - public static implicit operator BinaryContent(VectorStoreDeletionResult vectorStoreDeletionResult); + protected virtual VectorStoreDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual VectorStoreDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum VectorStoreExpirationAnchor { Unknown = 0, @@ -3655,8 +4661,10 @@ public class VectorStoreExpirationPolicy : IJsonModel, IPersistableModel { public IDictionary Attributes { get; } @@ -3667,8 +4675,10 @@ public class VectorStoreFileAssociation : IJsonModel public int Size { get; } public VectorStoreFileAssociationStatus Status { get; } public string VectorStoreId { get; } - public static explicit operator VectorStoreFileAssociation(ClientResult result); - public static implicit operator BinaryContent(VectorStoreFileAssociation vectorStoreFileAssociation); + protected virtual VectorStoreFileAssociation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual VectorStoreFileAssociation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public class VectorStoreFileAssociationCollectionOptions { public string AfterId { get; set; } @@ -3694,8 +4704,10 @@ public class VectorStoreFileAssociationCollectionOptions { public class VectorStoreFileAssociationError : IJsonModel, IPersistableModel { public VectorStoreFileAssociationErrorCode Code { get; } public string Message { get; } - public static explicit operator VectorStoreFileAssociationError(ClientResult result); - public static implicit operator BinaryContent(VectorStoreFileAssociationError vectorStoreFileAssociationError); + protected virtual VectorStoreFileAssociationError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual VectorStoreFileAssociationError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct VectorStoreFileAssociationErrorCode : IEquatable { public VectorStoreFileAssociationErrorCode(string value); @@ -3725,8 +4737,10 @@ public class VectorStoreFileCounts : IJsonModel, IPersist public int Failed { get; } public int InProgress { get; } public int Total { get; } - public static explicit operator VectorStoreFileCounts(ClientResult result); - public static implicit operator BinaryContent(VectorStoreFileCounts vectorStoreFileCounts); + protected virtual VectorStoreFileCounts JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual VectorStoreFileCounts PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public readonly partial struct VectorStoreFileStatusFilter : IEquatable { public VectorStoreFileStatusFilter(string value); @@ -3748,8 +4762,10 @@ public class VectorStoreModificationOptions : IJsonModel Metadata { get; } public string Name { get; set; } - public static explicit operator VectorStoreModificationOptions(ClientResult result); - public static implicit operator BinaryContent(VectorStoreModificationOptions vectorStoreModificationOptions); + protected virtual VectorStoreModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options); + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); + protected virtual VectorStoreModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options); + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options); } public enum VectorStoreStatus { Unknown = 0, diff --git a/docs/guides/README.MD b/docs/guides/README.MD index c8df5dca7..bcea8353d 100644 --- a/docs/guides/README.MD +++ b/docs/guides/README.MD @@ -48,7 +48,7 @@ You need an OpenAI API key to run the samples. Get one from [OpenAI's API platfo #### Temporary (Current Session Only) ```powershell -$env:OPENAI_KEY = "your-api-key-here" +$env:OPENAI_API_KEY = "your-api-key-here" ``` #### Permanent Options @@ -57,22 +57,22 @@ $env:OPENAI_KEY = "your-api-key-here" 1. Press `Win + R`, type `sysdm.cpl`, press Enter 2. Click "Environment Variables" 3. Under "User variables", click "New" -4. Variable name: `OPENAI_KEY` +4. Variable name: `OPENAI_API_KEY` 5. Variable value: Your API key **Option B: Using PowerShell (Permanent)** ```powershell -[Environment]::SetEnvironmentVariable("OPENAI_KEY", "your-api-key-here", "User") +[Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "your-api-key-here", "User") ``` **Option C: Using Command Prompt as Administrator** ```cmd -setx OPENAI_KEY "your-api-key-here" +setx OPENAI_API_KEY "your-api-key-here" ``` ### 3. Verify Environment Variable ```powershell -echo $env:OPENAI_KEY +echo $env:OPENAI_API_KEY ``` ## Running the Samples @@ -147,7 +147,7 @@ using OpenAI.Chat; // Regular C# code follows ### Problem: API errors - **Solution**: - - Verify your `OPENAI_KEY` environment variable is set correctly + - Verify your `OPENAI_API_KEY` environment variable is set correctly - Check that your API key is valid and has sufficient credits - Ensure you're using a valid model name (e.g., "gpt-4", "gpt-3.5-turbo") diff --git a/docs/guides/mcp/chat_with_mcp.cs b/docs/guides/mcp/chat_with_mcp.cs index 620c8520e..82b9e704c 100644 --- a/docs/guides/mcp/chat_with_mcp.cs +++ b/docs/guides/mcp/chat_with_mcp.cs @@ -9,7 +9,7 @@ using OpenAI.Chat; string mcpCommand = Environment.GetEnvironmentVariable("MCP_SERVER_COMMAND")!; // path to a stdio mcp server -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; ChatClient chatClient = new("gpt-4.1", key); diff --git a/docs/guides/text/chat/chat_instructions.cs b/docs/guides/text/chat/chat_instructions.cs index 06ebf0414..b9ed0f18c 100644 --- a/docs/guides/text/chat/chat_instructions.cs +++ b/docs/guides/text/chat/chat_instructions.cs @@ -5,7 +5,7 @@ using OpenAI.Chat; -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; ChatClient client = new("gpt-4.1", key); ChatCompletion acompletion = client.CompleteChat([ ChatMessage.CreateSystemMessage("Talk like a pirate."), diff --git a/docs/guides/text/chat/chat_roles.cs b/docs/guides/text/chat/chat_roles.cs index 6fefbb95e..2353dc5bf 100644 --- a/docs/guides/text/chat/chat_roles.cs +++ b/docs/guides/text/chat/chat_roles.cs @@ -5,7 +5,7 @@ using OpenAI.Chat; -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; ChatClient client = new("gpt-4.1", key); ChatCompletion acompletion = client.CompleteChat([ ChatMessage.CreateDeveloperMessage("Talk like a pirate."), diff --git a/docs/guides/text/chat/chat_simpleprompt.cs b/docs/guides/text/chat/chat_simpleprompt.cs index cf0556365..11378d4c6 100644 --- a/docs/guides/text/chat/chat_simpleprompt.cs +++ b/docs/guides/text/chat/chat_simpleprompt.cs @@ -5,7 +5,7 @@ using OpenAI.Chat; -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; ChatClient client = new("gpt-4.1", key); ChatCompletion acompletion = client.CompleteChat("Write a one-sentence bedtime story about a unicorn."); Console.WriteLine(acompletion.Content[0].Text); \ No newline at end of file diff --git a/docs/guides/text/responses/responses_fileinput.cs b/docs/guides/text/responses/responses_fileinput.cs index 3d7b2c1a9..16930bef5 100644 --- a/docs/guides/text/responses/responses_fileinput.cs +++ b/docs/guides/text/responses/responses_fileinput.cs @@ -7,7 +7,7 @@ using OpenAI.Files; using System.ClientModel; -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; OpenAIResponseClient client = new("gpt-4.1", key); // Upload a PDF we will reference in the variables diff --git a/docs/guides/text/responses/responses_instructions.cs b/docs/guides/text/responses/responses_instructions.cs index 6b195ae8b..e60e5e086 100644 --- a/docs/guides/text/responses/responses_instructions.cs +++ b/docs/guides/text/responses/responses_instructions.cs @@ -5,7 +5,7 @@ using OpenAI.Responses; -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; OpenAIResponseClient client = new("gpt-4.1", key); OpenAIResponse response = client.CreateResponse( "Are semicolons optional in JavaScript?", diff --git a/docs/guides/text/responses/responses_prompttemplate.cs b/docs/guides/text/responses/responses_prompttemplate.cs index dc310f7d6..755a7542f 100644 --- a/docs/guides/text/responses/responses_prompttemplate.cs +++ b/docs/guides/text/responses/responses_prompttemplate.cs @@ -6,7 +6,7 @@ using OpenAI.Responses; using System.ClientModel; -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; OpenAIResponseClient client = new("gpt-4.1", key); OpenAIResponse response = (OpenAIResponse)client.CreateResponse( BinaryContent.Create(BinaryData.FromObjectAsJson( diff --git a/docs/guides/text/responses/responses_roles.cs b/docs/guides/text/responses/responses_roles.cs index 2b9b4a7fb..9100d6550 100644 --- a/docs/guides/text/responses/responses_roles.cs +++ b/docs/guides/text/responses/responses_roles.cs @@ -5,7 +5,7 @@ using OpenAI.Responses; -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; OpenAIResponseClient client = new("gpt-4.1", key); OpenAIResponse response = client.CreateResponse([ ResponseItem.CreateDeveloperMessageItem("Talk like a pirate."), diff --git a/docs/guides/text/responses/responses_simpleprompt.cs b/docs/guides/text/responses/responses_simpleprompt.cs index 9c5f4b270..20abdcba4 100644 --- a/docs/guides/text/responses/responses_simpleprompt.cs +++ b/docs/guides/text/responses/responses_simpleprompt.cs @@ -5,7 +5,7 @@ using OpenAI.Responses; -string key = Environment.GetEnvironmentVariable("OPENAI_KEY")!; +string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!; OpenAIResponseClient client = new("gpt-4.1", key); OpenAIResponse response = client.CreateResponse("Write a one-sentence bedtime story about a unicorn."); Console.WriteLine(response.GetOutputText()); \ No newline at end of file diff --git a/examples/Assistants/Example01_RetrievalAugmentedGeneration.cs b/examples/Assistants/Example01_RetrievalAugmentedGeneration.cs index 530f2b744..d79ce7e1b 100644 --- a/examples/Assistants/Example01_RetrievalAugmentedGeneration.cs +++ b/examples/Assistants/Example01_RetrievalAugmentedGeneration.cs @@ -8,13 +8,15 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] public void Example01_RetrievalAugmentedGeneration() { - // Assistants is a beta API and subject to change; acknowledge its experimental status by suppressing the matching warning. - #pragma warning disable OPENAI001 OpenAIClient openAIClient = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient(); AssistantClient assistantClient = openAIClient.GetAssistantClient(); @@ -146,3 +148,5 @@ CollectionResult messages _ = fileClient.DeleteFile(salesFile.Id); } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example01_RetrievalAugmentedGenerationAsync.cs b/examples/Assistants/Example01_RetrievalAugmentedGenerationAsync.cs index 7f07a57eb..faf54a7f5 100644 --- a/examples/Assistants/Example01_RetrievalAugmentedGenerationAsync.cs +++ b/examples/Assistants/Example01_RetrievalAugmentedGenerationAsync.cs @@ -9,13 +9,15 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] public async Task Example01_RetrievalAugmentedGenerationAsync() { - // Assistants is a beta API and subject to change; acknowledge its experimental status by suppressing the matching warning. - #pragma warning disable OPENAI001 OpenAIClient openAIClient = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient(); AssistantClient assistantClient = openAIClient.GetAssistantClient(); @@ -147,3 +149,5 @@ AsyncCollectionResult messages _ = await fileClient.DeleteFileAsync(salesFile.Id); } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example02_FunctionCalling.cs b/examples/Assistants/Example02_FunctionCalling.cs index 5efd1bcc3..7ef261f71 100644 --- a/examples/Assistants/Example02_FunctionCalling.cs +++ b/examples/Assistants/Example02_FunctionCalling.cs @@ -8,6 +8,10 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] @@ -187,3 +191,5 @@ CollectionResult messages #endregion } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example02_FunctionCallingAsync.cs b/examples/Assistants/Example02_FunctionCallingAsync.cs index d092a7981..31cf2d9f0 100644 --- a/examples/Assistants/Example02_FunctionCallingAsync.cs +++ b/examples/Assistants/Example02_FunctionCallingAsync.cs @@ -8,6 +8,10 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] @@ -187,3 +191,5 @@ AsyncCollectionResult messages #endregion } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example02b_FunctionCallingStreaming.cs b/examples/Assistants/Example02b_FunctionCallingStreaming.cs index e3d222d05..f0f3c11e8 100644 --- a/examples/Assistants/Example02b_FunctionCallingStreaming.cs +++ b/examples/Assistants/Example02b_FunctionCallingStreaming.cs @@ -8,6 +8,10 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] @@ -133,3 +137,5 @@ AsyncCollectionResult asyncUpdates _ = await client.DeleteAssistantAsync(assistant.Id, noThrowOptions); } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example03_ListAssistantsWithPagination.cs b/examples/Assistants/Example03_ListAssistantsWithPagination.cs index 339bb8afa..2e3c23237 100644 --- a/examples/Assistants/Example03_ListAssistantsWithPagination.cs +++ b/examples/Assistants/Example03_ListAssistantsWithPagination.cs @@ -2,10 +2,13 @@ using OpenAI.Assistants; using System; using System.ClientModel; -using System.Collections.Generic; namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] @@ -25,3 +28,5 @@ public void Example03_ListAssistantsWithPagination() } } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example03_ListAssistantsWithPaginationAsync.cs b/examples/Assistants/Example03_ListAssistantsWithPaginationAsync.cs index 7ae4808cf..0eea307d9 100644 --- a/examples/Assistants/Example03_ListAssistantsWithPaginationAsync.cs +++ b/examples/Assistants/Example03_ListAssistantsWithPaginationAsync.cs @@ -2,11 +2,14 @@ using OpenAI.Assistants; using System; using System.ClientModel; -using System.Collections.Generic; using System.Threading.Tasks; namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] @@ -26,3 +29,5 @@ public async Task Example03_ListAssistantsWithPaginationAsync() } } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example04_AllTheTools.cs b/examples/Assistants/Example04_AllTheTools.cs index 19f6199f1..cef179405 100644 --- a/examples/Assistants/Example04_AllTheTools.cs +++ b/examples/Assistants/Example04_AllTheTools.cs @@ -9,6 +9,10 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] @@ -201,3 +205,5 @@ CollectionResult messages #endregion } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example05_AssistantsWithVision.cs b/examples/Assistants/Example05_AssistantsWithVision.cs index 1be753bb1..5bdc8d9b7 100644 --- a/examples/Assistants/Example05_AssistantsWithVision.cs +++ b/examples/Assistants/Example05_AssistantsWithVision.cs @@ -7,13 +7,15 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] public void Example05_AssistantsWithVision() { - // Assistants is a beta API and subject to change; acknowledge its experimental status by suppressing the matching warning. - #pragma warning disable OPENAI001 OpenAIClient openAIClient = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient(); AssistantClient assistantClient = openAIClient.GetAssistantClient(); @@ -72,3 +74,5 @@ public void Example05_AssistantsWithVision() _ = assistantClient.DeleteAssistant(assistant.Id); } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Assistants/Example05_AssistantsWithVisionAsync.cs b/examples/Assistants/Example05_AssistantsWithVisionAsync.cs index ef69958e2..f25a86696 100644 --- a/examples/Assistants/Example05_AssistantsWithVisionAsync.cs +++ b/examples/Assistants/Example05_AssistantsWithVisionAsync.cs @@ -8,13 +8,15 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class AssistantExamples { [Test] public async Task Example05_AssistantsWithVisionAsync() { - // Assistants is a beta API and subject to change; acknowledge its experimental status by suppressing the matching warning. - #pragma warning disable OPENAI001 OpenAIClient openAIClient = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient(); AssistantClient assistantClient = openAIClient.GetAssistantClient(); @@ -72,3 +74,5 @@ public async Task Example05_AssistantsWithVisionAsync() _ = await assistantClient.DeleteAssistantAsync(assistant.Id); } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Chat/Example05_ChatWithVision.cs b/examples/Chat/Example05_ChatWithVision.cs new file mode 100644 index 000000000..aa4ab2e4a --- /dev/null +++ b/examples/Chat/Example05_ChatWithVision.cs @@ -0,0 +1,31 @@ +using NUnit.Framework; +using OpenAI.Chat; +using System; +using System.Collections.Generic; +using System.IO; + +namespace OpenAI.Examples; + +public partial class ChatExamples +{ + [Test] + public void Example05_ChatWithVision() + { + ChatClient client = new("gpt-4o", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + + string imageFilePath = Path.Combine("Assets", "images_dog_and_cat.png"); + using Stream imageStream = File.OpenRead(imageFilePath); + BinaryData imageBytes = BinaryData.FromStream(imageStream); + + List messages = + [ + new UserChatMessage( + ChatMessageContentPart.CreateTextPart("Please describe the following image."), + ChatMessageContentPart.CreateImagePart(imageBytes, "image/png")), + ]; + + ChatCompletion completion = client.CompleteChat(messages); + + Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}"); + } +} \ No newline at end of file diff --git a/examples/Chat/Example05_ChatWithVisionAsync.cs b/examples/Chat/Example05_ChatWithVisionAsync.cs new file mode 100644 index 000000000..a12fedc53 --- /dev/null +++ b/examples/Chat/Example05_ChatWithVisionAsync.cs @@ -0,0 +1,32 @@ +using NUnit.Framework; +using OpenAI.Chat; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; + +namespace OpenAI.Examples; + +public partial class ChatExamples +{ + [Test] + public async Task Example05_ChatWithVisionAsync() + { + ChatClient client = new("gpt-4o", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + + string imageFilePath = Path.Combine("Assets", "images_dog_and_cat.png"); + using Stream imageStream = File.OpenRead(imageFilePath); + BinaryData imageBytes = BinaryData.FromStream(imageStream); + + List messages = + [ + new UserChatMessage( + ChatMessageContentPart.CreateTextPart("Please describe the following image."), + ChatMessageContentPart.CreateImagePart(imageBytes, "image/png")), + ]; + + ChatCompletion completion = await client.CompleteChatAsync(messages); + + Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}"); + } +} \ No newline at end of file diff --git a/examples/Chat/Example05_Vision.cs b/examples/Chat/Example05_Vision.cs deleted file mode 100644 index ff1de911d..000000000 --- a/examples/Chat/Example05_Vision.cs +++ /dev/null @@ -1,31 +0,0 @@ -using NUnit.Framework; -using OpenAI.Chat; -using System; -using System.Collections.Generic; -using System.IO; - -namespace OpenAI.Examples; - -public partial class ChatExamples -{ - [Test] - public void Example05_Vision() - { - ChatClient client = new("gpt-4o", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); - - string imageFilePath = Path.Combine("Assets", "images_dog_and_cat.png"); - using Stream imageStream = File.OpenRead(imageFilePath); - BinaryData imageBytes = BinaryData.FromStream(imageStream); - - List messages = - [ - new UserChatMessage( - ChatMessageContentPart.CreateTextPart("Please describe the following image."), - ChatMessageContentPart.CreateImagePart(imageBytes, "image/png")), - ]; - - ChatCompletion completion = client.CompleteChat(messages); - - Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}"); - } -} \ No newline at end of file diff --git a/examples/Chat/Example05_VisionAsync.cs b/examples/Chat/Example05_VisionAsync.cs deleted file mode 100644 index f563c3050..000000000 --- a/examples/Chat/Example05_VisionAsync.cs +++ /dev/null @@ -1,32 +0,0 @@ -using NUnit.Framework; -using OpenAI.Chat; -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; - -namespace OpenAI.Examples; - -public partial class ChatExamples -{ - [Test] - public async Task Example05_VisionAsync() - { - ChatClient client = new("gpt-4o", Environment.GetEnvironmentVariable("OPENAI_API_KEY")); - - string imageFilePath = Path.Combine("Assets", "images_dog_and_cat.png"); - using Stream imageStream = File.OpenRead(imageFilePath); - BinaryData imageBytes = BinaryData.FromStream(imageStream); - - List messages = - [ - new UserChatMessage( - ChatMessageContentPart.CreateTextPart("Please describe the following image."), - ChatMessageContentPart.CreateImagePart(imageBytes, "image/png")), - ]; - - ChatCompletion completion = await client.CompleteChatAsync(messages); - - Console.WriteLine($"[ASSISTANT]: {completion.Content[0].Text}"); - } -} \ No newline at end of file diff --git a/examples/Chat/Example06_StructuredOutputs.cs b/examples/Chat/Example06_StructuredOutputs.cs index 718393313..3458e81db 100644 --- a/examples/Chat/Example06_StructuredOutputs.cs +++ b/examples/Chat/Example06_StructuredOutputs.cs @@ -26,19 +26,19 @@ public void Example06_StructuredOutputs() { "type": "object", "properties": { - "steps": { - "type": "array", - "items": { - "type": "object", - "properties": { - "explanation": { "type": "string" }, - "output": { "type": "string" } + "steps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "explanation": { "type": "string" }, + "output": { "type": "string" } + }, + "required": ["explanation", "output"], + "additionalProperties": false + } }, - "required": ["explanation", "output"], - "additionalProperties": false - } - }, - "final_answer": { "type": "string" } + "final_answer": { "type": "string" } }, "required": ["steps", "final_answer"], "additionalProperties": false diff --git a/examples/Chat/Example06_StructuredOutputsAsync.cs b/examples/Chat/Example06_StructuredOutputsAsync.cs index 47ede4913..ba10ecfdd 100644 --- a/examples/Chat/Example06_StructuredOutputsAsync.cs +++ b/examples/Chat/Example06_StructuredOutputsAsync.cs @@ -27,19 +27,19 @@ public async Task Example06_StructuredOutputsAsync() { "type": "object", "properties": { - "steps": { - "type": "array", - "items": { - "type": "object", - "properties": { - "explanation": { "type": "string" }, - "output": { "type": "string" } + "steps": { + "type": "array", + "items": { + "type": "object", + "properties": { + "explanation": { "type": "string" }, + "output": { "type": "string" } + }, + "required": ["explanation", "output"], + "additionalProperties": false + } }, - "required": ["explanation", "output"], - "additionalProperties": false - } - }, - "final_answer": { "type": "string" } + "final_answer": { "type": "string" } }, "required": ["steps", "final_answer"], "additionalProperties": false diff --git a/examples/Chat/Example09_ChatWithAudio.cs b/examples/Chat/Example09_ChatWithAudio.cs index b18ad79e2..4c1a4d851 100644 --- a/examples/Chat/Example09_ChatWithAudio.cs +++ b/examples/Chat/Example09_ChatWithAudio.cs @@ -6,6 +6,10 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class ChatExamples { [Test] @@ -61,3 +65,5 @@ void PrintAudioContent() PrintAudioContent(); } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Chat/Example09_ChatWithAudioAsync.cs b/examples/Chat/Example09_ChatWithAudioAsync.cs index 529c0c604..cfc84dce1 100644 --- a/examples/Chat/Example09_ChatWithAudioAsync.cs +++ b/examples/Chat/Example09_ChatWithAudioAsync.cs @@ -7,6 +7,10 @@ namespace OpenAI.Examples; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class ChatExamples { [Test] @@ -62,3 +66,5 @@ async Task PrintAudioContentAsync() await PrintAudioContentAsync(); } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/ClientExamples.cs b/examples/ClientExamples.cs index 8920b1e91..d1bdac223 100644 --- a/examples/ClientExamples.cs +++ b/examples/ClientExamples.cs @@ -37,6 +37,10 @@ public void CreateMultipleAudioClients() AudioClient whisperClient = client.GetAudioClient("whisper-1"); } +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + [Test] public void CreateAssistantAndFileClients() { @@ -44,4 +48,7 @@ public void CreateAssistantAndFileClients() OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient(); AssistantClient assistantClient = openAIClient.GetAssistantClient(); } + +#pragma warning restore OPENAI001 + } diff --git a/examples/MockClientExamples.cs b/examples/MockClientExamples.cs index 9b6bfd0b4..6970e8b9a 100644 --- a/examples/MockClientExamples.cs +++ b/examples/MockClientExamples.cs @@ -6,6 +6,10 @@ namespace OpenAI.Examples.Miscellaneous; +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + public partial class MockClientExamples { [Test] @@ -42,3 +46,5 @@ public bool ContainsSecretWord(AudioClient client, string audioFilePath, string return transcription.Text.Contains(secretWord); } } + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/OpenAI.Examples.csproj b/examples/OpenAI.Examples.csproj index cbdcde445..0bfb615aa 100644 --- a/examples/OpenAI.Examples.csproj +++ b/examples/OpenAI.Examples.csproj @@ -5,9 +5,6 @@ $(NoWarn);CS1591; - - $(NoWarn);OPENAI001; - latest diff --git a/examples/Realtime/Example01_AudioFromFileWithToolsAsync.cs b/examples/Realtime/Example01_AudioFromFileWithToolsAsync.cs index fbdfbb60f..ef1ba87ac 100644 --- a/examples/Realtime/Example01_AudioFromFileWithToolsAsync.cs +++ b/examples/Realtime/Example01_AudioFromFileWithToolsAsync.cs @@ -1,6 +1,6 @@ using NUnit.Framework; using OpenAI.Images; -using OpenAI.RealtimeConversation; +using OpenAI.Realtime; using System; using System.ClientModel; using System.Collections.Generic; @@ -17,10 +17,10 @@ public partial class RealtimeExamples [Test] public async Task Example01_AudioFromFileWithToolsAsync() { - RealtimeConversationClient client = new( - model: "gpt-4o-realtime-preview", + RealtimeClient client = new( credential: new ApiKeyCredential(Environment.GetEnvironmentVariable("OPENAI_API_KEY"))); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(); + using RealtimeSession session = await client.StartConversationSessionAsync( + model: "gpt-4o-realtime-preview"); // Session options control connection-wide behavior shared across all conversations, // including audio input format and voice activity detection settings. @@ -31,8 +31,8 @@ public async Task Example01_AudioFromFileWithToolsAsync() + "Prefer to call tools whenever applicable.", Voice = ConversationVoice.Alloy, Tools = { CreateSampleWeatherTool() }, - InputAudioFormat = ConversationAudioFormat.Pcm16, - OutputAudioFormat = ConversationAudioFormat.Pcm16, + InputAudioFormat = RealtimeAudioFormat.Pcm16, + OutputAudioFormat = RealtimeAudioFormat.Pcm16, // Input transcription options must be provided to enable transcribed feedback for input audio InputTranscriptionOptions = new() { @@ -40,12 +40,12 @@ public async Task Example01_AudioFromFileWithToolsAsync() }, }; - await session.ConfigureSessionAsync(sessionOptions); + await session.ConfigureConversationSessionAsync(sessionOptions); // Conversation history or text input are provided by adding messages to the conversation. // Adding a message will not automatically begin a response turn. await session.AddItemAsync( - ConversationItem.CreateUserMessage(["I'm trying to decide what to wear on my trip."])); + RealtimeItem.CreateUserMessage(["I'm trying to decide what to wear on my trip."])); string inputAudioPath = FindFile("Assets\\realtime_whats_the_weather_pcm16_24khz_mono.wav"); using Stream inputAudioStream = File.OpenRead(inputAudioPath); @@ -53,7 +53,7 @@ await session.AddItemAsync( Dictionary outputAudioStreamsById = []; - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync()) + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync()) { if (update is ConversationSessionStartedUpdate sessionStartedUpdate) { @@ -61,13 +61,13 @@ await session.AddItemAsync( Console.WriteLine(); } - if (update is ConversationInputSpeechStartedUpdate speechStartedUpdate) + if (update is InputAudioSpeechStartedUpdate speechStartedUpdate) { Console.WriteLine( $" -- Voice activity detection started at {speechStartedUpdate.AudioStartTime}"); } - if (update is ConversationInputSpeechFinishedUpdate speechFinishedUpdate) + if (update is InputAudioSpeechFinishedUpdate speechFinishedUpdate) { Console.WriteLine( $" -- Voice activity detection ended at {speechFinishedUpdate.AudioEndTime}"); @@ -75,7 +75,7 @@ await session.AddItemAsync( // Item started updates notify that the model generation process will insert a new item into // the conversation and begin streaming its content via content updates. - if (update is ConversationItemStreamingStartedUpdate itemStreamingStartedUpdate) + if (update is OutputStreamingStartedUpdate itemStreamingStartedUpdate) { Console.WriteLine($" -- Begin streaming of new item"); if (!string.IsNullOrEmpty(itemStreamingStartedUpdate.FunctionName)) @@ -84,7 +84,7 @@ await session.AddItemAsync( } } - if (update is ConversationItemStreamingPartDeltaUpdate deltaUpdate) + if (update is OutputDeltaUpdate deltaUpdate) { // With audio output enabled, the audio transcript of the delta update contains an approximation of // the words spoken by the model. Without audio output, the text of the delta update will contain @@ -108,7 +108,7 @@ await session.AddItemAsync( // Item finished updates arrive when all streamed data for an item has arrived and the // accumulated results are available. In the case of function calls, this is the point // where all arguments are expected to be present. - if (update is ConversationItemStreamingFinishedUpdate itemStreamingFinishedUpdate) + if (update is OutputStreamingFinishedUpdate itemStreamingFinishedUpdate) { Console.WriteLine(); Console.WriteLine($" -- Item streaming finished, item_id={itemStreamingFinishedUpdate.ItemId}"); @@ -116,7 +116,7 @@ await session.AddItemAsync( if (itemStreamingFinishedUpdate.FunctionCallId is not null) { Console.WriteLine($" + Responding to tool invoked by item: {itemStreamingFinishedUpdate.FunctionName}"); - ConversationItem functionOutputItem = ConversationItem.CreateFunctionCallOutput( + RealtimeItem functionOutputItem = RealtimeItem.CreateFunctionCallOutput( callId: itemStreamingFinishedUpdate.FunctionCallId, output: "70 degrees Fahrenheit and sunny"); await session.AddItemAsync(functionOutputItem); @@ -132,14 +132,14 @@ await session.AddItemAsync( } } - if (update is ConversationInputTranscriptionFinishedUpdate transcriptionCompletedUpdate) + if (update is InputAudioTranscriptionFinishedUpdate transcriptionCompletedUpdate) { Console.WriteLine(); Console.WriteLine($" -- User audio transcript: {transcriptionCompletedUpdate.Transcript}"); Console.WriteLine(); } - if (update is ConversationResponseFinishedUpdate turnFinishedUpdate) + if (update is ResponseFinishedUpdate turnFinishedUpdate) { Console.WriteLine($" -- Model turn generation finished. Status: {turnFinishedUpdate.Status}"); @@ -157,7 +157,7 @@ await session.AddItemAsync( } } - if (update is ConversationErrorUpdate errorUpdate) + if (update is RealtimeErrorUpdate errorUpdate) { Console.WriteLine(); Console.WriteLine($"ERROR: {errorUpdate.Message}"); @@ -212,3 +212,5 @@ private static string FindFile(string fileName) throw new FileNotFoundException($"File '{fileName}' not found."); } } + +#pragma warning restore OPENAI002 \ No newline at end of file diff --git a/examples/Responses/Example01_HelloWorld.cs b/examples/Responses/Example01_HelloWorld.cs deleted file mode 100644 index 2129d9c2a..000000000 --- a/examples/Responses/Example01_HelloWorld.cs +++ /dev/null @@ -1,18 +0,0 @@ -using NUnit.Framework; -using OpenAI.Responses; -using System; - -namespace OpenAI.Examples; - -public partial class ResponseExamples -{ - [Test] - public void Example01_HelloWorld() - { - OpenAIResponseClient client = new(model: "gpt-4o", apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")); - - OpenAIResponse response = client.CreateResponse("Say 'this is a test.'"); - - Console.WriteLine($"[ASSISTANT]: {response.GetOutputText()}"); - } -} diff --git a/examples/Responses/Example01_HelloWorldAsync.cs b/examples/Responses/Example01_HelloWorldAsync.cs deleted file mode 100644 index bdbf538f8..000000000 --- a/examples/Responses/Example01_HelloWorldAsync.cs +++ /dev/null @@ -1,19 +0,0 @@ -using NUnit.Framework; -using OpenAI.Responses; -using System; -using System.Threading.Tasks; - -namespace OpenAI.Examples; - -public partial class ResponseExamples -{ - [Test] - public async Task Example01_HelloWorldAsync() - { - OpenAIResponseClient client = new(model: "gpt-4o", apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")); - - OpenAIResponse response = await client.CreateResponseAsync("Say 'this is a test.'"); - - Console.WriteLine($"[ASSISTANT]: {response.GetOutputText()}"); - } -} diff --git a/examples/Responses/Example01_SimpleResponse.cs b/examples/Responses/Example01_SimpleResponse.cs new file mode 100644 index 000000000..75dbed1c3 --- /dev/null +++ b/examples/Responses/Example01_SimpleResponse.cs @@ -0,0 +1,24 @@ +using NUnit.Framework; +using OpenAI.Responses; +using System; + +namespace OpenAI.Examples; + +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + +public partial class ResponseExamples +{ + [Test] + public void Example01_SimpleResponse() + { + OpenAIResponseClient client = new(model: "gpt-4o", apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + + OpenAIResponse response = client.CreateResponse("Say 'this is a test.'"); + + Console.WriteLine($"[ASSISTANT]: {response.GetOutputText()}"); + } +} + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Responses/Example01_SimpleResponseAsync.cs b/examples/Responses/Example01_SimpleResponseAsync.cs new file mode 100644 index 000000000..6faa8d039 --- /dev/null +++ b/examples/Responses/Example01_SimpleResponseAsync.cs @@ -0,0 +1,25 @@ +using NUnit.Framework; +using OpenAI.Responses; +using System; +using System.Threading.Tasks; + +namespace OpenAI.Examples; + +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + +public partial class ResponseExamples +{ + [Test] + public async Task Example01_SimpleResponseAsync() + { + OpenAIResponseClient client = new(model: "gpt-4o", apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + + OpenAIResponse response = await client.CreateResponseAsync("Say 'this is a test.'"); + + Console.WriteLine($"[ASSISTANT]: {response.GetOutputText()}"); + } +} + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Responses/Example02_HelloWorldStreaming.cs b/examples/Responses/Example02_HelloWorldStreaming.cs deleted file mode 100644 index debbfbbf2..000000000 --- a/examples/Responses/Example02_HelloWorldStreaming.cs +++ /dev/null @@ -1,34 +0,0 @@ -using NUnit.Framework; -using OpenAI.Responses; -using System; - -namespace OpenAI.Examples; - -public partial class ResponseExamples -{ - [Test] - public void Example02_HelloWorldStreaming() - { - OpenAIResponseClient client = new( - model: "gpt-4o-mini", - apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")); - - Console.Write($"Streaming text: "); - - foreach (StreamingResponseUpdate update - in client.CreateResponseStreaming("Hello, world!")) - { - if (update is StreamingResponseOutputTextDeltaUpdate outputTextUpdate) - { - // Streamed text will arrive as it's generated via delta events - Console.Write(outputTextUpdate.Delta); - } - else if (update is StreamingResponseCompletedUpdate responseCompletedUpdate) - { - // Item and response completed events have aggregated text available - Console.WriteLine(); - Console.WriteLine($"Final text: {responseCompletedUpdate.Response.GetOutputText()}"); - } - } - } -} diff --git a/examples/Responses/Example02_HelloWorldStreamingAsync.cs b/examples/Responses/Example02_HelloWorldStreamingAsync.cs deleted file mode 100644 index 831d3af17..000000000 --- a/examples/Responses/Example02_HelloWorldStreamingAsync.cs +++ /dev/null @@ -1,35 +0,0 @@ -using NUnit.Framework; -using OpenAI.Responses; -using System; -using System.Threading.Tasks; - -namespace OpenAI.Examples; - -public partial class ResponseExamples -{ - [Test] - public async Task Example02_HelloWorldStreamingAsync() - { - OpenAIResponseClient client = new( - model: "gpt-4o-mini", - apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")); - - Console.Write($"Streaming text: "); - - await foreach (StreamingResponseUpdate update - in client.CreateResponseStreamingAsync("Hello, world!")) - { - if (update is StreamingResponseOutputTextDeltaUpdate outputTextUpdate) - { - // Streamed text will arrive as it's generated via delta events - Console.Write(outputTextUpdate.Delta); - } - else if (update is StreamingResponseCompletedUpdate responseCompletedUpdate) - { - // Item and response completed events have aggregated text available - Console.WriteLine(); - Console.WriteLine($"Final text: {responseCompletedUpdate.Response.GetOutputText()}"); - } - } - } -} diff --git a/examples/Responses/Example02_SimpleResponseStreaming.cs b/examples/Responses/Example02_SimpleResponseStreaming.cs new file mode 100644 index 000000000..bb4672d5c --- /dev/null +++ b/examples/Responses/Example02_SimpleResponseStreaming.cs @@ -0,0 +1,32 @@ +using NUnit.Framework; +using OpenAI.Responses; +using System; +using System.ClientModel; + +namespace OpenAI.Examples; + +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. +#pragma warning disable OPENAI001 + +public partial class ResponseExamples +{ + [Test] + public void Example02_SimpleResponseStreaming() + { + OpenAIResponseClient client = new(model: "gpt-4o-mini", apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + + CollectionResult responseUpdates = client.CreateResponseStreaming("Say 'this is a test.'"); + + Console.Write($"[ASSISTANT]: "); + foreach (StreamingResponseUpdate update in responseUpdates) + { + if (update is StreamingResponseOutputTextDeltaUpdate outputTextUpdate) + { + Console.Write(outputTextUpdate.Delta); + } + } + } +} + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/examples/Responses/Example02_SimpleResponseStreamingAsync.cs b/examples/Responses/Example02_SimpleResponseStreamingAsync.cs new file mode 100644 index 000000000..529ddbf24 --- /dev/null +++ b/examples/Responses/Example02_SimpleResponseStreamingAsync.cs @@ -0,0 +1,34 @@ +using NUnit.Framework; +using OpenAI.Responses; +using System; +using System.ClientModel; +using System.Threading.Tasks; + +namespace OpenAI.Examples; + +// This example uses experimental APIs which are subject to change. To use experimental APIs, +// please acknowledge their experimental status by suppressing the corresponding warning. + +#pragma warning disable OPENAI001 + +public partial class ResponseExamples +{ + [Test] + public async Task Example02_SimpleResponseStreamingAsync() + { + OpenAIResponseClient client = new(model: "gpt-4o-mini", apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + + AsyncCollectionResult responseUpdates = client.CreateResponseStreamingAsync("Say 'this is a test.'"); + + Console.Write($"[ASSISTANT]: "); + await foreach (StreamingResponseUpdate update in responseUpdates) + { + if (update is StreamingResponseOutputTextDeltaUpdate outputTextUpdate) + { + Console.Write(outputTextUpdate.Delta); + } + } + } +} + +#pragma warning restore OPENAI001 \ No newline at end of file diff --git a/src/Custom/Assistants/Assistant.cs b/src/Custom/Assistants/Assistant.cs index ba12c4a82..5a8c27ffe 100644 --- a/src/Custom/Assistants/Assistant.cs +++ b/src/Custom/Assistants/Assistant.cs @@ -1,4 +1,7 @@ +using System.ClientModel; +using System.ClientModel.Primitives; using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.Assistants; @@ -6,10 +9,12 @@ namespace OpenAI.Assistants; [CodeGenType("AssistantObject")] public partial class Assistant { + private const string AssistantValue = "assistant"; + // CUSTOM: Made internal. /// The object type, which is always `assistant`. [CodeGenMember("Object")] - internal InternalAssistantObjectObject Object { get; } = InternalAssistantObjectObject.Assistant; + internal string Object { get; } = AssistantValue; /// public AssistantResponseFormat ResponseFormat { get; } @@ -21,4 +26,11 @@ public partial class Assistant /// [CodeGenMember("TopP")] public float? NucleusSamplingFactor { get; } + + internal static Assistant FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeAssistant(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Assistants/AssistantClient.cs b/src/Custom/Assistants/AssistantClient.cs index 4aee9923d..599addd27 100644 --- a/src/Custom/Assistants/AssistantClient.cs +++ b/src/Custom/Assistants/AssistantClient.cs @@ -22,8 +22,8 @@ namespace OpenAI.Assistants; [CodeGenSuppress("ModifyAssistant", typeof(string), typeof(AssistantModificationOptions))] [CodeGenSuppress("DeleteAssistantAsync", typeof(string))] [CodeGenSuppress("DeleteAssistant", typeof(string))] -[CodeGenSuppress("ListAssistantsAsync", typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListAssistants", typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetAssistantsAsync", typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetAssistants", typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] public partial class AssistantClient { private readonly InternalAssistantMessageClient _messageSubClient; @@ -98,8 +98,8 @@ public virtual async Task> CreateAssistantAsync(string m options ??= new(); options.Model = model; - ClientResult protocolResult = await CreateAssistantAsync(options, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((Assistant)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = await CreateAssistantAsync(options?.ToBinaryContent(), cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return ClientResult.FromValue(Assistant.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// Creates a new assistant. @@ -113,8 +113,8 @@ public virtual ClientResult CreateAssistant(string model, AssistantCr options ??= new(); options.Model = model; - ClientResult protocolResult = CreateAssistant(options, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((Assistant)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = CreateAssistant(options?.ToBinaryContent(), cancellationToken.ToRequestOptions()); + return ClientResult.FromValue(Assistant.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -214,7 +214,7 @@ public virtual async Task> GetAssistantAsync(string assi Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); ClientResult protocolResult = await GetAssistantAsync(assistantId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((Assistant)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(Assistant.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -228,7 +228,7 @@ public virtual ClientResult GetAssistant(string assistantId, Cancella Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); ClientResult protocolResult = GetAssistant(assistantId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((Assistant)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(Assistant.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -243,10 +243,10 @@ public virtual async Task> ModifyAssistantAsync(string a Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); Argument.AssertNotNull(options, nameof(options)); - using BinaryContent content = options; + using BinaryContent content = options?.ToBinaryContent(); ClientResult protocolResult = await ModifyAssistantAsync(assistantId, content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((Assistant)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(Assistant.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -261,9 +261,9 @@ public virtual ClientResult ModifyAssistant(string assistantId, Assis Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); Argument.AssertNotNull(options, nameof(options)); - using BinaryContent content = options; + using BinaryContent content = options?.ToBinaryContent(); ClientResult protocolResult = ModifyAssistant(assistantId, content, null); - return ClientResult.FromValue((Assistant)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(Assistant.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -277,7 +277,7 @@ public virtual async Task> DeleteAssistant Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); ClientResult protocolResult = await DeleteAssistantAsync(assistantId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((AssistantDeletionResult)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(AssistantDeletionResult.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -291,7 +291,7 @@ public virtual ClientResult DeleteAssistant(string assi Argument.AssertNotNullOrEmpty(assistantId, nameof(assistantId)); ClientResult protocolResult = DeleteAssistant(assistantId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((AssistantDeletionResult)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(AssistantDeletionResult.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -302,8 +302,8 @@ public virtual ClientResult DeleteAssistant(string assi /// A new thread. public virtual async Task> CreateThreadAsync(ThreadCreationOptions options = null, CancellationToken cancellationToken = default) { - ClientResult protocolResult = await CreateThreadAsync(options, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((AssistantThread)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = await CreateThreadAsync(options?.ToBinaryContent(), cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return ClientResult.FromValue(AssistantThread.FromClientResult(protocolResult), protocolResult.GetRawResponse());; } /// @@ -314,8 +314,8 @@ public virtual async Task> CreateThreadAsync(Threa /// A new thread. public virtual ClientResult CreateThread(ThreadCreationOptions options = null, CancellationToken cancellationToken = default) { - ClientResult protocolResult = CreateThread(options, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((AssistantThread)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = CreateThread(options?.ToBinaryContent(), cancellationToken.ToRequestOptions()); + return ClientResult.FromValue(AssistantThread.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -329,7 +329,7 @@ public virtual async Task> GetThreadAsync(string t Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); ClientResult protocolResult = await GetThreadAsync(threadId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((AssistantThread)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(AssistantThread.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -343,7 +343,7 @@ public virtual ClientResult GetThread(string threadId, Cancella Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); ClientResult protocolResult = GetThread(threadId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((AssistantThread)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(AssistantThread.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -358,8 +358,8 @@ public virtual async Task> ModifyThreadAsync(strin Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); Argument.AssertNotNull(options, nameof(options)); - ClientResult protocolResult = await ModifyThreadAsync(threadId, options, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((AssistantThread)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = await ModifyThreadAsync(threadId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return ClientResult.FromValue(AssistantThread.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -374,8 +374,8 @@ public virtual ClientResult ModifyThread(string threadId, Threa Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); Argument.AssertNotNull(options, nameof(options)); - ClientResult protocolResult = ModifyThread(threadId, options, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((AssistantThread)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = ModifyThread(threadId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions()); + return ClientResult.FromValue(AssistantThread.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -389,7 +389,7 @@ public virtual async Task> DeleteThreadAsync( Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); ClientResult protocolResult = await DeleteThreadAsync(threadId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((ThreadDeletionResult)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadDeletionResult.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -403,7 +403,7 @@ public virtual ClientResult DeleteThread(string threadId, Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); ClientResult protocolResult = DeleteThread(threadId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadDeletionResult)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadDeletionResult.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -431,9 +431,9 @@ public virtual async Task> CreateMessageAsync( options.Content.Add(contentItem); } - ClientResult protocolResult = await CreateMessageAsync(threadId, options, cancellationToken.ToRequestOptions()) + ClientResult protocolResult = await CreateMessageAsync(threadId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions()) .ConfigureAwait(false); - return ClientResult.FromValue((ThreadMessage)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadMessage.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -461,8 +461,8 @@ public virtual ClientResult CreateMessage( options.Content.Add(contentItem); } - ClientResult protocolResult = CreateMessage(threadId, options, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadMessage)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = CreateMessage(threadId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions()); + return ClientResult.FromValue(ThreadMessage.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -573,7 +573,7 @@ public virtual async Task> GetMessageAsync(string th Argument.AssertNotNullOrEmpty(messageId, nameof(messageId)); ClientResult protocolResult = await GetMessageAsync(threadId, messageId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((ThreadMessage)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadMessage.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -589,7 +589,7 @@ public virtual ClientResult GetMessage(string threadId, string me Argument.AssertNotNullOrEmpty(messageId, nameof(messageId)); ClientResult protocolResult = GetMessage(threadId, messageId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadMessage)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadMessage.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -606,9 +606,9 @@ public virtual async Task> ModifyMessageAsync(string Argument.AssertNotNullOrEmpty(messageId, nameof(messageId)); Argument.AssertNotNull(options, nameof(options)); - ClientResult protocolResult = await ModifyMessageAsync(threadId, messageId, options, cancellationToken.ToRequestOptions()) + ClientResult protocolResult = await ModifyMessageAsync(threadId, messageId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions()) .ConfigureAwait(false); - return ClientResult.FromValue((ThreadMessage)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadMessage.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -625,8 +625,8 @@ public virtual ClientResult ModifyMessage(string threadId, string Argument.AssertNotNullOrEmpty(messageId, nameof(messageId)); Argument.AssertNotNull(options, nameof(options)); - ClientResult protocolResult = ModifyMessage(threadId, messageId, options, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadMessage)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = ModifyMessage(threadId, messageId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions()); + return ClientResult.FromValue(ThreadMessage.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -642,7 +642,7 @@ public virtual async Task> DeleteMessageAsyn Argument.AssertNotNullOrEmpty(messageId, nameof(messageId)); ClientResult protocolResult = await DeleteMessageAsync(threadId, messageId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((MessageDeletionResult)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(MessageDeletionResult.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -658,7 +658,7 @@ public virtual ClientResult DeleteMessage(string threadId Argument.AssertNotNullOrEmpty(messageId, nameof(messageId)); ClientResult protocolResult = DeleteMessage(threadId, messageId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((MessageDeletionResult)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(MessageDeletionResult.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -678,9 +678,9 @@ public virtual async Task> CreateRunAsync(string threadI options.AssistantId = assistantId; options.Stream = null; - ClientResult protocolResult = await CreateRunAsync(threadId, options, cancellationToken.ToRequestOptions()) + ClientResult protocolResult = await CreateRunAsync(threadId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions()) .ConfigureAwait(false); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -700,8 +700,8 @@ public virtual ClientResult CreateRun(string threadId, string assista options.AssistantId = assistantId; options.Stream = null; - ClientResult protocolResult = CreateRun(threadId, options, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + ClientResult protocolResult = CreateRun(threadId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -726,7 +726,7 @@ public virtual AsyncCollectionResult CreateRunStreamingAsync( options.Stream = true; return new AsyncSseUpdateCollection( - async () => await CreateRunAsync(threadId, options, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + async () => await CreateRunAsync(threadId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), StreamingUpdate.FromSseItem, cancellationToken); } @@ -753,7 +753,7 @@ public virtual CollectionResult CreateRunStreaming( options.Stream = true; return new SseUpdateCollection( - () => CreateRun(threadId, options, cancellationToken.ToRequestOptions(streaming: true)), + () => CreateRun(threadId, options?.ToBinaryContent(), cancellationToken.ToRequestOptions(streaming: true)), StreamingUpdate.FromSseItem, cancellationToken); } @@ -776,7 +776,7 @@ public virtual async Task> CreateThreadAndRunAsync( runOptions.Stream = null; BinaryContent protocolContent = CreateThreadAndRunProtocolContent(assistantId, threadOptions, runOptions); ClientResult protocolResult = await CreateThreadAndRunAsync(protocolContent, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -797,7 +797,7 @@ public virtual ClientResult CreateThreadAndRun( runOptions.Stream = null; BinaryContent protocolContent = CreateThreadAndRunProtocolContent(assistantId, threadOptions, runOptions); ClientResult protocolResult = CreateThreadAndRun(protocolContent, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -957,7 +957,7 @@ public virtual async Task> GetRunAsync(string threadId, Argument.AssertNotNullOrEmpty(runId, nameof(runId)); ClientResult protocolResult = await GetRunAsync(threadId, runId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -973,7 +973,7 @@ public virtual ClientResult GetRun(string threadId, string runId, Can Argument.AssertNotNullOrEmpty(runId, nameof(runId)); ClientResult protocolResult = GetRun(threadId, runId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -995,10 +995,11 @@ public virtual async Task> SubmitToolOutputsToRunAsync( Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs); + var submitToolOutputsRunRequest = new InternalSubmitToolOutputsRunRequest(toolOutputs); + using BinaryContent content = BinaryContent.Create(submitToolOutputsRunRequest, ModelSerializationExtensions.WireOptions); ClientResult protocolResult = await SubmitToolOutputsToRunAsync(threadId, runId, content, cancellationToken.ToRequestOptions()) .ConfigureAwait(false); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -1020,9 +1021,10 @@ public virtual ClientResult SubmitToolOutputsToRun( Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs); + var submitToolOutputsRunRequest = new InternalSubmitToolOutputsRunRequest(toolOutputs); + using BinaryContent content = BinaryContent.Create(submitToolOutputsRunRequest, ModelSerializationExtensions.WireOptions); ClientResult protocolResult = SubmitToolOutputsToRun(threadId, runId, content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -1043,7 +1045,8 @@ public virtual AsyncCollectionResult SubmitToolOutputsToRunStre Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs.ToList(), stream: true, null); + var submitToolOutputsRunRequest = new InternalSubmitToolOutputsRunRequest(toolOutputs.ToList(), stream: true, null); + using BinaryContent content = BinaryContent.Create(submitToolOutputsRunRequest, ModelSerializationExtensions.WireOptions); return new AsyncSseUpdateCollection( async () => await SubmitToolOutputsToRunAsync(threadId, runId, content, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), @@ -1069,7 +1072,8 @@ public virtual CollectionResult SubmitToolOutputsToRunStreaming Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); Argument.AssertNotNullOrEmpty(runId, nameof(runId)); - BinaryContent content = new InternalSubmitToolOutputsRunRequest(toolOutputs.ToList(), stream: true, null); + var submitToolOutputsRunRequest = new InternalSubmitToolOutputsRunRequest(toolOutputs.ToList(), stream: true, null); + using BinaryContent content = BinaryContent.Create(submitToolOutputsRunRequest, ModelSerializationExtensions.WireOptions); return new SseUpdateCollection( () => SubmitToolOutputsToRun(threadId, runId, content, cancellationToken.ToRequestOptions(streaming: true)), @@ -1090,7 +1094,7 @@ public virtual async Task> CancelRunAsync(string threadI Argument.AssertNotNullOrEmpty(runId, nameof(runId)); ClientResult protocolResult = await CancelRunAsync(threadId, runId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -1106,7 +1110,7 @@ public virtual ClientResult CancelRun(string threadId, string runId, Argument.AssertNotNullOrEmpty(runId, nameof(runId)); ClientResult protocolResult = CancelRun(threadId, runId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ThreadRun)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(ThreadRun.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -1214,7 +1218,7 @@ public virtual CollectionResult GetRunSteps( public virtual async Task> GetRunStepAsync(string threadId, string runId, string stepId, CancellationToken cancellationToken = default) { ClientResult protocolResult = await GetRunStepAsync(threadId, runId, stepId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((RunStep)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(RunStep.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } /// @@ -1228,7 +1232,7 @@ public virtual async Task> GetRunStepAsync(string threadId public virtual ClientResult GetRunStep(string threadId, string runId, string stepId, CancellationToken cancellationToken = default) { ClientResult protocolResult = GetRunStep(threadId, runId, stepId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((RunStep)protocolResult, protocolResult.GetRawResponse()); + return ClientResult.FromValue(RunStep.FromClientResult(protocolResult), protocolResult.GetRawResponse()); } private static BinaryContent CreateThreadAndRunProtocolContent( @@ -1256,7 +1260,7 @@ private static BinaryContent CreateThreadAndRunProtocolContent( runOptions.ResponseFormat, runOptions.ToolConstraint, additionalBinaryDataProperties: null); - return internalRequest; + return BinaryContent.Create(internalRequest, ModelSerializationExtensions.WireOptions); } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/Custom/Assistants/AssistantCreationOptions.cs b/src/Custom/Assistants/AssistantCreationOptions.cs index 461044410..f3439adbb 100644 --- a/src/Custom/Assistants/AssistantCreationOptions.cs +++ b/src/Custom/Assistants/AssistantCreationOptions.cs @@ -1,4 +1,5 @@ using OpenAI.Chat; +using System.ClientModel; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -9,6 +10,7 @@ namespace OpenAI.Assistants; /// [Experimental("OPENAI001")] [CodeGenType("CreateAssistantRequest")] +[CodeGenVisibility(nameof(AssistantCreationOptions), CodeGenVisibility.Public)] [CodeGenSuppress(nameof(AssistantCreationOptions), typeof(string))] public partial class AssistantCreationOptions { @@ -22,7 +24,7 @@ public partial class AssistantCreationOptions /// There can be a maximum of 128 tools per assistant. Tools can be of types `code_interpreter`, `file_search`, or `function`. /// [CodeGenMember("Tools")] - public IList Tools { get; } = new ChangeTrackingList(); + public IList Tools { get; } /// [CodeGenMember("ToolResources")] @@ -44,12 +46,5 @@ public partial class AssistantCreationOptions [CodeGenMember("ReasoningEffort")] internal ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } - /// - /// Creates a new instance of . - /// - public AssistantCreationOptions() - { - Metadata = new ChangeTrackingDictionary(); - Tools = new ChangeTrackingList(); - } + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Assistants/AssistantDeletionResult.cs b/src/Custom/Assistants/AssistantDeletionResult.cs index cdec0e457..0d0a43d1f 100644 --- a/src/Custom/Assistants/AssistantDeletionResult.cs +++ b/src/Custom/Assistants/AssistantDeletionResult.cs @@ -1,4 +1,7 @@ -using System.Diagnostics.CodeAnalysis; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.Assistants; @@ -13,5 +16,12 @@ public partial class AssistantDeletionResult // CUSTOM: Made internal. /// The object type, which is always `assistant.deleted`. [CodeGenMember("Object")] - internal InternalDeleteAssistantResponseObject Object { get; } = InternalDeleteAssistantResponseObject.AssistantDeleted; + internal string Object { get; } = "assistant.deleted"; + + internal static AssistantDeletionResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeAssistantDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Assistants/AssistantModificationOptions.cs b/src/Custom/Assistants/AssistantModificationOptions.cs index 2d69ce463..16fd86b07 100644 --- a/src/Custom/Assistants/AssistantModificationOptions.cs +++ b/src/Custom/Assistants/AssistantModificationOptions.cs @@ -1,4 +1,5 @@ using OpenAI.Chat; +using System.ClientModel; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -23,7 +24,7 @@ public partial class AssistantModificationOptions /// There can be a maximum of 128 tools per assistant. Tools can be of types `code_interpreter`, `file_search`, or `function`. /// [CodeGenMember("Tools")] - public IList DefaultTools { get; } = new ChangeTrackingList(); + public IList DefaultTools { get; } // CUSTOM: reuse common request/response models for tool resources. Note that modification operations use the // response models (which do not contain resource initialization helpers). @@ -47,4 +48,6 @@ public partial class AssistantModificationOptions // CUSTOM: Made internal. [CodeGenMember("ReasoningEffort")] internal ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Assistants/AssistantResponseFormat.Serialization.cs b/src/Custom/Assistants/AssistantResponseFormat.Serialization.cs index 363c33eab..c3c8421d2 100644 --- a/src/Custom/Assistants/AssistantResponseFormat.Serialization.cs +++ b/src/Custom/Assistants/AssistantResponseFormat.Serialization.cs @@ -25,10 +25,10 @@ internal static AssistantResponseFormat DeserializeAssistantResponseFormat(JsonE JsonValueKind.Object when element.TryGetProperty("type", out JsonElement discriminatorElement) => discriminatorElement.GetString() switch { - "json_object" => InternalAssistantResponseFormatJsonObject.DeserializeInternalAssistantResponseFormatJsonObject(element, options), - "json_schema" => InternalAssistantResponseFormatJsonSchema.DeserializeInternalAssistantResponseFormatJsonSchema(element, options), - "text" => InternalAssistantResponseFormatText.DeserializeInternalAssistantResponseFormatText(element, options), - _ => null, + "json_object" => InternalDotNetAssistantResponseFormatJsonObject.DeserializeInternalDotNetAssistantResponseFormatJsonObject(element, options), + "json_schema" => InternalDotNetAssistantResponseFormatJsonSchema.DeserializeInternalDotNetAssistantResponseFormatJsonSchema(element, options), + "text" => InternalDotNetAssistantResponseFormatText.DeserializeInternalDotNetAssistantResponseFormatText(element, options), + _ => InternalUnknownDotNetAssistantResponseFormat.DeserializeInternalUnknownDotNetAssistantResponseFormat(element, options), }, _ => null, }; diff --git a/src/Custom/Assistants/AssistantResponseFormat.cs b/src/Custom/Assistants/AssistantResponseFormat.cs index c25bf8078..40875a366 100644 --- a/src/Custom/Assistants/AssistantResponseFormat.cs +++ b/src/Custom/Assistants/AssistantResponseFormat.cs @@ -1,4 +1,3 @@ -using OpenAI.Internal; using System; using System.ClientModel.Primitives; using System.ComponentModel; @@ -7,7 +6,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] -[CodeGenType("AssistantResponseFormat")] +[CodeGenType("DotNetAssistantResponseFormat")] public partial class AssistantResponseFormat : IEquatable, IEquatable { public static AssistantResponseFormat Auto { get; } = CreateAutoFormat(); @@ -17,9 +16,9 @@ public partial class AssistantResponseFormat : IEquatable new InternalAssistantResponseFormatPlainTextNoObject("auto"); public static AssistantResponseFormat CreateTextFormat() - => new InternalAssistantResponseFormatText(); + => new InternalDotNetAssistantResponseFormatText(); public static AssistantResponseFormat CreateJsonObjectFormat() - => new InternalAssistantResponseFormatJsonObject(); + => new InternalDotNetAssistantResponseFormatJsonObject(); public static AssistantResponseFormat CreateJsonSchemaFormat( string name, BinaryData jsonSchema, @@ -29,13 +28,13 @@ public static AssistantResponseFormat CreateJsonSchemaFormat( Argument.AssertNotNullOrEmpty(name, nameof(name)); Argument.AssertNotNull(jsonSchema, nameof(jsonSchema)); - InternalResponseFormatJsonSchemaJsonSchema internalSchema = new( + InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema internalSchema = new( description, name, - strictSchemaEnabled, jsonSchema, + strictSchemaEnabled, null); - return new InternalAssistantResponseFormatJsonSchema(internalSchema); + return new InternalDotNetAssistantResponseFormatJsonSchema(internalSchema); } [EditorBrowsable(EditorBrowsableState.Never)] @@ -83,10 +82,10 @@ bool IEquatable.Equals(AssistantResponseFormat other) (this is InternalAssistantResponseFormatPlainTextNoObject thisPlainText && other is InternalAssistantResponseFormatPlainTextNoObject otherPlainText && thisPlainText.Value.Equals(otherPlainText.Value)) - || (this is InternalAssistantResponseFormatText && other is InternalAssistantResponseFormatText) - || (this is InternalAssistantResponseFormatJsonObject && other is InternalAssistantResponseFormatJsonObject) - || (this is InternalAssistantResponseFormatJsonSchema thisJsonSchema - && other is InternalAssistantResponseFormatJsonSchema otherJsonSchema + || (this is InternalDotNetAssistantResponseFormatText && other is InternalDotNetAssistantResponseFormatText) + || (this is InternalDotNetAssistantResponseFormatJsonObject && other is InternalDotNetAssistantResponseFormatJsonObject) + || (this is InternalDotNetAssistantResponseFormatJsonSchema thisJsonSchema + && other is InternalDotNetAssistantResponseFormatJsonSchema otherJsonSchema && thisJsonSchema.JsonSchema.Name.Equals(otherJsonSchema.JsonSchema.Name)); } diff --git a/src/Custom/Assistants/AssistantThread.cs b/src/Custom/Assistants/AssistantThread.cs index d1c2b68c1..67556813f 100644 --- a/src/Custom/Assistants/AssistantThread.cs +++ b/src/Custom/Assistants/AssistantThread.cs @@ -1,4 +1,7 @@ +using System.ClientModel; +using System.ClientModel.Primitives; using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.Assistants; @@ -9,7 +12,7 @@ public partial class AssistantThread // CUSTOM: Made internal. /// The object type, which is always `thread`. [CodeGenMember("Object")] - internal InternalThreadObjectObject Object { get; } = InternalThreadObjectObject.Thread; + internal string Object { get; } = "thread"; /// @@ -18,4 +21,11 @@ public partial class AssistantThread /// For example, the `code_interpreter` tool requires a list of file IDs, while the `file_search` tool requires a list of vector store IDs. /// public ToolResources ToolResources { get; } + + internal static AssistantThread FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeAssistantThread(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Assistants/CodeInterpreterToolDefinition.Serialization.cs b/src/Custom/Assistants/CodeInterpreterToolDefinition.Serialization.cs deleted file mode 100644 index c388480eb..000000000 --- a/src/Custom/Assistants/CodeInterpreterToolDefinition.Serialization.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -public partial class CodeInterpreterToolDefinition : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeCodeInterpreterToolDefinition, writer, options); - - internal static void SerializeCodeInterpreterToolDefinition(CodeInterpreterToolDefinition instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - writer.WriteSerializedAdditionalRawData(_additionalBinaryDataProperties, options); - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Assistants/CodeInterpreterToolResources.cs b/src/Custom/Assistants/CodeInterpreterToolResources.cs index de3ecbe91..99376a232 100644 --- a/src/Custom/Assistants/CodeInterpreterToolResources.cs +++ b/src/Custom/Assistants/CodeInterpreterToolResources.cs @@ -3,27 +3,8 @@ namespace OpenAI.Assistants; -/// The AssistantObjectToolResourcesCodeInterpreter. [Experimental("OPENAI001")] [CodeGenType("AssistantObjectToolResourcesCodeInterpreter")] +[CodeGenVisibility(nameof(CodeInterpreterToolResources), CodeGenVisibility.Public)] public partial class CodeInterpreterToolResources -{ - private ChangeTrackingList _fileIds = new ChangeTrackingList(); - - /// A list of [file](/docs/api-reference/files) IDs made available to the `code_interpreter`` tool. There can be a maximum of 20 files associated with the tool. - public IList FileIds - { - get => _fileIds; - internal set - { - _fileIds = new ChangeTrackingList(); - foreach (string fileId in value) - { - _fileIds.Add(fileId); - } - } - } - - public CodeInterpreterToolResources() - { } -} +{ } diff --git a/src/Custom/Assistants/FileSearchRankingOptions.cs b/src/Custom/Assistants/FileSearchRankingOptions.cs index fc5480181..a23fed691 100644 --- a/src/Custom/Assistants/FileSearchRankingOptions.cs +++ b/src/Custom/Assistants/FileSearchRankingOptions.cs @@ -6,6 +6,6 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("FileSearchRankingOptions")] +[CodeGenVisibility(nameof(FileSearchRankingOptions), CodeGenVisibility.Internal)] public partial class FileSearchRankingOptions -{ -} +{ } diff --git a/src/Custom/Assistants/FileSearchToolDefinition.Serialization.cs b/src/Custom/Assistants/FileSearchToolDefinition.Serialization.cs deleted file mode 100644 index 8111cc399..000000000 --- a/src/Custom/Assistants/FileSearchToolDefinition.Serialization.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -public partial class FileSearchToolDefinition : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeFileSearchToolDefinition, writer, options); - - internal static void SerializeFileSearchToolDefinition(FileSearchToolDefinition instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - if (Optional.IsDefined(MaxResults)) - { - writer.WritePropertyName("file_search"u8); - writer.WriteObjectValue(_fileSearch, options); - } - writer.WriteSerializedAdditionalRawData(_additionalBinaryDataProperties, options); - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Assistants/FileSearchToolDefinition.cs b/src/Custom/Assistants/FileSearchToolDefinition.cs index 8d333be3b..fe80270eb 100644 --- a/src/Custom/Assistants/FileSearchToolDefinition.cs +++ b/src/Custom/Assistants/FileSearchToolDefinition.cs @@ -4,30 +4,21 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("AssistantToolsFileSearch")] -[CodeGenSuppress(nameof(FileSearchToolDefinition))] public partial class FileSearchToolDefinition : ToolDefinition { public int? MaxResults { - get => _fileSearch?.InternalMaxNumResults; - set => _fileSearch.InternalMaxNumResults = value; + get => FileSearch?.InternalMaxNumResults; + set => FileSearch.InternalMaxNumResults = value; } public FileSearchRankingOptions RankingOptions { - get => _fileSearch.RankingOptions; - set => _fileSearch.RankingOptions = value; + get => FileSearch.RankingOptions; + set => FileSearch.RankingOptions = value; } - /// - /// Creates a new instance of . - /// - public FileSearchToolDefinition() - : base("file_search") - { - _fileSearch = new InternalAssistantToolsFileSearchFileSearch(); - } - - [CodeGenMember("FileSearch")] - private readonly InternalAssistantToolsFileSearchFileSearch _fileSearch; + // CUSTOM: Ensure default constructor applies discriminator value and initializes inner object. + public FileSearchToolDefinition() : this(kind: InternalAssistantToolDefinitionType.FileSearch, additionalBinaryDataProperties: null, fileSearch: new()) + { } } diff --git a/src/Custom/Assistants/FileSearchToolResources.cs b/src/Custom/Assistants/FileSearchToolResources.cs index af56bbded..21f3d35ea 100644 --- a/src/Custom/Assistants/FileSearchToolResources.cs +++ b/src/Custom/Assistants/FileSearchToolResources.cs @@ -7,30 +7,12 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("ToolResourcesFileSearch")] +[CodeGenVisibility(nameof(FileSearchToolResources), CodeGenVisibility.Public)] [CodeGenSerialization(nameof(NewVectorStores), "vector_stores", SerializationValueHook = nameof(SerializeNewVectorStores))] public partial class FileSearchToolResources { - private ChangeTrackingList _vectorStoreIds = new(); - - [CodeGenMember("VectorStoreIds")] - public IList VectorStoreIds - { - get => _vectorStoreIds; - internal set - { - _vectorStoreIds = new ChangeTrackingList(); - foreach (string item in value) - { - _vectorStoreIds.Add(item); - } - } - } - [CodeGenMember("VectorStores")] - public IList NewVectorStores { get; } = new ChangeTrackingList(); - - public FileSearchToolResources() - { } + public IList NewVectorStores { get; } private void SerializeNewVectorStores(Utf8JsonWriter writer, ModelReaderWriterOptions options) => writer.WriteObjectValue(NewVectorStores, options); diff --git a/src/Custom/Assistants/FunctionToolDefinition.Serialization.cs b/src/Custom/Assistants/FunctionToolDefinition.Serialization.cs deleted file mode 100644 index a209f332e..000000000 --- a/src/Custom/Assistants/FunctionToolDefinition.Serialization.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -public partial class FunctionToolDefinition : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeFunctionToolDefinition, writer, options); - - internal static void SerializeFunctionToolDefinition(FunctionToolDefinition instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("function"u8); - writer.WriteObjectValue(_internalFunction, options); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - writer.WriteSerializedAdditionalRawData(_additionalBinaryDataProperties, options); - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Assistants/FunctionToolDefinition.cs b/src/Custom/Assistants/FunctionToolDefinition.cs index ca14003c6..c5a2a9133 100644 --- a/src/Custom/Assistants/FunctionToolDefinition.cs +++ b/src/Custom/Assistants/FunctionToolDefinition.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants; @@ -7,44 +6,44 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("AssistantToolsFunction")] [CodeGenSuppress(nameof(FunctionToolDefinition), typeof(InternalFunctionDefinition))] -public partial class FunctionToolDefinition : ToolDefinition +public partial class FunctionToolDefinition { // CUSTOM: the visibility of the underlying function object is hidden to simplify the structure of the tool. - [CodeGenMember("Function")] - private readonly InternalFunctionDefinition _internalFunction; - /// public string FunctionName { - get => _internalFunction.Name; - set => _internalFunction.Name = value; + get => Function.Name; + set => Function.Name = value; } /// public string Description { - get => _internalFunction.Description; - set => _internalFunction.Description = value; + get => Function.Description; + set => Function.Description = value; } /// public BinaryData Parameters { - get => _internalFunction.Parameters; - set => _internalFunction.Parameters = value; + get => Function.Parameters; + set => Function.Parameters = value; } public bool? StrictParameterSchemaEnabled { - get => _internalFunction.Strict; - set => _internalFunction.Strict = value; + get => Function.Strict; + set => Function.Strict = value; } public FunctionToolDefinition(string name) - : base("function") + : this(kind: InternalAssistantToolDefinitionType.Function, null, new(name: name)) { Argument.AssertNotNullOrEmpty(name, nameof(name)); - _internalFunction = new(null, name, null, null, null); } + + // CUSTOM: Ensure default constructor initializes discriminator value and inner type. + public FunctionToolDefinition() : this(kind: InternalAssistantToolDefinitionType.Function, additionalBinaryDataProperties: null, function: new()) + { } } diff --git a/src/Custom/Assistants/GeneratorStubs.cs b/src/Custom/Assistants/GeneratorStubs.cs index 7b01cbb72..b6e1956ff 100644 --- a/src/Custom/Assistants/GeneratorStubs.cs +++ b/src/Custom/Assistants/GeneratorStubs.cs @@ -8,7 +8,7 @@ namespace OpenAI.Assistants; */ [Experimental("OPENAI001")] [CodeGenType("AssistantToolsCode")] -public partial class CodeInterpreterToolDefinition : ToolDefinition { } +public partial class CodeInterpreterToolDefinition { } [Experimental("OPENAI001")] [CodeGenType("MessageObjectStatus")] diff --git a/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs b/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs index cb27e0ed7..deada8231 100644 --- a/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs +++ b/src/Custom/Assistants/Internal/GeneratorStubs.Internal.cs @@ -105,9 +105,6 @@ internal partial class InternalMessageContentItemFileObjectImageFile internal string Detail { get; set; } } -[CodeGenType("MessageContentTextObjectText")] -internal partial class InternalMessageContentTextObjectText { } - [CodeGenType("MessageContentRefusalObjectType")] internal readonly partial struct InternalMessageContentRefusalObjectType { } @@ -144,12 +141,6 @@ internal partial class InternalListAssistantsResponse : IInternalListResponse { } - -[CodeGenType("ListThreadsResponseObject")] -internal readonly partial struct InternalListThreadsResponseObject { } - [CodeGenType("ListMessagesResponse")] internal partial class InternalListMessagesResponse : IInternalListResponse { } @@ -275,15 +266,6 @@ internal readonly partial struct InternalMessageDeltaObjectObject { } [CodeGenType("MessageObjectAttachment")] internal partial class InternalMessageObjectAttachment { } -[CodeGenType("MessageContentImageFileObjectType")] -internal readonly partial struct InternalMessageContentImageFileObjectType { } - -[CodeGenType("MessageContentImageUrlObjectType")] -internal readonly partial struct InternalMessageContentImageUrlObjectType { } - -[CodeGenType("MessageContentTextObjectType")] -internal readonly partial struct InternalMessageContentTextObjectType { } - [CodeGenType("RunObjectRequiredAction1Type")] internal readonly partial struct InternalRunObjectRequiredActionType { } @@ -350,17 +332,20 @@ internal partial class InternalAssistantToolsFileSearchTypeOnly { } [CodeGenType("AssistantToolsFileSearchTypeOnlyType")] internal readonly partial struct InternalAssistantToolsFileSearchTypeOnlyType { } -[CodeGenType("AssistantResponseFormatText")] -internal partial class InternalAssistantResponseFormatText { } +[CodeGenType("DotNetAssistantResponseFormatText")] +internal partial class InternalDotNetAssistantResponseFormatText { } -[CodeGenType("AssistantResponseFormatJsonObject")] -internal partial class InternalAssistantResponseFormatJsonObject { } +[CodeGenType("DotNetAssistantResponseFormatJsonObject")] +internal partial class InternalDotNetAssistantResponseFormatJsonObject { } -[CodeGenType("AssistantResponseFormatJsonSchema")] -internal partial class InternalAssistantResponseFormatJsonSchema { } +[CodeGenType("DotNetAssistantResponseFormatJsonSchema")] +internal partial class InternalDotNetAssistantResponseFormatJsonSchema { } -[CodeGenType("UnknownAssistantResponseFormat")] -internal partial class InternalUnknownAssistantResponseFormat { } +[CodeGenType("DotNetAssistantResponseFormatJsonSchemaJsonSchema")] +internal partial class InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema { } + +[CodeGenType("UnknownDotNetAssistantResponseFormat")] +internal partial class InternalUnknownDotNetAssistantResponseFormat { } [CodeGenType("MessageDeltaContentRefusalObject")] internal partial class InternalMessageDeltaContentRefusalObject { } @@ -371,11 +356,14 @@ internal partial class InternalToolResourcesFileSearchIdsOnly { } [CodeGenType("RunStepDetailsToolCallsFileSearchRankingOptionsObject")] internal partial class InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject { } -[CodeGenType("RunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker")] -internal readonly partial struct InternalRunStepDetailsToolCallsFileSearchRankingOptionsObjectRanker { } - [CodeGenType("IncludedRunStepProperty")] internal readonly partial struct InternalIncludedRunStepProperty { } -[CodeGenType("AssistantSupportedModels")] -internal readonly partial struct InternalAssistantSupportedModels { } +[CodeGenType("AssistantSupportedModels")] internal readonly partial struct InternalAssistantSupportedModels { } +[CodeGenType("AssistantToolDefinitionType")] internal readonly partial struct InternalAssistantToolDefinitionType {} +[CodeGenType("RunStepDetailsType")] internal readonly partial struct InternalRunStepDetailsType { } +[CodeGenType("RunStepDetailsCodeInterpreterOutputType")] internal readonly partial struct InternalRunStepDetailsCodeInterpreterOutputType { } +[CodeGenType("MessageContentTextAnnotationType")] internal readonly partial struct InternalMessageContentTextAnnotationType { } +[CodeGenType("MessageContentType")] internal readonly partial struct InternalMessageContentType { } +[CodeGenType("UnknownMessageContent")] internal partial class InternalUnknownMessageContent { } +[CodeGenType("MessageContentTextObjectText1")] internal partial class InternalMessageContentTextObjectText1 { } \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/InternalAssistantMessageClient.cs b/src/Custom/Assistants/Internal/InternalAssistantMessageClient.cs index 15e8f3eb5..552ed6812 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantMessageClient.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantMessageClient.cs @@ -9,8 +9,8 @@ namespace OpenAI.Assistants; [CodeGenSuppress("InternalAssistantMessageClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] [CodeGenSuppress("CreateMessageAsync", typeof(string), typeof(MessageCreationOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateMessage", typeof(string), typeof(MessageCreationOptions), typeof(CancellationToken))] -[CodeGenSuppress("ListMessagesAsync", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListMessages", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetMessagesAsync", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetMessages", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("GetMessageAsync", typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("GetMessage", typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("ModifyMessageAsync", typeof(string), typeof(string), typeof(MessageModificationOptions), typeof(CancellationToken))] diff --git a/src/Custom/Assistants/Internal/InternalAssistantResponseFormatPlainTextNoObject.cs b/src/Custom/Assistants/Internal/InternalAssistantResponseFormatPlainTextNoObject.cs index 6c3e2ee7c..3280e7c17 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantResponseFormatPlainTextNoObject.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantResponseFormatPlainTextNoObject.cs @@ -4,6 +4,8 @@ internal partial class InternalAssistantResponseFormatPlainTextNoObject : Assist { public string Value { get; set; } + internal InternalAssistantResponseFormatPlainTextNoObject() : base() { } + public InternalAssistantResponseFormatPlainTextNoObject(string value) { Value = value; diff --git a/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs b/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs index 342f4fe2b..719e6a447 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantRunClient.Protocol.cs @@ -6,14 +6,14 @@ namespace OpenAI.Assistants; -[CodeGenSuppress("CreateRunAsync", typeof(string), typeof(BinaryContent), typeof(string), typeof(IEnumerable), typeof(RequestOptions))] -[CodeGenSuppress("CreateRun", typeof(string), typeof(BinaryContent), typeof(string), typeof(IEnumerable), typeof(RequestOptions))] -[CodeGenSuppress("CreateThreadAndRunAsync", typeof(BinaryContent), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("CreateThreadAndRun", typeof(BinaryContent), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("SubmitToolOutputsToRunAsync", typeof(string), typeof(string), typeof(BinaryContent), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("SubmitToolOutputsToRun", typeof(string), typeof(string), typeof(BinaryContent), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListRunStepsAsync", typeof(string), typeof(string), typeof(IEnumerable), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListRunSteps", typeof(string), typeof(string), typeof(IEnumerable), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("CreateRunAsync", typeof(string), typeof(BinaryContent), typeof(IEnumerable), typeof(RequestOptions))] +[CodeGenSuppress("CreateRun", typeof(string), typeof(BinaryContent), typeof(IEnumerable), typeof(RequestOptions))] +[CodeGenSuppress("CreateThreadAndRunAsync", typeof(string), typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("CreateThreadAndRun", typeof(string), typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("SubmitToolOutputsToRunAsync", typeof(string), typeof(string), typeof(string), typeof(BinaryContent),typeof(RequestOptions))] +[CodeGenSuppress("SubmitToolOutputsToRun", typeof(string), typeof(string), typeof(string), typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("GetRunStepsAsync", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(IEnumerable), typeof(RequestOptions))] +[CodeGenSuppress("GetRunSteps", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(IEnumerable), typeof(RequestOptions))] [CodeGenSuppress("GetRunStepAsync", typeof(string), typeof(string), typeof(string), typeof(IEnumerable), typeof(RequestOptions))] [CodeGenSuppress("GetRunStep", typeof(string), typeof(string), typeof(string), typeof(IEnumerable), typeof(RequestOptions))] internal partial class InternalAssistantRunClient @@ -33,10 +33,7 @@ public virtual async Task CreateThreadAndRunAsync(BinaryContent co PipelineMessage message = null; try { - string acceptHeaderValue = options?.BufferResponse == false - ? AcceptHeaderValue.TextEventStream.ToString() - : AcceptHeaderValue.ApplicationJson.ToString(); - message = CreateCreateThreadAndRunRequest(content, acceptHeaderValue, options); + message = CreateCreateThreadAndRunRequest(content, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } finally @@ -63,11 +60,7 @@ public virtual ClientResult CreateThreadAndRun(BinaryContent content, RequestOpt PipelineMessage message = null; try { - string acceptHeaderValue = options?.BufferResponse == false - ? AcceptHeaderValue.TextEventStream.ToString() - : AcceptHeaderValue.ApplicationJson.ToString(); - - message = CreateCreateThreadAndRunRequest(content, acceptHeaderValue, options); + message = CreateCreateThreadAndRunRequest(content, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } finally @@ -97,14 +90,10 @@ public virtual async Task CreateRunAsync(string threadId, BinaryCo PipelineMessage message = null; try { - string acceptHeaderValue = options?.BufferResponse == false - ? AcceptHeaderValue.TextEventStream.ToString() - : AcceptHeaderValue.ApplicationJson.ToString(); - // Always request the included properties. IEnumerable includedRunStepProperties = [InternalIncludedRunStepProperty.FileSearchResultContent]; - message = CreateCreateRunRequest(threadId, content, acceptHeaderValue, includedRunStepProperties, options); + message = CreateCreateRunRequest(threadId, content, includedRunStepProperties, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } finally @@ -134,14 +123,10 @@ public virtual ClientResult CreateRun(string threadId, BinaryContent content, Re PipelineMessage message = null; try { - string acceptHeaderValue = options?.BufferResponse == false - ? AcceptHeaderValue.TextEventStream.ToString() - : AcceptHeaderValue.ApplicationJson.ToString(); - // Always request the included properties. IEnumerable includedRunStepProperties = [InternalIncludedRunStepProperty.FileSearchResultContent]; - message = CreateCreateRunRequest(threadId, content, acceptHeaderValue, includedRunStepProperties, options); + message = CreateCreateRunRequest(threadId, content, includedRunStepProperties, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } finally @@ -293,11 +278,7 @@ public virtual async Task SubmitToolOutputsToRunAsync(string threa PipelineMessage message = null; try { - string acceptHeaderValue = options?.BufferResponse == false - ? AcceptHeaderValue.TextEventStream.ToString() - : AcceptHeaderValue.ApplicationJson.ToString(); - - message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, acceptHeaderValue, options); + message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } finally @@ -331,11 +312,7 @@ public virtual ClientResult SubmitToolOutputsToRun(string threadId, string runId PipelineMessage message = null; try { - string acceptHeaderValue = options?.BufferResponse == false - ? AcceptHeaderValue.TextEventStream.ToString() - : AcceptHeaderValue.ApplicationJson.ToString(); - - message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, acceptHeaderValue, options); + message = CreateSubmitToolOutputsToRunRequest(threadId, runId, content, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } finally @@ -355,7 +332,7 @@ public virtual async Task GetRunStepsAsync(string threadId, string // Always request the included properties. IEnumerable includedRunStepProperties = [InternalIncludedRunStepProperty.FileSearchResultContent]; - using PipelineMessage message = CreateListRunStepsRequest(threadId, runId, limit, order, after, before, includedRunStepProperties, options); + using PipelineMessage message = CreateGetRunStepsRequest(threadId, runId, limit, order, after, before, includedRunStepProperties, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } @@ -367,7 +344,7 @@ public virtual ClientResult GetRunSteps(string threadId, string runId, int? limi // Always request the included properties. IEnumerable includedRunStepProperties = [InternalIncludedRunStepProperty.FileSearchResultContent]; - using PipelineMessage message = CreateListRunStepsRequest(threadId, runId, limit, order, after, before, includedRunStepProperties, options); + using PipelineMessage message = CreateGetRunStepsRequest(threadId, runId, limit, order, after, before, includedRunStepProperties, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } diff --git a/src/Custom/Assistants/Internal/InternalAssistantRunClient.cs b/src/Custom/Assistants/Internal/InternalAssistantRunClient.cs index 751b22fe1..22eed2bce 100644 --- a/src/Custom/Assistants/Internal/InternalAssistantRunClient.cs +++ b/src/Custom/Assistants/Internal/InternalAssistantRunClient.cs @@ -8,24 +8,24 @@ namespace OpenAI.Assistants; [CodeGenType("Runs")] [CodeGenSuppress("InternalAssistantRunClient", typeof(ClientPipeline), typeof(ApiKeyCredential), typeof(Uri))] -[CodeGenSuppress("CreateThreadAndRunAsync", typeof(InternalCreateThreadAndRunRequest), typeof(AcceptHeaderValue), typeof(CancellationToken))] -[CodeGenSuppress("CreateThreadAndRun", typeof(InternalCreateThreadAndRunRequest), typeof(AcceptHeaderValue), typeof(CancellationToken))] -[CodeGenSuppress("CreateRunAsync", typeof(string), typeof(RunCreationOptions), typeof(AcceptHeaderValue), typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("CreateRun", typeof(string), typeof(RunCreationOptions), typeof(AcceptHeaderValue), typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("ListRunsAsync", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListRuns", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CreateThreadAndRunAsync", typeof(InternalCreateThreadAndRunRequest), typeof(CancellationToken))] +[CodeGenSuppress("CreateThreadAndRun", typeof(InternalCreateThreadAndRunRequest), typeof(CancellationToken))] +[CodeGenSuppress("CreateRunAsync", typeof(string), typeof(RunCreationOptions), typeof(IEnumerable), typeof(CancellationToken))] +[CodeGenSuppress("CreateRun", typeof(string), typeof(RunCreationOptions), typeof(IEnumerable), typeof(CancellationToken))] +[CodeGenSuppress("GetRunsAsync", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetRuns", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("GetRunAsync", typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("GetRun", typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("ModifyRunAsync", typeof(string), typeof(string), typeof(RunModificationOptions), typeof(CancellationToken))] [CodeGenSuppress("ModifyRun", typeof(string), typeof(string), typeof(RunModificationOptions), typeof(CancellationToken))] [CodeGenSuppress("CancelRunAsync", typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("CancelRun", typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("SubmitToolOutputsToRunAsync", typeof(string), typeof(string), typeof(InternalSubmitToolOutputsRunRequest), typeof(AcceptHeaderValue), typeof(CancellationToken))] -[CodeGenSuppress("SubmitToolOutputsToRun", typeof(string), typeof(string), typeof(InternalSubmitToolOutputsRunRequest), typeof(AcceptHeaderValue), typeof(CancellationToken))] -[CodeGenSuppress("ListRunStepsAsync", typeof(string), typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("ListRunSteps", typeof(string), typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(IEnumerable), typeof(CancellationToken))] +[CodeGenSuppress("SubmitToolOutputsToRunAsync", typeof(string), typeof(string), typeof(InternalSubmitToolOutputsRunRequest), typeof(CancellationToken))] +[CodeGenSuppress("SubmitToolOutputsToRun", typeof(string), typeof(string), typeof(InternalSubmitToolOutputsRunRequest), typeof(CancellationToken))] +[CodeGenSuppress("GetRunStepsAsync", typeof(string), typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(IEnumerable), typeof(CancellationToken))] +[CodeGenSuppress("GetRunSteps", typeof(string), typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(IEnumerable), typeof(CancellationToken))] [CodeGenSuppress("GetRunStepAsync", typeof(string), typeof(string), typeof(string), typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("GetRunStep", typeof(string), typeof(string), typeof(string), typeof(IEnumerable), typeof(CancellationToken))] +[CodeGenSuppress("GetRunStep", typeof(string), typeof(string), typeof(string), typeof(IEnumerable), typeof(CancellationToken))] internal partial class InternalAssistantRunClient { // CUSTOM: diff --git a/src/Custom/Assistants/Internal/InternalMessageContentImageFileObject.cs b/src/Custom/Assistants/Internal/InternalMessageContentImageFileObject.cs new file mode 100644 index 000000000..08ff882f4 --- /dev/null +++ b/src/Custom/Assistants/Internal/InternalMessageContentImageFileObject.cs @@ -0,0 +1,15 @@ +using System; + +namespace OpenAI.Assistants; + +/// +/// Represents an item of image file content within an Assistants API message. +/// +/// +/// Use the method to +/// create an instance of this type. +/// +[CodeGenType("MessageContentImageFileObject")] +internal partial class InternalMessageContentImageFileObject +{ +} diff --git a/src/Custom/Assistants/Internal/InternalMessageContentImageUrlObject.cs b/src/Custom/Assistants/Internal/InternalMessageContentImageUrlObject.cs new file mode 100644 index 000000000..b693ca3cf --- /dev/null +++ b/src/Custom/Assistants/Internal/InternalMessageContentImageUrlObject.cs @@ -0,0 +1,15 @@ +using System; + +namespace OpenAI.Assistants; + +/// +/// Represents an item of image URL content within an Assistants API message. +/// +/// +/// Use the method to +/// create an instance of this type. +/// +[CodeGenType("MessageContentImageUrlObject")] +internal partial class InternalMessageContentImageUrlObject +{ +} diff --git a/src/Custom/Assistants/Internal/InternalMessageContentRefusalObject.cs b/src/Custom/Assistants/Internal/InternalMessageContentRefusalObject.cs new file mode 100644 index 000000000..5df400d58 --- /dev/null +++ b/src/Custom/Assistants/Internal/InternalMessageContentRefusalObject.cs @@ -0,0 +1,17 @@ +using System; + +namespace OpenAI.Assistants; + +/// +/// Represents an item of image URL content within an Assistants API message. +/// +/// +/// Use the method to +/// create an instance of this type. +/// +[CodeGenType("MessageContentRefusalObject")] +internal partial class InternalMessageContentRefusalObject +{ + [CodeGenMember("Refusal")] + public string InternalRefusal { get; set; } +} diff --git a/src/Custom/Assistants/Internal/InternalMessageContentTextObject.cs b/src/Custom/Assistants/Internal/InternalMessageContentTextObject.cs new file mode 100644 index 000000000..8ffc5ae90 --- /dev/null +++ b/src/Custom/Assistants/Internal/InternalMessageContentTextObject.cs @@ -0,0 +1,98 @@ +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text.Json; + +namespace OpenAI.Assistants; + +/// +/// Represents an item of annotated text content within an Assistants API response message. +/// +[CodeGenType("MessageContentTextObject")] +internal partial class InternalMessageContentTextObject +{ + [CodeGenMember("Text")] + internal BinaryData InternalText; + + internal InternalMessageContentTextObjectText1 InternalTextObjectValue { get; set; } + internal string InternalTextLiteralValue { get; set; } + + internal IReadOnlyList WrappedAnnotations + => _wrappedAnnotations + ??= (InternalTextObjectValue?.Annotations ?? []).Select(internalAnnotation => new TextAnnotation(internalAnnotation)).ToList(); + private List _wrappedAnnotations; + + // CUSTOM: Furnish custom constructors for union variants + internal InternalMessageContentTextObject(string textLiteralValue) + : this(InternalMessageContentType.Text, additionalBinaryDataProperties: null, internalText: BinaryData.Empty) + { + InternalTextLiteralValue = textLiteralValue; + } + + internal InternalMessageContentTextObject(InternalMessageContentTextObjectText1 textObjectValue, IDictionary additionalBinaryDataProperties) + : this(InternalMessageContentType.Text, additionalBinaryDataProperties, internalText: BinaryData.Empty) + { + InternalTextObjectValue = textObjectValue; + } + + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentTextObject)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + // CUSTOM: Selectively write either text literal (union variant 0) or object (union variant 1) + if (!string.IsNullOrEmpty(InternalTextLiteralValue)) + { + writer.WriteStringValue(InternalTextLiteralValue); + } + else + { + writer.WriteObjectValue(InternalTextObjectValue, options); + } + } + } + + internal static InternalMessageContentTextObject DeserializeInternalMessageContentTextObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalMessageContentType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string internalTextLiteralValue = default; + InternalMessageContentTextObjectText1 internalTextObjectValue = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalMessageContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("text"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.String) + { + internalTextLiteralValue = prop.Value.GetString(); + } + else + { + internalTextObjectValue = InternalMessageContentTextObjectText1.DeserializeInternalMessageContentTextObjectText1(prop.Value, options); + } + continue; + } + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return string.IsNullOrEmpty(internalTextLiteralValue) + ? new InternalMessageContentTextObject(internalTextObjectValue, additionalBinaryDataProperties) + : new InternalMessageContentTextObject(internalTextLiteralValue); + } +} diff --git a/src/Custom/Assistants/Internal/InternalMessageImageFileContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalMessageImageFileContent.Serialization.cs deleted file mode 100644 index 748340361..000000000 --- a/src/Custom/Assistants/Internal/InternalMessageImageFileContent.Serialization.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalMessageImageFileContent : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalMessageImageFileContent, writer, options); - - internal static void SerializeInternalMessageImageFileContent(InternalMessageImageFileContent instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type); - writer.WritePropertyName("image_file"u8); - writer.WriteObjectValue(_imageFile, options); - writer.WriteSerializedAdditionalRawData(_additionalBinaryDataProperties, options); - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Assistants/Internal/InternalMessageImageFileContent.cs b/src/Custom/Assistants/Internal/InternalMessageImageFileContent.cs deleted file mode 100644 index e49bdebfe..000000000 --- a/src/Custom/Assistants/Internal/InternalMessageImageFileContent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; - -namespace OpenAI.Assistants; - -/// -/// Represents an item of image file content within an Assistants API message. -/// -/// -/// Use the method to -/// create an instance of this type. -/// -[CodeGenType("MessageContentImageFileObject")] -[CodeGenSuppress("InternalMessageImageFileContent", typeof(InternalMessageContentItemFileObjectImageFile))] -internal partial class InternalMessageImageFileContent -{ - [CodeGenMember("Type")] - private string _type = "image_file"; - - [CodeGenMember("ImageFile")] - internal InternalMessageContentItemFileObjectImageFile _imageFile; - - /// - public string InternalFileId => _imageFile.FileId; - - /// - public MessageImageDetail? InternalDetail => _imageFile.Detail?.ToMessageImageDetail(); - - /// Initializes a new instance of . - internal InternalMessageImageFileContent(string imageFileId, MessageImageDetail? detail = null) - : this(new InternalMessageContentItemFileObjectImageFile(imageFileId, detail?.ToSerialString(), null)) - { } - - /// Initializes a new instance of . - /// - /// is null. - internal InternalMessageImageFileContent(InternalMessageContentItemFileObjectImageFile imageFile) - { - Argument.AssertNotNull(imageFile, nameof(imageFile)); - _imageFile = imageFile; - } -} diff --git a/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.Serialization.cs deleted file mode 100644 index 44055a32f..000000000 --- a/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.Serialization.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalMessageImageUrlContent : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalMessageImageUrlContent, writer, options); - - internal static void SerializeInternalMessageImageUrlContent(InternalMessageImageUrlContent instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type); - writer.WritePropertyName("image_url"u8); - writer.WriteObjectValue(_imageUrl, options); - writer.WriteSerializedAdditionalRawData(_additionalBinaryDataProperties, options); - writer.WriteEndObject(); - } -} \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.cs b/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.cs deleted file mode 100644 index 5f8b81716..000000000 --- a/src/Custom/Assistants/Internal/InternalMessageImageUrlContent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; - -namespace OpenAI.Assistants; - -/// -/// Represents an item of image URL content within an Assistants API message. -/// -/// -/// Use the method to -/// create an instance of this type. -/// -[CodeGenType("MessageContentImageUrlObject")] -[CodeGenSuppress("MessageImageUrlContent", typeof(InternalMessageContentImageUrlObjectImageUrl))] -internal partial class InternalMessageImageUrlContent -{ - [CodeGenMember("Type")] - private string _type = "image_url"; - - [CodeGenMember("ImageUrl")] - internal InternalMessageContentImageUrlObjectImageUrl _imageUrl; - - /// - public Uri InternalUrl => _imageUrl.Url; - - /// - public MessageImageDetail? InternalDetail => _imageUrl.Detail?.ToMessageImageDetail(); - - /// Initializes a new instance of . - internal InternalMessageImageUrlContent(Uri url, MessageImageDetail? detail = null) - : this(new InternalMessageContentImageUrlObjectImageUrl(url, detail?.ToSerialString(), null)) - { } - - /// Initializes a new instance of . - /// - /// is null. - internal InternalMessageImageUrlContent(InternalMessageContentImageUrlObjectImageUrl imageUrl) - { - Argument.AssertNotNull(imageUrl, nameof(imageUrl)); - _imageUrl = imageUrl; - } -} diff --git a/src/Custom/Assistants/Internal/InternalMessageRefusalContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalMessageRefusalContent.Serialization.cs deleted file mode 100644 index 72ac79768..000000000 --- a/src/Custom/Assistants/Internal/InternalMessageRefusalContent.Serialization.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalMessageRefusalContent : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalMessageRefusalContent, writer, options); - - internal static void SerializeInternalMessageRefusalContent(InternalMessageRefusalContent instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type); - writer.WritePropertyName("refusal"u8); - writer.WriteStringValue(Refusal); - writer.WriteEndObject(); - } -} \ No newline at end of file diff --git a/src/Custom/Assistants/Internal/InternalMessageRefusalContent.cs b/src/Custom/Assistants/Internal/InternalMessageRefusalContent.cs deleted file mode 100644 index 46908fe01..000000000 --- a/src/Custom/Assistants/Internal/InternalMessageRefusalContent.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; - -namespace OpenAI.Assistants; - -/// -/// Represents an item of image URL content within an Assistants API message. -/// -/// -/// Use the method to -/// create an instance of this type. -/// -[CodeGenType("MessageContentRefusalObject")] -internal partial class InternalMessageRefusalContent -{ - [CodeGenMember("Type")] - private string _type = "refusal"; - - [CodeGenMember("Refusal")] - public string InternalRefusal { get; set; } -} diff --git a/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.Serialization.cs deleted file mode 100644 index 16c7e9356..000000000 --- a/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.Serialization.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalRequestMessageTextContent : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalRequestMessageTextContent, writer, options); - - internal static void SerializeInternalRequestMessageTextContent(InternalRequestMessageTextContent instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - writer.WritePropertyName("text"u8); - writer.WriteStringValue(InternalText); - writer.WriteSerializedAdditionalRawData(_additionalBinaryDataProperties, options); - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.cs b/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.cs deleted file mode 100644 index 0ac72f75c..000000000 --- a/src/Custom/Assistants/Internal/InternalRequestMessageTextContent.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace OpenAI.Assistants; - -/// -/// Represents an item of text content within an Assistants API message. -/// -/// -/// Use the method to create an instance of this -/// type. -/// -[CodeGenType("MessageRequestContentTextObject")] -internal partial class InternalRequestMessageTextContent -{ - [CodeGenMember("Text")] - internal string InternalText { get; } -} diff --git a/src/Custom/Assistants/Internal/InternalRequiredFunctionToolCall.cs b/src/Custom/Assistants/Internal/InternalRequiredFunctionToolCall.cs index 5dded028f..92a6cb183 100644 --- a/src/Custom/Assistants/Internal/InternalRequiredFunctionToolCall.cs +++ b/src/Custom/Assistants/Internal/InternalRequiredFunctionToolCall.cs @@ -7,12 +7,8 @@ namespace OpenAI.Assistants; internal partial class InternalRequiredFunctionToolCall : InternalRequiredToolCall { // CUSTOM: - // - 'Type' is hidden, as the object discriminator does not carry additional value to the caller in the context - // of a strongly-typed object model // - 'Function' is hidden and its constituent 'Name' and 'Arguments' members are promoted to direct visibility - [CodeGenMember("Type")] - private readonly object _type; [CodeGenMember("Function")] internal readonly InternalRunToolCallObjectFunction _internalFunction; diff --git a/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.Serialization.cs b/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.Serialization.cs deleted file mode 100644 index e798a79e2..000000000 --- a/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.Serialization.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalResponseMessageTextContent : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalResponseMessageTextContent, writer, options); - - internal static void SerializeInternalResponseMessageTextContent(InternalResponseMessageTextContent instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type); - writer.WritePropertyName("text"u8); - writer.WriteObjectValue(_text, options); - writer.WriteSerializedAdditionalRawData(_additionalBinaryDataProperties, options); - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.cs b/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.cs deleted file mode 100644 index 18ea17dbb..000000000 --- a/src/Custom/Assistants/Internal/InternalResponseMessageTextContent.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections.Generic; - -namespace OpenAI.Assistants; - -/// -/// Represents an item of annotated text content within an Assistants API response message. -/// -[CodeGenType("MessageContentTextObject")] -internal partial class InternalResponseMessageTextContent -{ - /// - public string InternalText => _text.Value; - - public IReadOnlyList InternalAnnotations => _annotations ??= WrapAnnotations(); - - [CodeGenMember("Type")] - private readonly string _type; - - [CodeGenMember("Text")] - private readonly InternalMessageContentTextObjectText _text; - - private IReadOnlyList _annotations; - - /// Initializes a new instance of . - /// - /// is null. - internal InternalResponseMessageTextContent(InternalMessageContentTextObjectText internalText) - { - Argument.AssertNotNull(internalText, nameof(internalText)); - - _text = internalText; - } - - public override string ToString() => Text; - - private IReadOnlyList WrapAnnotations() - { - List annotations = []; - foreach (InternalMessageContentTextObjectAnnotation internalAnnotation in _text?.Annotations ?? []) - { - annotations.Add(new(internalAnnotation)); - } - return annotations; - } -} diff --git a/src/Custom/Assistants/Internal/Pagination/AssistantCollectionResult.cs b/src/Custom/Assistants/Internal/Pagination/AssistantCollectionResult.cs index 5e85eb83a..9967fdb00 100644 --- a/src/Custom/Assistants/Internal/Pagination/AssistantCollectionResult.cs +++ b/src/Custom/Assistants/Internal/Pagination/AssistantCollectionResult.cs @@ -90,7 +90,7 @@ public static bool HasNextPage(ClientResult result) internal virtual ClientResult GetAssistants(int? limit, string? order, string? after, string? before, RequestOptions? options) { - using PipelineMessage message = _assistantClient.CreateListAssistantsRequest(limit, order, after, before, options); + using PipelineMessage message = _assistantClient.CreateGetAssistantsRequest(limit, order, after, before, options); return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); } } diff --git a/src/Custom/Assistants/Internal/Pagination/AsyncAssistantCollectionResult.cs b/src/Custom/Assistants/Internal/Pagination/AsyncAssistantCollectionResult.cs index 0ea0acc03..09e446308 100644 --- a/src/Custom/Assistants/Internal/Pagination/AsyncAssistantCollectionResult.cs +++ b/src/Custom/Assistants/Internal/Pagination/AsyncAssistantCollectionResult.cs @@ -89,7 +89,7 @@ public static bool HasNextPage(ClientResult result) internal virtual async Task GetAssistantsAsync(int? limit, string? order, string? after, string? before, RequestOptions? options) { - using PipelineMessage message = _assistantClient.CreateListAssistantsRequest(limit, order, after, before, options); + using PipelineMessage message = _assistantClient.CreateGetAssistantsRequest(limit, order, after, before, options); return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } } diff --git a/src/Custom/Assistants/Internal/Pagination/AsyncMessageCollectionResult.cs b/src/Custom/Assistants/Internal/Pagination/AsyncMessageCollectionResult.cs index 4f9c4c0a0..dc23d3221 100644 --- a/src/Custom/Assistants/Internal/Pagination/AsyncMessageCollectionResult.cs +++ b/src/Custom/Assistants/Internal/Pagination/AsyncMessageCollectionResult.cs @@ -67,7 +67,7 @@ protected override IAsyncEnumerable GetValuesFromPageAsync(Client } public async Task GetFirstPageAsync() - => await _messageClient.ListMessagesAsync(_threadId, _limit, _order, _after, _before, _options).ConfigureAwait(false); + => await _messageClient.GetMessagesAsync(_threadId, _limit, _order, _after, _before, _options).ConfigureAwait(false); public async Task GetNextPageAsync(ClientResult result) { @@ -78,7 +78,7 @@ public async Task GetNextPageAsync(ClientResult result) using JsonDocument doc = JsonDocument.Parse(response.Content); string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; - return await _messageClient.ListMessagesAsync(_threadId, _limit, _order, lastId, _before, _options).ConfigureAwait(false); + return await _messageClient.GetMessagesAsync(_threadId, _limit, _order, lastId, _before, _options).ConfigureAwait(false); } public static bool HasNextPage(ClientResult result) diff --git a/src/Custom/Assistants/Internal/Pagination/AsyncRunCollectionResult.cs b/src/Custom/Assistants/Internal/Pagination/AsyncRunCollectionResult.cs index 4bccb7501..1a8250935 100644 --- a/src/Custom/Assistants/Internal/Pagination/AsyncRunCollectionResult.cs +++ b/src/Custom/Assistants/Internal/Pagination/AsyncRunCollectionResult.cs @@ -66,7 +66,7 @@ protected override IAsyncEnumerable GetValuesFromPageAsync(ClientResu } public async Task GetFirstPageAsync() - => await _runClient.ListRunsAsync(_threadId, _limit, _order, _after, _before, _options).ConfigureAwait(false); + => await _runClient.GetRunsAsync(_threadId, _limit, _order, _after, _before, _options).ConfigureAwait(false); public async Task GetNextPageAsync(ClientResult result) { @@ -77,7 +77,7 @@ public async Task GetNextPageAsync(ClientResult result) using JsonDocument doc = JsonDocument.Parse(response.Content); string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; - return await _runClient.ListRunsAsync(_threadId, _limit, _order, lastId, _before, _options).ConfigureAwait(false); + return await _runClient.GetRunsAsync(_threadId, _limit, _order, lastId, _before, _options).ConfigureAwait(false); } public static bool HasNextPage(ClientResult result) diff --git a/src/Custom/Assistants/Internal/Pagination/MessageCollectionResult.cs b/src/Custom/Assistants/Internal/Pagination/MessageCollectionResult.cs index 5982fab53..d6803ae71 100644 --- a/src/Custom/Assistants/Internal/Pagination/MessageCollectionResult.cs +++ b/src/Custom/Assistants/Internal/Pagination/MessageCollectionResult.cs @@ -63,7 +63,7 @@ protected override IEnumerable GetValuesFromPage(ClientResult pag } public ClientResult GetFirstPage() - => _messageClient.ListMessages(_threadId, _limit, _order, _after, _before, _options); + => _messageClient.GetMessages(_threadId, _limit, _order, _after, _before, _options); public ClientResult GetNextPage(ClientResult result) { @@ -74,7 +74,7 @@ public ClientResult GetNextPage(ClientResult result) using JsonDocument doc = JsonDocument.Parse(response.Content); string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; - return _messageClient.ListMessages(_threadId, _limit, _order, lastId, _before, _options); + return _messageClient.GetMessages(_threadId, _limit, _order, lastId, _before, _options); } public static bool HasNextPage(ClientResult result) diff --git a/src/Custom/Assistants/Internal/Pagination/RunCollectionResult.cs b/src/Custom/Assistants/Internal/Pagination/RunCollectionResult.cs index 9bf331a30..f7e53c921 100644 --- a/src/Custom/Assistants/Internal/Pagination/RunCollectionResult.cs +++ b/src/Custom/Assistants/Internal/Pagination/RunCollectionResult.cs @@ -62,7 +62,7 @@ protected override IEnumerable GetValuesFromPage(ClientResult page) } public ClientResult GetFirstPage() - => _runClient.ListRuns(_threadId, _limit, _order, _after, _before, _options); + => _runClient.GetRuns(_threadId, _limit, _order, _after, _before, _options); public ClientResult GetNextPage(ClientResult result) { @@ -73,7 +73,7 @@ public ClientResult GetNextPage(ClientResult result) using JsonDocument doc = JsonDocument.Parse(response.Content); string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; - return _runClient.ListRuns(_threadId, _limit, _order, lastId, _before, _options); + return _runClient.GetRuns(_threadId, _limit, _order, lastId, _before, _options); } public static bool HasNextPage(ClientResult result) diff --git a/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.Serialization.cs b/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.Serialization.cs deleted file mode 100644 index 22c7d878a..000000000 --- a/src/Custom/Assistants/Internal/UnknownAssistantToolDefinition.Serialization.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class UnknownAssistantToolDefinition : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeUnknownAssistantToolDefinition, writer, options); - - internal static void SerializeUnknownAssistantToolDefinition(UnknownAssistantToolDefinition instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - writer.WriteSerializedAdditionalRawData(_additionalBinaryDataProperties, options); - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Assistants/MessageContent.Serialization.cs b/src/Custom/Assistants/MessageContent.Serialization.cs index 2743997a0..e069d67b5 100644 --- a/src/Custom/Assistants/MessageContent.Serialization.cs +++ b/src/Custom/Assistants/MessageContent.Serialization.cs @@ -3,17 +3,8 @@ namespace OpenAI.Assistants; -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] public abstract partial class MessageContent : IJsonModel { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, WriteCore, writer, options); - - internal static void WriteCore(MessageContent instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal abstract void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); - internal static MessageContent DeserializeMessageContent(JsonElement element, ModelReaderWriterOptions options = null) { options ??= ModelSerializationExtensions.WireOptions; @@ -28,9 +19,9 @@ internal static MessageContent DeserializeMessageContent(JsonElement element, Mo { switch (discriminator.GetString()) { - case "image_file": return InternalMessageImageFileContent.DeserializeInternalMessageImageFileContent(element, options); - case "image_url": return InternalMessageImageUrlContent.DeserializeInternalMessageImageUrlContent(element, options); - case "text": return InternalResponseMessageTextContent.DeserializeInternalResponseMessageTextContent(element, options); + case "image_file": return InternalMessageContentImageFileObject.DeserializeInternalMessageContentImageFileObject(element, options); + case "image_url": return InternalMessageContentImageUrlObject.DeserializeInternalMessageContentImageUrlObject(element, options); + case "text": return InternalMessageContentTextObject.DeserializeInternalMessageContentTextObject(element, options); default: return null; } } diff --git a/src/Custom/Assistants/MessageContent.cs b/src/Custom/Assistants/MessageContent.cs index 32c082067..5e595844c 100644 --- a/src/Custom/Assistants/MessageContent.cs +++ b/src/Custom/Assistants/MessageContent.cs @@ -6,7 +6,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("MessageContent")] -public abstract partial class MessageContent +public partial class MessageContent { /// /// Creates a new instance that refers to an uploaded image with a known file ID. @@ -17,7 +17,11 @@ public abstract partial class MessageContent public static MessageContent FromImageFileId( string imageFileId, MessageImageDetail? detail = null) - => new InternalMessageImageFileContent(imageFileId, detail); + => new InternalMessageContentImageFileObject( + imageFile: new( + fileId: imageFileId, + detail: detail?.ToString(), + additionalBinaryDataProperties: null)); /// /// Creates a new instance of that refers to an image at a model-accessible @@ -27,33 +31,35 @@ public static MessageContent FromImageFileId( /// /// public static MessageContent FromImageUri(Uri imageUri, MessageImageDetail? detail = null) - => new InternalMessageImageUrlContent(imageUri, detail); + => new InternalMessageContentImageUrlObject( + imageUrl: new( + url: imageUri, + detail: detail?.ToString(), + additionalBinaryDataProperties: null)); /// /// Creates a new instance that encapsulates a simple string input. /// /// /// - public static MessageContent FromText(string text) - => new InternalRequestMessageTextContent(text); + public static MessageContent FromText(string text) => new InternalMessageContentTextObject(text); - /// - public Uri ImageUri => AsInternalImageUrl?.InternalUrl; - /// - public string ImageFileId => AsInternalImageFile?.InternalFileId; - /// - public MessageImageDetail? ImageDetail => AsInternalImageFile?.InternalDetail ?? AsInternalImageUrl?.InternalDetail; - /// - public string Text => AsInternalRequestText?.InternalText ?? AsInternalResponseText?.InternalText; - /// - public IReadOnlyList TextAnnotations => AsInternalResponseText?.InternalAnnotations ?? []; + /// + public Uri ImageUri => AsInternalImageUrl?.ImageUrl?.Url; + /// + public string ImageFileId => AsInternalImageFile?.ImageFile?.FileId; + /// + public MessageImageDetail? ImageDetail => AsInternalImageFile?.ImageFile?.Detail?.ToMessageImageDetail() ?? AsInternalImageUrl?.ImageUrl?.Detail?.ToMessageImageDetail(); + /// + public string Text => AsInternalText?.InternalTextLiteralValue ?? AsInternalText?.InternalTextObjectValue?.Value; + /// + public IReadOnlyList TextAnnotations => AsInternalText?.WrappedAnnotations ?? []; public string Refusal => AsRefusal?.InternalRefusal; - private InternalMessageImageFileContent AsInternalImageFile => this as InternalMessageImageFileContent; - private InternalMessageImageUrlContent AsInternalImageUrl => this as InternalMessageImageUrlContent; - private InternalResponseMessageTextContent AsInternalResponseText => this as InternalResponseMessageTextContent; - private InternalRequestMessageTextContent AsInternalRequestText => this as InternalRequestMessageTextContent; - private InternalMessageRefusalContent AsRefusal => this as InternalMessageRefusalContent; + private InternalMessageContentImageFileObject AsInternalImageFile => this as InternalMessageContentImageFileObject; + private InternalMessageContentImageUrlObject AsInternalImageUrl => this as InternalMessageContentImageUrlObject; + private InternalMessageContentTextObject AsInternalText => this as InternalMessageContentTextObject; + private InternalMessageContentRefusalObject AsRefusal => this as InternalMessageContentRefusalObject; /// /// The implicit conversion operator that infers an equivalent @@ -61,8 +67,4 @@ public static MessageContent FromText(string text) /// /// The text for the message content. public static implicit operator MessageContent(string value) => FromText(value); - - /// Creates a new instance of for mocking. - protected MessageContent() - { } } diff --git a/src/Custom/Assistants/MessageCreationAttachment.cs b/src/Custom/Assistants/MessageCreationAttachment.cs index b75ccccd3..d0feda2c6 100644 --- a/src/Custom/Assistants/MessageCreationAttachment.cs +++ b/src/Custom/Assistants/MessageCreationAttachment.cs @@ -24,7 +24,7 @@ public partial class MessageCreationAttachment /// /// [CodeGenMember("Tools")] - public IReadOnlyList Tools { get; } = new ChangeTrackingList(); + public IReadOnlyList Tools { get; } private void SerializeTools(Utf8JsonWriter writer, ModelReaderWriterOptions options) => writer.WriteObjectValue(Tools, options); diff --git a/src/Custom/Assistants/MessageCreationOptions.Serialization.cs b/src/Custom/Assistants/MessageCreationOptions.Serialization.cs index abbbc25d8..721078511 100644 --- a/src/Custom/Assistants/MessageCreationOptions.Serialization.cs +++ b/src/Custom/Assistants/MessageCreationOptions.Serialization.cs @@ -7,7 +7,7 @@ public partial class MessageCreationOptions : IJsonModel { private void SerializeContent(Utf8JsonWriter writer, ModelReaderWriterOptions options = null) { - if (Content.Count == 1 && Content[0] is InternalRequestMessageTextContent textContent) + if (Content.Count == 1 && Content[0] is InternalMessageContentTextObject textContent) { writer.WriteStringValue(textContent.Text); } diff --git a/src/Custom/Assistants/MessageCreationOptions.cs b/src/Custom/Assistants/MessageCreationOptions.cs index 7953bbeab..a744945e9 100644 --- a/src/Custom/Assistants/MessageCreationOptions.cs +++ b/src/Custom/Assistants/MessageCreationOptions.cs @@ -1,4 +1,5 @@ using System; +using System.ClientModel; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -9,7 +10,8 @@ namespace OpenAI.Assistants; /// [Experimental("OPENAI001")] [CodeGenType("CreateMessageRequest")] -[CodeGenSuppress("MessageCreationOptions", typeof(MessageRole), typeof(IEnumerable))] +[CodeGenVisibility(nameof(MessageCreationOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(MessageCreationOptions), typeof(MessageRole), typeof(IEnumerable))] [CodeGenSerialization(nameof(Content), SerializationValueHook = nameof(SerializeContent))] public partial class MessageCreationOptions { @@ -24,20 +26,5 @@ public partial class MessageCreationOptions [CodeGenMember("Content")] internal IList Content { get; } - /// - /// Creates a new instance of . - /// - public MessageCreationOptions() - : this( - new ChangeTrackingList(), - new ChangeTrackingDictionary(), - MessageRole.User, - new ChangeTrackingList(), - new ChangeTrackingDictionary()) - { } - - internal MessageCreationOptions(IEnumerable content) : this() - { - Content = [.. content]; - } + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Assistants/MessageDeletionResult.cs b/src/Custom/Assistants/MessageDeletionResult.cs index 2c39d94bd..28bf86e82 100644 --- a/src/Custom/Assistants/MessageDeletionResult.cs +++ b/src/Custom/Assistants/MessageDeletionResult.cs @@ -1,4 +1,7 @@ -using System.Diagnostics.CodeAnalysis; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.Assistants; @@ -13,5 +16,12 @@ public partial class MessageDeletionResult // CUSTOM: Made internal. /// The object type, which is always `thread.message.deleted`. [CodeGenMember("Object")] - internal InternalDeleteMessageResponseObject Object { get; } = InternalDeleteMessageResponseObject.ThreadMessageDeleted; + internal string Object { get; } = "thread.message.deleted"; + + internal static MessageDeletionResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeMessageDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Assistants/MessageModificationOptions.cs b/src/Custom/Assistants/MessageModificationOptions.cs index 769732884..03690e5ff 100644 --- a/src/Custom/Assistants/MessageModificationOptions.cs +++ b/src/Custom/Assistants/MessageModificationOptions.cs @@ -1,3 +1,4 @@ +using System.ClientModel; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants; @@ -9,4 +10,5 @@ namespace OpenAI.Assistants; [CodeGenType("ModifyMessageRequest")] public partial class MessageModificationOptions { + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Assistants/RunCreationOptions.cs b/src/Custom/Assistants/RunCreationOptions.cs index 96fbe89bb..31663c450 100644 --- a/src/Custom/Assistants/RunCreationOptions.cs +++ b/src/Custom/Assistants/RunCreationOptions.cs @@ -1,4 +1,5 @@ using OpenAI.Chat; +using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -12,7 +13,8 @@ namespace OpenAI.Assistants; /// [Experimental("OPENAI001")] [CodeGenType("CreateRunRequest")] -[CodeGenSuppress("RunCreationOptions", typeof(string))] +[CodeGenVisibility(nameof(RunCreationOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(RunCreationOptions), typeof(string))] [CodeGenSerialization(nameof(ToolConstraint), "tool_choice", SerializationValueHook = nameof(SerializeToolConstraint))] public partial class RunCreationOptions { @@ -50,17 +52,18 @@ public partial class RunCreationOptions public string AdditionalInstructions { get; set; } /// Adds additional messages to the thread before creating the run. - public IList AdditionalMessages { get; } = new ChangeTrackingList(); + public IList AdditionalMessages { get; private set; } [CodeGenMember("AdditionalMessages")] internal IList InternalMessages { - get => AdditionalMessages.Select(initializationMessage => initializationMessage as MessageCreationOptions).ToList(); + get => AdditionalMessages?.Select(initializationMessage => initializationMessage as MessageCreationOptions).ToList(); private set { // Note: this path is exclusively used in a test or deserialization case; here, we'll convert the // underlying wire-friendly representation into the initialization message abstraction. + AdditionalMessages ??= new ChangeTrackingList(); AdditionalMessages.Clear(); foreach (MessageCreationOptions baseMessageOptions in value) { @@ -99,10 +102,10 @@ private set /// /// [CodeGenMember("Tools")] - public IList ToolsOverride { get; } = new ChangeTrackingList(); + public IList ToolsOverride { get; } /// Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format. Keys can be a maximum of 64 characters long and values can be a maxium of 512 characters long. - public IDictionary Metadata { get; } = new ChangeTrackingDictionary(); + public IDictionary Metadata { get; } /// What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. public float? Temperature { get; set; } @@ -136,12 +139,8 @@ private set [CodeGenMember("ReasoningEffort")] internal ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } - /// - /// Creates a new instance of . - /// - public RunCreationOptions() - { } - private void SerializeToolConstraint(Utf8JsonWriter writer, ModelReaderWriterOptions options) => writer.WriteObjectValue(ToolConstraint, options); + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Assistants/RunStep.cs b/src/Custom/Assistants/RunStep.cs index bf59f3d82..e8a4e56d0 100644 --- a/src/Custom/Assistants/RunStep.cs +++ b/src/Custom/Assistants/RunStep.cs @@ -1,4 +1,7 @@ +using System.ClientModel; +using System.ClientModel.Primitives; using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.Assistants; @@ -9,11 +12,7 @@ public partial class RunStep // CUSTOM: Made internal. /// The object type, which is always `thread.run.step`. [CodeGenMember("Object")] - internal InternalRunStepObjectObject Object { get; } = InternalRunStepObjectObject.ThreadRunStep; - - // CUSTOM: Renamed. - [CodeGenMember("Type")] - public RunStepKind Kind { get; } + internal string Object { get; } = "thread.run.step"; /// /// The step_details associated with this run step. @@ -25,4 +24,11 @@ public partial class RunStep /// [CodeGenMember("StepDetails")] public RunStepDetails Details { get; } + + internal static RunStep FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeRunStep(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Assistants/RunStepFileSearchResultContent.cs b/src/Custom/Assistants/RunStepFileSearchResultContent.cs index 968369685..5108de80d 100644 --- a/src/Custom/Assistants/RunStepFileSearchResultContent.cs +++ b/src/Custom/Assistants/RunStepFileSearchResultContent.cs @@ -7,7 +7,7 @@ namespace OpenAI.Assistants; [CodeGenType("RunStepDetailsToolCallsFileSearchResultObjectContent")] public partial class RunStepFileSearchResultContent { - // CUSTOM: Renamed. + // CUSTOM: Apply typed discriminator value. [CodeGenMember("Type")] public RunStepFileSearchResultContentKind Kind { get; } = RunStepFileSearchResultContentKind.Text; } \ No newline at end of file diff --git a/src/Custom/Assistants/RunStepToolCall.cs b/src/Custom/Assistants/RunStepToolCall.cs index 222165753..9e8c3c0fa 100644 --- a/src/Custom/Assistants/RunStepToolCall.cs +++ b/src/Custom/Assistants/RunStepToolCall.cs @@ -5,6 +5,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("RunStepDetailsToolCallsObjectToolCallsObject")] +[CodeGenVisibility(nameof(Kind), CodeGenVisibility.Public)] public partial class RunStepToolCall { private IReadOnlyList _codeInterpreterOutputs; @@ -23,12 +24,6 @@ internal RunStepToolCall(string id) Id = id; } - // CUSTOM: - // - Made public. - // - Made setter internal. - [CodeGenMember("Kind")] - public RunStepToolCallKind Kind { get; internal set; } - #region Code Interpreter // CUSTOM: Spread. diff --git a/src/Custom/Assistants/RunTruncationStrategy.cs b/src/Custom/Assistants/RunTruncationStrategy.cs index 7a27a422c..f5e3c57e6 100644 --- a/src/Custom/Assistants/RunTruncationStrategy.cs +++ b/src/Custom/Assistants/RunTruncationStrategy.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants @@ -10,10 +8,6 @@ namespace OpenAI.Assistants [CodeGenSuppress(nameof(RunTruncationStrategy), typeof(InternalTruncationObjectType))] public partial class RunTruncationStrategy { - /// The truncation strategy to use for the thread. The default is `auto`. If set to `last_messages`, the thread will be truncated to the n most recent messages in the thread. When set to `auto`, messages in the middle of the thread will be dropped to fit the context length of the model, `max_prompt_tokens`. - [CodeGenMember("Type")] - internal readonly InternalTruncationObjectType _type; - /// The number of most recent messages from the thread when constructing the context for the run. /// /// @@ -24,7 +18,7 @@ public partial class RunTruncationStrategy /// The default that will eliminate messages in the middle of the thread /// to fit within the context length of the model or the max prompt tokens. /// - public static RunTruncationStrategy Auto { get; } = new(0, InternalTruncationObjectType.Auto, null); + public static RunTruncationStrategy Auto { get; } = new(InternalTruncationObjectType.Auto, 0, null); /// /// Creates a new instance using the last_messages strategy type, @@ -33,6 +27,6 @@ public partial class RunTruncationStrategy /// The count of last messages that the run should evaluate. /// public static RunTruncationStrategy CreateLastMessagesStrategy(int lastMessageCount) - => new(lastMessageCount, InternalTruncationObjectType.LastMessages, null); + => new(InternalTruncationObjectType.LastMessages, lastMessageCount, null); } } diff --git a/src/Custom/Assistants/ThreadCreationOptions.cs b/src/Custom/Assistants/ThreadCreationOptions.cs index 7298a4b46..dbc350cd5 100644 --- a/src/Custom/Assistants/ThreadCreationOptions.cs +++ b/src/Custom/Assistants/ThreadCreationOptions.cs @@ -1,3 +1,4 @@ +using System.ClientModel; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; @@ -26,9 +27,7 @@ internal IList InternalMessages get => InitialMessages.Select(initializationMessage => initializationMessage as MessageCreationOptions).ToList(); private set { - // Note: this path is exclusively used in a test or deserialization case; here, we'll convert the - // underlying wire-friendly representation into the initialization message abstraction. - + InitialMessages ??= new ChangeTrackingList(); InitialMessages.Clear(); foreach (MessageCreationOptions baseMessageOptions in value) { @@ -49,5 +48,7 @@ private set /// } /// /// - public IList InitialMessages { get; } = new ChangeTrackingList(); + public IList InitialMessages { get; private set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Assistants/ThreadDeletionResult.cs b/src/Custom/Assistants/ThreadDeletionResult.cs index a31c23169..2a5774959 100644 --- a/src/Custom/Assistants/ThreadDeletionResult.cs +++ b/src/Custom/Assistants/ThreadDeletionResult.cs @@ -1,4 +1,7 @@ -using System.Diagnostics.CodeAnalysis; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.Assistants; @@ -13,5 +16,12 @@ public partial class ThreadDeletionResult // CUSTOM: Made internal. /// The object type, which is always `thread.deleted`. [CodeGenMember("Object")] - internal InternalDeleteThreadResponseObject Object { get; } = InternalDeleteThreadResponseObject.ThreadDeleted; + internal string Object { get; } = "thread.deleted"; + + internal static ThreadDeletionResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeThreadDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Assistants/ThreadInitializationMessage.cs b/src/Custom/Assistants/ThreadInitializationMessage.cs index 9fd846fa7..76865b2c5 100644 --- a/src/Custom/Assistants/ThreadInitializationMessage.cs +++ b/src/Custom/Assistants/ThreadInitializationMessage.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Linq; namespace OpenAI.Assistants; @@ -12,15 +13,19 @@ public partial class ThreadInitializationMessage : MessageCreationOptions /// /// The content items that should be included in the message, added to the thread being created. /// - public ThreadInitializationMessage(MessageRole role, IEnumerable content) : base(content) + public ThreadInitializationMessage(MessageRole role, IEnumerable content) : base(null, null, role, content?.ToList(), null) { - Role = role; + Argument.AssertNotNull(content, nameof(content)); } internal ThreadInitializationMessage(MessageCreationOptions baseOptions) : base(baseOptions.Attachments, baseOptions.Metadata, baseOptions.Role, baseOptions.Content, null) { } + internal ThreadInitializationMessage() : this(default, null) + { + } + /// /// Implicitly creates a new instance of from a single item of plain text /// content, assuming the role of . diff --git a/src/Custom/Assistants/ThreadMessage.cs b/src/Custom/Assistants/ThreadMessage.cs index 8d191bcb7..13955dac4 100644 --- a/src/Custom/Assistants/ThreadMessage.cs +++ b/src/Custom/Assistants/ThreadMessage.cs @@ -1,5 +1,8 @@ +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.Assistants; @@ -10,7 +13,7 @@ public partial class ThreadMessage // CUSTOM: Made internal. /// The object type, which is always `thread.message`. [CodeGenMember("Object")] - internal InternalMessageObjectObject Object { get; } = InternalMessageObjectObject.ThreadMessage; + internal string Object { get; } = "thread.message"; /// @@ -19,4 +22,11 @@ public partial class ThreadMessage /// A list of files attached to the message, and the tools they were added to. public IReadOnlyList Attachments { get; } + + internal static ThreadMessage FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeThreadMessage(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Assistants/ThreadModificationOptions.cs b/src/Custom/Assistants/ThreadModificationOptions.cs index 9a0d13471..3b3fbdda8 100644 --- a/src/Custom/Assistants/ThreadModificationOptions.cs +++ b/src/Custom/Assistants/ThreadModificationOptions.cs @@ -1,3 +1,4 @@ +using System.ClientModel; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Assistants; @@ -15,4 +16,6 @@ public partial class ThreadModificationOptions /// [CodeGenMember("ToolResources")] public ToolResources ToolResources { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Assistants/ThreadRun.cs b/src/Custom/Assistants/ThreadRun.cs index 3d4717321..0417a6a26 100644 --- a/src/Custom/Assistants/ThreadRun.cs +++ b/src/Custom/Assistants/ThreadRun.cs @@ -1,7 +1,10 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Text.Json; namespace OpenAI.Assistants; @@ -16,49 +19,11 @@ public partial class ThreadRun // CUSTOM: Made internal. /// The object type, which is always `thread.run`. [CodeGenMember("Object")] - internal InternalRunObjectObject Object { get; } = InternalRunObjectObject.ThreadRun; - + internal string Object { get; } = "thread.run"; [CodeGenMember("RequiredAction")] internal readonly InternalRunRequiredAction _internalRequiredAction; - // CUSTOM: Removed null check for `toolConstraint` and `responseFormat`. - internal ThreadRun(string id, DateTimeOffset createdAt, string threadId, string assistantId, RunStatus status, InternalRunRequiredAction internalRequiredAction, RunError lastError, DateTimeOffset? expiresAt, DateTimeOffset? startedAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, RunIncompleteDetails incompleteDetails, string model, string instructions, IEnumerable tools, IReadOnlyDictionary metadata, RunTokenUsage usage, int? maxInputTokenCount, int? maxOutputTokenCount, RunTruncationStrategy truncationStrategy, ToolConstraint toolConstraint, bool? allowParallelToolCalls, AssistantResponseFormat responseFormat) - { - Argument.AssertNotNull(id, nameof(id)); - Argument.AssertNotNull(threadId, nameof(threadId)); - Argument.AssertNotNull(assistantId, nameof(assistantId)); - Argument.AssertNotNull(model, nameof(model)); - Argument.AssertNotNull(instructions, nameof(instructions)); - Argument.AssertNotNull(tools, nameof(tools)); - - Id = id; - CreatedAt = createdAt; - ThreadId = threadId; - AssistantId = assistantId; - Status = status; - _internalRequiredAction = internalRequiredAction; - LastError = lastError; - ExpiresAt = expiresAt; - StartedAt = startedAt; - CancelledAt = cancelledAt; - FailedAt = failedAt; - CompletedAt = completedAt; - IncompleteDetails = incompleteDetails; - Model = model; - Instructions = instructions; - Tools = tools.ToList(); - Metadata = metadata; - Usage = usage; - MaxInputTokenCount = maxInputTokenCount; - MaxOutputTokenCount = maxOutputTokenCount; - TruncationStrategy = truncationStrategy; - ToolConstraint = toolConstraint; - AllowParallelToolCalls = allowParallelToolCalls; - ResponseFormat = responseFormat; - } - - /// /// The list of required actions that must have their results submitted for the run to continue. /// @@ -102,4 +67,11 @@ internal ThreadRun(string id, DateTimeOffset createdAt, string threadId, string // CUSTOM: Renamed. [CodeGenMember("MaxCompletionTokens")] public int? MaxOutputTokenCount { get; } + + internal static ThreadRun FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeThreadRun(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Assistants/ToolConstraint.Serialization.cs b/src/Custom/Assistants/ToolConstraint.Serialization.cs index ccba3e954..45347bff5 100644 --- a/src/Custom/Assistants/ToolConstraint.Serialization.cs +++ b/src/Custom/Assistants/ToolConstraint.Serialization.cs @@ -33,7 +33,7 @@ internal static void SerializeToolConstraint(ToolConstraint instance, Utf8JsonWr { writer.WriteStartObject(); writer.WritePropertyName("type"u8); - writer.WriteStringValue(instance._objectType.ToString()); + writer.WriteStringValue(instance.Kind.ToString()); if (Optional.IsDefined(instance._objectFunctionName)) { writer.WritePropertyName("function"u8); diff --git a/src/Custom/Assistants/ToolConstraint.cs b/src/Custom/Assistants/ToolConstraint.cs index 43ab5bd48..e64fccbcc 100644 --- a/src/Custom/Assistants/ToolConstraint.cs +++ b/src/Custom/Assistants/ToolConstraint.cs @@ -6,13 +6,16 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("AssistantsNamedToolChoice")] +[CodeGenVisibility(nameof(ToolConstraint), CodeGenVisibility.Internal, typeof(InternalAssistantsNamedToolChoiceType))] public partial class ToolConstraint { private readonly string _plainTextValue; - [CodeGenMember("Type")] - private readonly string _objectType; private readonly string _objectFunctionName; + // CUSTOM: Discriminator made nullable to facilitate combination with literal variants + [CodeGenMember("Type")] + internal InternalAssistantsNamedToolChoiceType? Kind { get; set; } + // CUSTOM: Made internal. /// Gets or sets the function. [CodeGenMember("Function")] @@ -27,13 +30,13 @@ public ToolConstraint(ToolDefinition toolDefinition) switch (toolDefinition) { case CodeInterpreterToolDefinition: - _objectType = "code_interpreter"; + Kind = "code_interpreter"; break; case FileSearchToolDefinition: - _objectType = "file_search"; + Kind = "file_search"; break; case FunctionToolDefinition functionTool: - _objectType = "function"; + Kind = "function"; _objectFunctionName = functionTool.FunctionName; break; default: @@ -49,7 +52,7 @@ internal ToolConstraint(string plainTextValue) internal ToolConstraint(string plainTextValue, string objectType, string objectFunctionName, IDictionary serializedAdditionalRawData) { _plainTextValue = plainTextValue; - _objectType = objectType; + Kind = objectType is null ? null : new(objectType); _objectFunctionName = objectFunctionName; SerializedAdditionalRawData = serializedAdditionalRawData ?? new ChangeTrackingDictionary(); } diff --git a/src/Custom/Assistants/ToolDefinition.Serialization.cs b/src/Custom/Assistants/ToolDefinition.Serialization.cs deleted file mode 100644 index 32b7626f6..000000000 --- a/src/Custom/Assistants/ToolDefinition.Serialization.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Assistants; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -public abstract partial class ToolDefinition : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, WriteCore, writer, options); - - internal static void WriteCore(ToolDefinition instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal abstract void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options); -} diff --git a/src/Custom/Assistants/ToolDefinition.cs b/src/Custom/Assistants/ToolDefinition.cs index 396432429..f3c250a4c 100644 --- a/src/Custom/Assistants/ToolDefinition.cs +++ b/src/Custom/Assistants/ToolDefinition.cs @@ -5,7 +5,7 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("AssistantToolDefinition")] -public abstract partial class ToolDefinition +public partial class ToolDefinition { public static CodeInterpreterToolDefinition CreateCodeInterpreter() => new CodeInterpreterToolDefinition(); @@ -23,14 +23,4 @@ public static FunctionToolDefinition CreateFunction(string name, string descript Parameters = parameters, StrictParameterSchemaEnabled = strictParameterSchemaEnabled, }; - - protected ToolDefinition(string type) - { - Type = type; - } - - // Backcompat with the old codegen. - protected ToolDefinition() - { - } } diff --git a/src/Custom/Assistants/ToolResources.cs b/src/Custom/Assistants/ToolResources.cs index ca11d0533..df71f6f28 100644 --- a/src/Custom/Assistants/ToolResources.cs +++ b/src/Custom/Assistants/ToolResources.cs @@ -6,17 +6,11 @@ namespace OpenAI.Assistants; [Experimental("OPENAI001")] [CodeGenType("AssistantObjectToolResources1")] -[CodeGenSerialization(nameof(FileSearch), "file_search", SerializationValueHook = nameof(SerializeFileSearch))] +[CodeGenVisibility(nameof(ToolResources), CodeGenVisibility.Public)] public partial class ToolResources { /// Gets the code interpreter. public CodeInterpreterToolResources CodeInterpreter { get; set; } /// Gets the file search. public FileSearchToolResources FileSearch { get; set; } - - public ToolResources() - { } - - private void SerializeFileSearch(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => writer.WriteObjectValue(FileSearch, options); } diff --git a/src/Custom/Assistants/VectorStoreCreationHelper.cs b/src/Custom/Assistants/VectorStoreCreationHelper.cs index e2faa5e80..81a7fbc47 100644 --- a/src/Custom/Assistants/VectorStoreCreationHelper.cs +++ b/src/Custom/Assistants/VectorStoreCreationHelper.cs @@ -14,12 +14,10 @@ public partial class VectorStoreCreationHelper public FileChunkingStrategy ChunkingStrategy { get; set; } public VectorStoreCreationHelper(IEnumerable fileIds) - { - FileIds = fileIds.ToList(); - Metadata = new ChangeTrackingDictionary(); - } + : this(fileIds?.ToList(), null, null, null) + { } public VectorStoreCreationHelper(IEnumerable files) - : this(files?.Select(file => file.Id) ?? []) + : this(files?.Select(file => file.Id).ToList() ?? [], null, null, null) { } } diff --git a/src/Custom/Audio/AudioClient.Protocol.cs b/src/Custom/Audio/AudioClient.Protocol.cs index 32e71831d..52c9fbcc9 100644 --- a/src/Custom/Audio/AudioClient.Protocol.cs +++ b/src/Custom/Audio/AudioClient.Protocol.cs @@ -78,7 +78,8 @@ public virtual async Task TranscribeAudioAsync(BinaryContent conte Argument.AssertNotNullOrEmpty(contentType, nameof(contentType)); using PipelineMessage message = CreateCreateTranscriptionRequest(content, contentType, options); - return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + PipelineResponse protocolResponse = await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); + return ClientResult.FromResponse(protocolResponse); } // CUSTOM: diff --git a/src/Custom/Audio/AudioClient.cs b/src/Custom/Audio/AudioClient.cs index 9a2247680..90ab2f4c3 100644 --- a/src/Custom/Audio/AudioClient.cs +++ b/src/Custom/Audio/AudioClient.cs @@ -1,6 +1,8 @@ using System; using System.ClientModel; using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -106,7 +108,7 @@ public virtual async Task> GenerateSpeechAsync(string t options ??= new(); CreateSpeechGenerationOptions(text, voice, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await GenerateSpeechAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); return ClientResult.FromValue(result.GetRawResponse().Content, result.GetRawResponse()); } @@ -129,7 +131,7 @@ public virtual ClientResult GenerateSpeech(string text, GeneratedSpe options ??= new(); CreateSpeechGenerationOptions(text, voice, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = GenerateSpeech(content, cancellationToken.ToRequestOptions()); ; return ClientResult.FromValue(result.GetRawResponse().Content, result.GetRawResponse()); } @@ -154,10 +156,10 @@ public virtual async Task> TranscribeAudioAsync Argument.AssertNotNull(audio, nameof(audio)); Argument.AssertNotNullOrEmpty(audioFilename, nameof(audioFilename)); - options ??= new(); - CreateAudioTranscriptionOptions(audio, audioFilename, ref options); + using MultiPartFormDataBinaryContent content + = CreatePerCallTranscriptionOptions(options) + .ToMultipartContent(audio, audioFilename); - using MultiPartFormDataBinaryContent content = options.ToMultipartContent(audio, audioFilename); ClientResult result = await TranscribeAudioAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); return ClientResult.FromValue(AudioTranscription.FromResponse(result.GetRawResponse()), result.GetRawResponse()); } @@ -178,10 +180,10 @@ public virtual ClientResult TranscribeAudio(Stream audio, st Argument.AssertNotNull(audio, nameof(audio)); Argument.AssertNotNullOrEmpty(audioFilename, nameof(audioFilename)); - options ??= new(); - CreateAudioTranscriptionOptions(audio, audioFilename, ref options); + using MultiPartFormDataBinaryContent content + = CreatePerCallTranscriptionOptions(options) + .ToMultipartContent(audio, audioFilename); - using MultiPartFormDataBinaryContent content = options.ToMultipartContent(audio, audioFilename); ClientResult result = TranscribeAudio(content, content.ContentType, cancellationToken.ToRequestOptions()); return ClientResult.FromValue(AudioTranscription.FromResponse(result.GetRawResponse()), result.GetRawResponse()); } @@ -220,6 +222,80 @@ public virtual ClientResult TranscribeAudio(string audioFile return TranscribeAudio(audioStream, audioFilePath, options); } + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public virtual AsyncCollectionResult TranscribeAudioStreamingAsync(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(audio, nameof(audio)); + Argument.AssertNotNullOrEmpty(audioFilename, nameof(audioFilename)); + + MultiPartFormDataBinaryContent content + = CreatePerCallTranscriptionOptions(options, stream: true) + .ToMultipartContent(audio, audioFilename); + + return new AsyncSseUpdateCollection( + async () => await TranscribeAudioAsync(content, content.ContentType, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + StreamingAudioTranscriptionUpdate.DeserializeStreamingAudioTranscriptionUpdate, + cancellationToken); + } + + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public virtual AsyncCollectionResult TranscribeAudioStreamingAsync(string audioFilePath, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(audioFilePath, nameof(audioFilePath)); + + FileStream inputStream = File.OpenRead(audioFilePath); + + MultiPartFormDataBinaryContent content + = CreatePerCallTranscriptionOptions(options, stream: true) + .ToMultipartContent(inputStream, audioFilePath); + + AsyncSseUpdateCollection result = new( + async () => await TranscribeAudioAsync(content, content.ContentType, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + StreamingAudioTranscriptionUpdate.DeserializeStreamingAudioTranscriptionUpdate, + cancellationToken); + result.AdditionalDisposalActions.Add(() => inputStream?.Dispose()); + return result; + } + + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public virtual CollectionResult TranscribeAudioStreaming(Stream audio, string audioFilename, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(audio, nameof(audio)); + Argument.AssertNotNullOrEmpty(audioFilename, nameof(audioFilename)); + + MultiPartFormDataBinaryContent content + = CreatePerCallTranscriptionOptions(options, stream: true) + .ToMultipartContent(audio, audioFilename); + + return new SseUpdateCollection( + () => TranscribeAudio(content, content.ContentType, cancellationToken.ToRequestOptions(streaming: true)), + StreamingAudioTranscriptionUpdate.DeserializeStreamingAudioTranscriptionUpdate, + cancellationToken); + } + + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public virtual CollectionResult TranscribeAudioStreaming(string audioFilePath, AudioTranscriptionOptions options = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(audioFilePath, nameof(audioFilePath)); + + FileStream inputStream = File.OpenRead(audioFilePath); + + MultiPartFormDataBinaryContent content + = CreatePerCallTranscriptionOptions(options, stream: true) + .ToMultipartContent(inputStream, audioFilePath); + + SseUpdateCollection result = new( + () => TranscribeAudio(content, content.ContentType, cancellationToken.ToRequestOptions(streaming: true)), + StreamingAudioTranscriptionUpdate.DeserializeStreamingAudioTranscriptionUpdate, + cancellationToken); + result.AdditionalDisposalActions.Add(() => inputStream?.Dispose()); + return result; + } + #endregion #region TranslateAudio @@ -315,9 +391,18 @@ private void CreateSpeechGenerationOptions(string text, GeneratedSpeechVoice voi options.Model = _model; } - private void CreateAudioTranscriptionOptions(Stream audio, string audioFilename, ref AudioTranscriptionOptions options) + internal virtual AudioTranscriptionOptions CreatePerCallTranscriptionOptions(AudioTranscriptionOptions userOptions, bool stream = false) { - options.Model = _model; + AudioTranscriptionOptions copiedOptions = userOptions is null ? new() : userOptions.GetClone(); + + copiedOptions.Model = _model; + + if (stream) + { + copiedOptions.Stream = true; + } + + return copiedOptions; } private void CreateAudioTranslationOptions(Stream audio, string audioFilename, ref AudioTranslationOptions options) diff --git a/src/Custom/Audio/AudioTokenLogProbabilityDetails.cs b/src/Custom/Audio/AudioTokenLogProbabilityDetails.cs new file mode 100644 index 000000000..054538163 --- /dev/null +++ b/src/Custom/Audio/AudioTokenLogProbabilityDetails.cs @@ -0,0 +1,18 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Audio; + +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] +[CodeGenType("DotNetAudioLogProbsProperties")] +public partial class AudioTokenLogProbabilityDetails +{ + // CUSTOM: Renamed. + [CodeGenMember("Logprob")] + public float LogProbability { get; } + + // CUSTOM: Renamed, type changed to ReadOnlyMemory + [CodeGenMember("Bytes")] + public ReadOnlyMemory Utf8Bytes { get; } +} \ No newline at end of file diff --git a/src/Custom/Audio/AudioTranscription.Serialization.cs b/src/Custom/Audio/AudioTranscription.Serialization.cs index 28b1538eb..7169a6feb 100644 --- a/src/Custom/Audio/AudioTranscription.Serialization.cs +++ b/src/Custom/Audio/AudioTranscription.Serialization.cs @@ -20,6 +20,7 @@ internal static AudioTranscription FromResponse(PipelineResponse response) text: response.Content?.ToString(), words: new ChangeTrackingList(), segments: new ChangeTrackingList(), + transcriptionTokenLogProbabilities: new ChangeTrackingList(), additionalBinaryDataProperties: new Dictionary()); } diff --git a/src/Custom/Audio/AudioTranscription.cs b/src/Custom/Audio/AudioTranscription.cs index 8395da987..7d0428966 100644 --- a/src/Custom/Audio/AudioTranscription.cs +++ b/src/Custom/Audio/AudioTranscription.cs @@ -1,14 +1,24 @@ using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Audio; -[CodeGenType("CreateTranscriptionResponseVerboseJson")] +[CodeGenType("DotNetCombinedJsonTranscriptionResponse")] public partial class AudioTranscription { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. - private InternalCreateTranscriptionResponseVerboseJsonTask Task { get; } = InternalCreateTranscriptionResponseVerboseJsonTask.Transcribe; + private string Task { get; } = "transcribe"; // CUSTOM: Made nullable because this is an optional property. /// The duration of the input audio. public TimeSpan? Duration { get; } + + // CUSTOM: + // - Added Experimental attribute. + // - Reused common logprob type. + // - Made readonly. + [Experimental("OPENAI001")] + [CodeGenMember("Logprobs")] + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } } \ No newline at end of file diff --git a/src/Custom/Audio/AudioTranscriptionIncludes.cs b/src/Custom/Audio/AudioTranscriptionIncludes.cs new file mode 100644 index 000000000..e987c1d25 --- /dev/null +++ b/src/Custom/Audio/AudioTranscriptionIncludes.cs @@ -0,0 +1,24 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Audio; + +// CUSTOM: Added Experimental attribute. +/// +/// Specifies the timestamp granularities to populate for a transcription. +/// +[Experimental("OPENAI001")] +[Flags] +public enum AudioTranscriptionIncludes +{ + /// + /// The default value that, when equivalent to a request's flags, specifies no additional include[] values to provide. + /// + Default = 0, + + /// + /// The value that, when present in the request's flags, specifies that audio information should include token log + /// probabilities. + /// + Logprobs = 1, +} \ No newline at end of file diff --git a/src/Custom/Audio/AudioTranscriptionOptions.cs b/src/Custom/Audio/AudioTranscriptionOptions.cs index 4e6818424..8bf8fc8e7 100644 --- a/src/Custom/Audio/AudioTranscriptionOptions.cs +++ b/src/Custom/Audio/AudioTranscriptionOptions.cs @@ -1,12 +1,14 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Security.Cryptography; namespace OpenAI.Audio; [CodeGenType("CreateTranscriptionRequest")] -[CodeGenSuppress("AudioTranscriptionOptions", typeof(BinaryData), typeof(InternalCreateTranscriptionRequestModel))] +[CodeGenVisibility(nameof(AudioTranscriptionOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(AudioTranscriptionOptions), typeof(BinaryData), typeof(InternalCreateTranscriptionRequestModel))] public partial class AudioTranscriptionOptions { // CUSTOM: Made internal. This value comes from a parameter on the client method. @@ -20,6 +22,10 @@ public partial class AudioTranscriptionOptions [CodeGenMember("TimestampGranularities")] internal IList InternalTimestampGranularities { get; } + // CUSTOM: Made internal to allow specification by the operation method. + [CodeGenMember("Stream")] + internal bool? Stream { get; set; } + // CUSTOM: Made public now that there are no required properties. /// Initializes a new instance of . public AudioTranscriptionOptions() @@ -31,6 +37,17 @@ public AudioTranscriptionOptions() /// public AudioTimestampGranularities TimestampGranularities { get; set; } + // CUSTOM: Added Experimental attribute. + /// + /// Flags specifying which additional response information should be provided on transcription results. + /// + [Experimental("OPENAI001")] + public AudioTranscriptionIncludes Includes { get; set; } + + // CUSTOM: Internal in favor of [Flags] enumeration value. + [CodeGenMember("Include")] + internal IList InternalInclude { get; } + internal MultiPartFormDataBinaryContent ToMultipartContent(Stream audio, string audioFilename) { MultiPartFormDataBinaryContent content = new(); @@ -68,6 +85,32 @@ internal MultiPartFormDataBinaryContent ToMultipartContent(Stream audio, string content.Add("segment", "timestamp_granularities[]"); } + if (Includes.HasFlag(AudioTranscriptionIncludes.Logprobs)) + { + content.Add("logprobs", "include[]"); + } + + if (Stream == true) + { + content.Add(true, "stream"); + } + return content; } + + internal AudioTranscriptionOptions GetClone() + { + AudioTranscriptionOptions copiedOptions = (AudioTranscriptionOptions)this.MemberwiseClone(); + + if (SerializedAdditionalRawData is not null) + { + copiedOptions.SerializedAdditionalRawData = new ChangeTrackingDictionary(); + foreach (KeyValuePair sourcePair in SerializedAdditionalRawData) + { + copiedOptions.SerializedAdditionalRawData[sourcePair.Key] = sourcePair.Value; + } + } + + return copiedOptions; + } } diff --git a/src/Custom/Audio/AudioTranslation.Serialization.cs b/src/Custom/Audio/AudioTranslation.Serialization.cs index 3eeed49f1..5b04f8050 100644 --- a/src/Custom/Audio/AudioTranslation.Serialization.cs +++ b/src/Custom/Audio/AudioTranslation.Serialization.cs @@ -1,6 +1,5 @@ using System; using System.ClientModel.Primitives; -using System.Collections.Generic; using System.Text.Json; namespace OpenAI.Audio; @@ -13,13 +12,7 @@ internal static AudioTranslation FromResponse(PipelineResponse response) if (response?.Headers?.TryGetValue("Content-Type", out string contentType) == true && contentType.StartsWith("text/plain", StringComparison.Ordinal)) { - return new AudioTranslation( - task: default, - language: null, - duration: null, - text: response.Content?.ToString(), - segments: new ChangeTrackingList(), - additionalBinaryDataProperties: new Dictionary()); + return new AudioTranslation(null, text: response.Content?.ToString(), null, task: default, null, null); } using var document = JsonDocument.Parse(response.Content); diff --git a/src/Custom/Audio/AudioTranslation.cs b/src/Custom/Audio/AudioTranslation.cs index 9a7b51f90..352e9b56c 100644 --- a/src/Custom/Audio/AudioTranslation.cs +++ b/src/Custom/Audio/AudioTranslation.cs @@ -6,7 +6,7 @@ namespace OpenAI.Audio; public partial class AudioTranslation { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. - private InternalCreateTranslationResponseVerboseJsonTask Task { get; } = InternalCreateTranslationResponseVerboseJsonTask.Translate; + private string Task { get; } = "translate"; // CUSTOM: Made nullable because this is an optional property. /// The duration of the input audio. diff --git a/src/Custom/Audio/AudioTranslationOptions.cs b/src/Custom/Audio/AudioTranslationOptions.cs index b1d3f7609..eb90e5b3c 100644 --- a/src/Custom/Audio/AudioTranslationOptions.cs +++ b/src/Custom/Audio/AudioTranslationOptions.cs @@ -1,10 +1,12 @@ using System; +using System.Collections.Generic; using System.IO; namespace OpenAI.Audio; [CodeGenType("CreateTranslationRequest")] -[CodeGenSuppress("AudioTranslationOptions", typeof(BinaryData), typeof(InternalCreateTranslationRequestModel))] +[CodeGenVisibility(nameof(AudioTranslationOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(AudioTranslationOptions), typeof(BinaryData), typeof(InternalCreateTranslationRequestModel))] public partial class AudioTranslationOptions { // CUSTOM: Made internal. This value comes from a parameter on the client method. @@ -15,12 +17,6 @@ public partial class AudioTranslationOptions // - Added setter. internal InternalCreateTranslationRequestModel Model { get; set; } - // CUSTOM: Made public now that there are no required properties. - /// Initializes a new instance of . - public AudioTranslationOptions() - { - } - internal MultiPartFormDataBinaryContent ToMultipartContent(Stream audio, string audioFilename) { MultiPartFormDataBinaryContent content = new(); @@ -40,4 +36,20 @@ internal MultiPartFormDataBinaryContent ToMultipartContent(Stream audio, string return content; } + + internal AudioTranslationOptions GetClone() + { + AudioTranslationOptions copiedOptions = (AudioTranslationOptions)this.MemberwiseClone(); + + if (SerializedAdditionalRawData is not null) + { + copiedOptions.SerializedAdditionalRawData = new ChangeTrackingDictionary(); + foreach (KeyValuePair sourcePair in SerializedAdditionalRawData) + { + copiedOptions.SerializedAdditionalRawData[sourcePair.Key] = sourcePair.Value; + } + } + + return copiedOptions; + } } \ No newline at end of file diff --git a/src/Custom/Audio/GeneratedSpeechVoice.cs b/src/Custom/Audio/GeneratedSpeechVoice.cs index 5a28431cd..b15a9b062 100644 --- a/src/Custom/Audio/GeneratedSpeechVoice.cs +++ b/src/Custom/Audio/GeneratedSpeechVoice.cs @@ -5,7 +5,7 @@ namespace OpenAI.Audio; /// The voice to use in the generated speech. Previews of the available voices can be found in the /// text-to-speech guide. /// -[CodeGenType("CreateSpeechRequestVoice")] +[CodeGenType("DotNetAudioVoiceIds")] public readonly partial struct GeneratedSpeechVoice { } \ No newline at end of file diff --git a/src/Custom/Audio/Internal/GeneratorStubs.cs b/src/Custom/Audio/Internal/GeneratorStubs.cs index dbab1b779..fb305ecdd 100644 --- a/src/Custom/Audio/Internal/GeneratorStubs.cs +++ b/src/Custom/Audio/Internal/GeneratorStubs.cs @@ -1,30 +1,17 @@ namespace OpenAI.Audio; -// CUSTOM: Made internal. - -[CodeGenType("CreateSpeechRequestModel")] -internal readonly partial struct InternalCreateSpeechRequestModel { } - -[CodeGenType("CreateTranscriptionRequestModel")] -internal readonly partial struct InternalCreateTranscriptionRequestModel { } - -[CodeGenType("CreateTranscriptionRequestTimestampGranularities")] -internal readonly partial struct InternalCreateTranscriptionRequestTimestampGranularities { } - -[CodeGenType("CreateTranscriptionResponseJson")] -internal partial class InternalCreateTranscriptionResponseJson { } - -[CodeGenType("CreateTranscriptionResponseVerboseJsonTask")] -internal readonly partial struct InternalCreateTranscriptionResponseVerboseJsonTask { } - -[CodeGenType("CreateTranslationRequestModel")] -internal readonly partial struct InternalCreateTranslationRequestModel { } - -[CodeGenType("CreateTranslationResponseJson")] -internal partial class InternalCreateTranslationResponseJson { } - -[CodeGenType("CreateTranslationResponseVerboseJsonTask")] -internal readonly partial struct InternalCreateTranslationResponseVerboseJsonTask { } - -[CodeGenType("AudioResponseFormat")] -internal readonly partial struct InternalAudioResponseFormat { } \ No newline at end of file +[CodeGenType("AudioResponseFormat")] internal readonly partial struct InternalAudioResponseFormat { } +[CodeGenType("CreateSpeechRequestModel")] internal readonly partial struct InternalCreateSpeechRequestModel { } +[CodeGenType("CreateTranscriptionRequestAccept")] internal readonly partial struct InternalCreateTranscriptionRequestAccept {} +[CodeGenType("CreateTranscriptionRequestModel")] internal readonly partial struct InternalCreateTranscriptionRequestModel { } +[CodeGenType("CreateTranscriptionRequestTimestampGranularities")] internal readonly partial struct InternalCreateTranscriptionRequestTimestampGranularities { } +[CodeGenType("CreateTranscriptionResponseJson")] internal partial class InternalCreateTranscriptionResponseJson { } +[CodeGenType("CreateTranscriptionResponseVerboseJson")] internal partial class InternalCreateTranscriptionResponseVerboseJson { } +[CodeGenType("DotNetCombinedJsonTranscriptionResponseTask")] internal readonly partial struct InternalDotNetCombinedJsonTranscriptionResponseTask { } +[CodeGenType("CreateTranscriptionResponseVerboseJsonTask")] internal readonly partial struct InternalCreateTranscriptionResponseVerboseJsonTask { } +[CodeGenType("CreateTranslationRequestModel")] internal readonly partial struct InternalCreateTranslationRequestModel { } +[CodeGenType("CreateTranslationResponseJson")] internal partial class InternalCreateTranslationResponseJson { } +[CodeGenType("CreateTranslationResponseVerboseJsonTask")] internal readonly partial struct InternalCreateTranslationResponseVerboseJsonTask { } +[CodeGenType("TranscriptionInclude")] internal readonly partial struct InternalTranscriptionInclude { } +[CodeGenType("UnknownCreateTranscriptionResponseStreamEvent")] internal partial class InternalUnknownCreateTranscriptionResponseStreamEvent { } +[CodeGenType("CreateTranscriptionResponseJsonLogprob")] internal partial class InternalCreateTranscriptionResponseJsonLogprob { } \ No newline at end of file diff --git a/src/Custom/Audio/OpenAIAudioModelFactory.cs b/src/Custom/Audio/OpenAIAudioModelFactory.cs index 79fb03a86..3d168a3c5 100644 --- a/src/Custom/Audio/OpenAIAudioModelFactory.cs +++ b/src/Custom/Audio/OpenAIAudioModelFactory.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace OpenAI.Audio; @@ -9,18 +11,27 @@ public static partial class OpenAIAudioModelFactory { /// Initializes a new instance of . /// A new instance for mocking. - public static AudioTranscription AudioTranscription(string language = null, TimeSpan? duration = null, string text = null, IEnumerable words = null, IEnumerable segments = null) + [EditorBrowsable(EditorBrowsableState.Never)] + public static AudioTranscription AudioTranscription(string language, TimeSpan? duration, string text, IEnumerable words, IEnumerable segments) + => AudioTranscription(language, duration, text, words, segments, null); + + /// Initializes a new instance of . + /// A new instance for mocking. + [Experimental("OPENAI001")] + public static AudioTranscription AudioTranscription(string language = null, TimeSpan? duration = null, string text = null, IEnumerable words = null, IEnumerable segments = null, IEnumerable transcriptionTokenLogProbabilities = null) { words ??= new List(); segments ??= new List(); + transcriptionTokenLogProbabilities ??= new List(); return new AudioTranscription( language, text, words.ToList(), segments.ToList(), - InternalCreateTranscriptionResponseVerboseJsonTask.Transcribe, + "transcribe", duration, + transcriptionTokenLogProbabilities.ToList(), additionalBinaryDataProperties: null); } @@ -34,7 +45,7 @@ public static AudioTranslation AudioTranslation(string language = null, TimeSpan language, text, segments: segments.ToList(), - task: InternalCreateTranslationResponseVerboseJsonTask.Translate, + task: "translate", duration, additionalBinaryDataProperties: null); } diff --git a/src/Custom/Audio/SpeechGenerationOptions.cs b/src/Custom/Audio/SpeechGenerationOptions.cs index 409851900..e318b1e51 100644 --- a/src/Custom/Audio/SpeechGenerationOptions.cs +++ b/src/Custom/Audio/SpeechGenerationOptions.cs @@ -1,7 +1,10 @@ +using System.ClientModel; + namespace OpenAI.Audio; /// The options to configure text-to-speech audio generation. [CodeGenType("CreateSpeechRequest")] +[CodeGenVisibility(nameof(SpeechGenerationOptions), CodeGenVisibility.Public)] [CodeGenSuppress("SpeechGenerationOptions", typeof(InternalCreateSpeechRequestModel), typeof(string), typeof(GeneratedSpeechVoice))] public partial class SpeechGenerationOptions { @@ -24,12 +27,6 @@ public partial class SpeechGenerationOptions [CodeGenMember("Voice")] internal GeneratedSpeechVoice Voice { get; set; } - // CUSTOM: Made public now that there are no required properties. - /// Initializes a new instance of . - public SpeechGenerationOptions() - { - } - // CUSTOM: Renamed. /// /// The speed of the generated audio expressed as a ratio between 0.5 and 2.0. The default is 1.0. @@ -37,4 +34,6 @@ public SpeechGenerationOptions() [CodeGenMember("Speed")] public float? SpeedRatio { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } \ No newline at end of file diff --git a/src/Custom/Audio/Streaming/StreamingAudioTranscriptionTextDeltaUpdate.cs b/src/Custom/Audio/Streaming/StreamingAudioTranscriptionTextDeltaUpdate.cs new file mode 100644 index 000000000..cddc7db1e --- /dev/null +++ b/src/Custom/Audio/Streaming/StreamingAudioTranscriptionTextDeltaUpdate.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Audio; + +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] +[CodeGenType("TranscriptTextDeltaEvent")] +public partial class StreamingAudioTranscriptionTextDeltaUpdate +{ + // CUSTOM: Rename; make readonly + [CodeGenMember("Logprobs")] + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } +} \ No newline at end of file diff --git a/src/Custom/Audio/Streaming/StreamingAudioTranscriptionTextDoneUpdate.cs b/src/Custom/Audio/Streaming/StreamingAudioTranscriptionTextDoneUpdate.cs new file mode 100644 index 000000000..24dcc2760 --- /dev/null +++ b/src/Custom/Audio/Streaming/StreamingAudioTranscriptionTextDoneUpdate.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Audio; + +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] +[CodeGenType("TranscriptTextDoneEvent")] +public partial class StreamingAudioTranscriptionTextDoneUpdate +{ + // CUSTOM: Rename; make readonly; apply shared audio logprobs type + [CodeGenMember("Logprobs")] + public IReadOnlyList TranscriptionTokenLogProbabilities { get; } +} \ No newline at end of file diff --git a/src/Custom/Audio/Streaming/StreamingAudioTranscriptionUpdate.cs b/src/Custom/Audio/Streaming/StreamingAudioTranscriptionUpdate.cs new file mode 100644 index 000000000..98e6f576a --- /dev/null +++ b/src/Custom/Audio/Streaming/StreamingAudioTranscriptionUpdate.cs @@ -0,0 +1,10 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Audio; + +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] +[CodeGenType("CreateTranscriptionResponseStreamEvent")] +public partial class StreamingAudioTranscriptionUpdate +{ +} \ No newline at end of file diff --git a/src/Custom/Audio/Streaming/StreamingAudioTranscriptionUpdateKind.cs b/src/Custom/Audio/Streaming/StreamingAudioTranscriptionUpdateKind.cs new file mode 100644 index 000000000..a34a65143 --- /dev/null +++ b/src/Custom/Audio/Streaming/StreamingAudioTranscriptionUpdateKind.cs @@ -0,0 +1,10 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Audio; + +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] +[CodeGenType("CreateTranscriptionResponseStreamEventType")] +public readonly partial struct StreamingAudioTranscriptionUpdateKind +{ +} \ No newline at end of file diff --git a/src/Custom/Batch/BatchClient.cs b/src/Custom/Batch/BatchClient.cs index 2729490fa..b00e1e555 100644 --- a/src/Custom/Batch/BatchClient.cs +++ b/src/Custom/Batch/BatchClient.cs @@ -15,8 +15,8 @@ namespace OpenAI.Batch; [Experimental("OPENAI001")] [CodeGenType("Batches")] [CodeGenSuppress("BatchClient", typeof(ClientPipeline), typeof(Uri))] -[CodeGenSuppress("CreateBatch", typeof(string), typeof(InternalCreateBatchRequestEndpoint), typeof(InternalBatchCompletionTimeframe), typeof(IDictionary), typeof(CancellationToken))] -[CodeGenSuppress("CreateBatchAsync", typeof(string), typeof(InternalCreateBatchRequestEndpoint), typeof(InternalBatchCompletionTimeframe), typeof(IDictionary), typeof(CancellationToken))] +[CodeGenSuppress("CreateBatch", typeof(string), typeof(InternalCreateBatchRequestEndpoint), typeof(string), typeof(IDictionary), typeof(CancellationToken))] +[CodeGenSuppress("CreateBatchAsync", typeof(string), typeof(InternalCreateBatchRequestEndpoint), typeof(string), typeof(IDictionary), typeof(CancellationToken))] [CodeGenSuppress("CreateBatch", typeof(BinaryContent), typeof(RequestOptions))] [CodeGenSuppress("CreateBatchAsync", typeof(BinaryContent), typeof(RequestOptions))] [CodeGenSuppress("RetrieveBatch", typeof(string), typeof(CancellationToken))] @@ -25,8 +25,8 @@ namespace OpenAI.Batch; [CodeGenSuppress("CancelBatchAsync", typeof(string), typeof(CancellationToken))] [CodeGenSuppress("CancelBatch", typeof(string), typeof(RequestOptions))] [CodeGenSuppress("CancelBatchAsync", typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListBatches", typeof(string), typeof(int?), typeof(CancellationToken))] -[CodeGenSuppress("ListBatchesAsync", typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetBatches", typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetBatchesAsync", typeof(string), typeof(int?), typeof(CancellationToken))] public partial class BatchClient { // CUSTOM: Added as a convenience. diff --git a/src/Custom/Chat/ChatAudioOptions.cs b/src/Custom/Chat/ChatAudioOptions.cs index d0b7afeaa..045ec74a2 100644 --- a/src/Custom/Chat/ChatAudioOptions.cs +++ b/src/Custom/Chat/ChatAudioOptions.cs @@ -1,9 +1,8 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. /// /// Represents the configuration details for output audio requested in a chat completion request. /// @@ -11,7 +10,9 @@ namespace OpenAI.Chat; /// When provided to a instance's property, /// the request's specified content modalities will be automatically updated to reflect desired audio output. /// +[Experimental("OPENAI001")] [CodeGenType("CreateChatCompletionRequestAudio1")] +[CodeGenVisibility(nameof(ChatAudioOptions), CodeGenVisibility.Internal)] public partial class ChatAudioOptions { // CUSTOM: Renamed. diff --git a/src/Custom/Chat/ChatClient.Protocol.cs b/src/Custom/Chat/ChatClient.Protocol.cs index 6e3264c35..4f52f29ee 100644 --- a/src/Custom/Chat/ChatClient.Protocol.cs +++ b/src/Custom/Chat/ChatClient.Protocol.cs @@ -1,7 +1,9 @@ using System; using System.ClientModel; using System.ClientModel.Primitives; +using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; namespace OpenAI.Chat; @@ -9,6 +11,12 @@ namespace OpenAI.Chat; /// The service client for the OpenAI Chat Completions endpoint. [CodeGenSuppress("CreateChatCompletionAsync", typeof(BinaryContent), typeof(RequestOptions))] [CodeGenSuppress("CreateChatCompletion", typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("GetChatCompletionMessagesAsync", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("GetChatCompletionMessages", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("GetChatCompletionsAsync", typeof(string), typeof(int?), typeof(string), typeof(IDictionary), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("GetChatCompletions", typeof(string), typeof(int?), typeof(string), typeof(IDictionary), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("UpdateChatCompletionAsync", typeof(string), typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("UpdateChatCompletion", typeof(string), typeof(BinaryContent), typeof(RequestOptions))] public partial class ChatClient { /// @@ -44,4 +52,44 @@ public virtual ClientResult CompleteChat(BinaryContent content, RequestOptions o using PipelineMessage message = CreateCreateChatCompletionRequest(content, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } + + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public virtual ClientResult GetChatCompletion(string completionId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(completionId, nameof(completionId)); + + using PipelineMessage message = CreateGetChatCompletionRequest(completionId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public virtual async Task GetChatCompletionAsync(string completionId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(completionId, nameof(completionId)); + + using PipelineMessage message = CreateGetChatCompletionRequest(completionId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public virtual ClientResult DeleteChatCompletion(string completionId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(completionId, nameof(completionId)); + + using PipelineMessage message = CreateDeleteChatCompletionRequest(completionId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public virtual async Task DeleteChatCompletionAsync(string completionId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(completionId, nameof(completionId)); + + using PipelineMessage message = CreateDeleteChatCompletionRequest(completionId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } } diff --git a/src/Custom/Chat/ChatClient.cs b/src/Custom/Chat/ChatClient.cs index 6befdfc5c..90f65efe6 100644 --- a/src/Custom/Chat/ChatClient.cs +++ b/src/Custom/Chat/ChatClient.cs @@ -1,8 +1,10 @@ +using OpenAI.Evals; using OpenAI.Telemetry; using System; using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -16,12 +18,19 @@ namespace OpenAI.Chat; /// The service client for OpenAI chat operations. [CodeGenType("Chat")] [CodeGenSuppress("ChatClient", typeof(ClientPipeline), typeof(Uri))] -[CodeGenSuppress("CreateChatCompletionAsync", typeof(ChatCompletionOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateChatCompletion", typeof(ChatCompletionOptions), typeof(CancellationToken))] +[CodeGenSuppress("CreateChatCompletionAsync", typeof(ChatCompletionOptions), typeof(CancellationToken))] +[CodeGenSuppress("GetChatCompletionMessages", typeof(string), typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(CancellationToken))] +[CodeGenSuppress("GetChatCompletionMessagesAsync", typeof(string), typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(CancellationToken))] +[CodeGenSuppress("GetChatCompletions", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(IDictionary), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetChatCompletionsAsync", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(IDictionary), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("UpdateChatCompletion", typeof(string), typeof(IDictionary), typeof(CancellationToken))] +[CodeGenSuppress("UpdateChatCompletionAsync", typeof(string), typeof(IDictionary), typeof(CancellationToken))] public partial class ChatClient { private readonly string _model; private readonly OpenTelemetrySource _telemetry; + private static readonly InternalChatCompletionStreamOptions s_includeUsageStreamOptions = new(includeUsage: true, additionalBinaryDataProperties: null); // CUSTOM: Added as a convenience. /// Initializes a new instance of . @@ -109,10 +118,10 @@ public virtual async Task> CompleteChatAsync(IEnume try { - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await CompleteChatAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - ChatCompletion chatCompletion = (ChatCompletion)result; + ChatCompletion chatCompletion = ChatCompletion.FromClientResult(result); scope?.RecordChatCompletion(chatCompletion); return ClientResult.FromValue(chatCompletion, result.GetRawResponse()); } @@ -139,9 +148,9 @@ public virtual ClientResult CompleteChat(IEnumerable CompleteChat options ??= new(); CreateChatCompletionOptions(messages, ref options, stream: true); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); return new AsyncSseUpdateCollection( async () => await CompleteChatAsync(content, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), StreamingChatCompletionUpdate.DeserializeStreamingChatCompletionUpdate, @@ -214,7 +223,7 @@ public virtual CollectionResult CompleteChatStrea options ??= new(); CreateChatCompletionOptions(messages, ref options, stream: true); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); return new SseUpdateCollection( () => CompleteChat(content, cancellationToken.ToRequestOptions(streaming: true)), StreamingChatCompletionUpdate.DeserializeStreamingChatCompletionUpdate, @@ -249,6 +258,54 @@ public virtual AsyncCollectionResult CompleteChat public virtual CollectionResult CompleteChatStreaming(params ChatMessage[] messages) => CompleteChatStreaming(messages, default(ChatCompletionOptions)); + // CUSTOM: + // - Added Experimental attribute. + // - Call FromClientResult. + [Experimental("OPENAI001")] + public virtual async Task> GetChatCompletionAsync(string completionId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(completionId, nameof(completionId)); + + ClientResult result = await GetChatCompletionAsync(completionId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue(ChatCompletion.FromClientResult(result), result.GetRawResponse()); + } + + // CUSTOM: + // - Added Experimental attribute. + // - Call FromClientResult. + [Experimental("OPENAI001")] + public virtual ClientResult GetChatCompletion(string completionId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(completionId, nameof(completionId)); + + ClientResult result = GetChatCompletion(completionId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue(ChatCompletion.FromClientResult(result), result.GetRawResponse()); + } + + // CUSTOM: + // - Added Experimental attribute. + // - Call FromClientResult. + [Experimental("OPENAI001")] + public virtual async Task> DeleteChatCompletionAsync(string completionId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(completionId, nameof(completionId)); + + ClientResult result = await DeleteChatCompletionAsync(completionId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue(ChatCompletionDeletionResult.FromClientResult(result), result.GetRawResponse()); + } + + // CUSTOM: + // - Added Experimental attribute. + // - Call FromClientResult. + [Experimental("OPENAI001")] + public virtual ClientResult DeleteChatCompletion(string completionId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(completionId, nameof(completionId)); + + ClientResult result = DeleteChatCompletion(completionId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue(ChatCompletionDeletionResult.FromClientResult(result), result.GetRawResponse()); + } + private void CreateChatCompletionOptions(IEnumerable messages, ref ChatCompletionOptions options, bool stream = false) { options.Messages = messages.ToList(); @@ -264,7 +321,4 @@ private void CreateChatCompletionOptions(IEnumerable messages, ref options.StreamOptions = null; } } - - private static readonly InternalChatCompletionStreamOptions s_includeUsageStreamOptions - = new(includeUsage: true, additionalBinaryDataProperties: null); } \ No newline at end of file diff --git a/src/Custom/Chat/ChatCompletion.cs b/src/Custom/Chat/ChatCompletion.cs index cb0d45451..7b34fb166 100644 --- a/src/Custom/Chat/ChatCompletion.cs +++ b/src/Custom/Chat/ChatCompletion.cs @@ -1,6 +1,11 @@ +using OpenAI.Internal; using System; +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Text.Json; namespace OpenAI.Chat; @@ -14,11 +19,11 @@ public partial class ChatCompletion // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. /// The object type, which is always `chat.completion`. [CodeGenMember("Object")] - internal InternalCreateChatCompletionResponseObject Object { get; } = InternalCreateChatCompletionResponseObject.ChatCompletion; + internal string Object { get; } = "chat.completion"; // CUSTOM: Made internal. [CodeGenMember("ServiceTier")] - internal InternalCreateChatCompletionResponseServiceTier? ServiceTier { get; } + internal InternalServiceTier? ServiceTier { get; } // CUSTOM: Made internal. We only get back a single choice, and instead we flatten the structure for usability. [CodeGenMember("Choices")] @@ -86,9 +91,19 @@ public partial class ChatCompletion [Obsolete($"This property is obsolete. Please use {nameof(ToolCalls)} instead.")] public ChatFunctionCall FunctionCall => Choices[0].Message.FunctionCall; + // CUSTOM: Added Experimental attribute. /// The audio response generated by the model. + [Experimental("OPENAI001")] public ChatOutputAudio OutputAudio => Choices[0].Message.Audio; - public IReadOnlyList Annotations - => [.. Choices[0].Message.Annotations]; + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public IReadOnlyList Annotations => [.. Choices[0].Message.Annotations]; + + internal static ChatCompletion FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeChatCompletion(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Chat/ChatCompletionDeletionResult.cs b/src/Custom/Chat/ChatCompletionDeletionResult.cs new file mode 100644 index 000000000..117a45655 --- /dev/null +++ b/src/Custom/Chat/ChatCompletionDeletionResult.cs @@ -0,0 +1,27 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.Chat; + +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] +[CodeGenType("ChatCompletionDeleted")] +public partial class ChatCompletionDeletionResult +{ + // CUSTOM: Made internal. + [CodeGenMember("Object")] + internal string Object { get; } = "chat.completion.deleted"; + + // CUSTOM: Renamed. + [CodeGenMember("Id")] + public string ChatCompletionId { get; } + + internal static ChatCompletionDeletionResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeChatCompletionDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} diff --git a/src/Custom/Chat/ChatCompletionOptions.cs b/src/Custom/Chat/ChatCompletionOptions.cs index fa02f9f49..bb9c841fe 100644 --- a/src/Custom/Chat/ChatCompletionOptions.cs +++ b/src/Custom/Chat/ChatCompletionOptions.cs @@ -1,4 +1,6 @@ +using OpenAI.Internal; using System; +using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -10,7 +12,8 @@ namespace OpenAI.Chat; /// Request-level options for chat completion. /// [CodeGenType("CreateChatCompletionRequest")] -[CodeGenSuppress("ChatCompletionOptions", typeof(IEnumerable), typeof(InternalCreateChatCompletionRequestModel?))] +[CodeGenVisibility(nameof(ChatCompletionOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(ChatCompletionOptions), typeof(IEnumerable), typeof(string))] [CodeGenSerialization(nameof(Messages), SerializationValueHook = nameof(SerializeMessagesValue))] [CodeGenSerialization(nameof(StopSequences), SerializationValueHook = nameof(SerializeStopSequencesValue), DeserializationValueHook = nameof(DeserializeStopSequencesValue))] [CodeGenSerialization(nameof(LogitBiases), SerializationValueHook = nameof(SerializeLogitBiasesValue), DeserializationValueHook = nameof(DeserializeLogitBiasesValue))] @@ -34,7 +37,7 @@ public partial class ChatCompletionOptions /// ID of the model to use. See the model endpoint compatibility table for details on which models work with the Chat API. /// [CodeGenMember("Model")] - internal InternalCreateChatCompletionRequestModel? Model { get; set; } + internal string Model { get; set; } // CUSTOM: Made internal. We only ever request a single choice. /// How many chat completion choices to generate for each input message. Note that you will be charged based on the number of generated tokens across all of the choices. Keep `n` as `1` to minimize costs. @@ -50,19 +53,6 @@ public partial class ChatCompletionOptions [CodeGenMember("StreamOptions")] internal InternalChatCompletionStreamOptions StreamOptions { get; set; } - // CUSTOM: Made public now that there are no required properties. - /// Initializes a new instance of for deserialization. - public ChatCompletionOptions() - { - Messages = new ChangeTrackingList(); - LogitBiases = new ChangeTrackingDictionary(); - StopSequences = new ChangeTrackingList(); - Tools = new ChangeTrackingList(); - Functions = new ChangeTrackingList(); - InternalModalities = new ChangeTrackingList(); - Metadata = new ChangeTrackingDictionary(); - } - // CUSTOM: Renamed. /// Whether to return log probabilities of the output tokens or not. If true, returns the log probabilities of each output token returned in the message content. [CodeGenMember("Logprobs")] @@ -118,7 +108,7 @@ public ChatCompletionOptions() public bool? AllowParallelToolCalls { get; set; } [CodeGenMember("ServiceTier")] - internal InternalCreateChatCompletionRequestServiceTier? _serviceTier; + internal InternalServiceTier? _serviceTier; // CUSTOM: Renamed. /// @@ -128,12 +118,6 @@ public ChatCompletionOptions() [CodeGenMember("User")] public string EndUserId { get; set; } - // CUSTOM: Added the Experimental attribute. - /// - /// If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. - /// - [Experimental("OPENAI001")] - public long? Seed { get; set; } // CUSTOM: Hide deprecated max_tokens and reroute to newer max_completion_tokens. [CodeGenMember("MaxTokens")] @@ -167,12 +151,15 @@ public ChatCompletionOptions() [CodeGenMember("Store")] public bool? StoredOutputEnabled { get; set; } - // CUSTOM: Renamed. + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. /// /// (o1 and newer reasoning models only) Constrains effort on reasoning for reasoning models. /// Currently supported values are , , and . /// Reducing reasoning effort can result in faster responses and fewer tokens used on reasoning in a response. /// + [Experimental("OPENAI001")] [CodeGenMember("ReasoningEffort")] public ChatReasoningEffortLevel? ReasoningEffortLevel { get; set; } @@ -189,6 +176,9 @@ private IList InternalModalities } private IList _internalModalities; + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. /// /// Specifies the content types that the model should generate in its responses. /// @@ -197,6 +187,7 @@ private IList InternalModalities /// Some models like gpt-4o-audio-preview can also generate audio, and this can be requested by combining ["text","audio"] via /// the flags | . /// + [Experimental("OPENAI001")] public ChatResponseModalities ResponseModalities { get => _responseModalities; @@ -208,11 +199,23 @@ public ChatResponseModalities ResponseModalities } private ChatResponseModalities _responseModalities; - // CUSTOM: Renamed. + // CUSTOM: Use scenario-specific type. + [CodeGenMember("ResponseFormat")] + public ChatResponseFormat ResponseFormat { get; set; } + + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + [Experimental("OPENAI001")] [CodeGenMember("Audio")] public ChatAudioOptions AudioOptions { get; set; } - // CUSTOM: rename. + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + [Experimental("OPENAI001")] [CodeGenMember("Prediction")] public ChatOutputPrediction OutputPrediction { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Chat/ChatFinishReason.cs b/src/Custom/Chat/ChatFinishReason.cs index 0debf3489..56e2f8035 100644 --- a/src/Custom/Chat/ChatFinishReason.cs +++ b/src/Custom/Chat/ChatFinishReason.cs @@ -37,7 +37,7 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenType("CreateChatCompletionResponseChoiceFinishReason1")] +[CodeGenType("CreateChatCompletionResponseChoiceFinishReason")] public enum ChatFinishReason { /// diff --git a/src/Custom/Chat/ChatInputAudioFormat.cs b/src/Custom/Chat/ChatInputAudioFormat.cs index c28d7be5d..153e4a44f 100644 --- a/src/Custom/Chat/ChatInputAudioFormat.cs +++ b/src/Custom/Chat/ChatInputAudioFormat.cs @@ -1,9 +1,9 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] [CodeGenType("ChatCompletionRequestMessageContentPartAudioInputAudioFormat")] public readonly partial struct ChatInputAudioFormat { diff --git a/src/Custom/Chat/ChatMessageAnnotation.cs b/src/Custom/Chat/ChatMessageAnnotation.cs index 6ddfcb0a1..6c62efd92 100644 --- a/src/Custom/Chat/ChatMessageAnnotation.cs +++ b/src/Custom/Chat/ChatMessageAnnotation.cs @@ -1,10 +1,10 @@ using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] [CodeGenType("ChatCompletionResponseMessageAnnotation")] public partial class ChatMessageAnnotation { @@ -18,7 +18,7 @@ public partial class ChatMessageAnnotation [CodeGenMember("UrlCitation")] internal InternalChatCompletionResponseMessageAnnotationUrlCitation UrlCitation { get; } - [CodeGenMember("Type")] - internal InternalChatCompletionResponseMessageAnnotationType Type { get; } = "url_citation"; - + // CUSTOM: Made internal + [CodeGenMember("Kind")] + internal string Kind { get; } = "url_citation"; } \ No newline at end of file diff --git a/src/Custom/Chat/ChatMessageContent.cs b/src/Custom/Chat/ChatMessageContent.cs index fd2bbc363..aa810a8df 100644 --- a/src/Custom/Chat/ChatMessageContent.cs +++ b/src/Custom/Chat/ChatMessageContent.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; -using System.Text; namespace OpenAI.Chat; @@ -37,56 +36,4 @@ internal bool IsInnerCollectionDefined() { return !(Items is ChangeTrackingList changeTrackingList && changeTrackingList.IsUndefined); } - - /// - /// Returns a string representation of the chat message content by iterating through all content parts. - /// - /// A formatted string representation of all content parts. - public override string ToString() - { - StringBuilder builder = new(); - - if (Count == 0) - { - return ""; - } - - for (int i = 0; i < Count; i++) - { - if (i > 0) { - builder.AppendLine(); - } - - var part = this[i]; - switch (part.Kind) - { - case ChatMessageContentPartKind.Text: - builder.Append(part.Text); - break; - - case ChatMessageContentPartKind.Image: - builder.Append(""); - break; - - case ChatMessageContentPartKind.InputAudio: - builder.Append(" -[CodeGenType("ChatMessageContentPart")] -[CodeGenSuppress("ChatMessageContentPart", typeof(IDictionary))] +[CodeGenType("ChatCompletionRequestMessageContentPart")] public partial class ChatMessageContentPart { private readonly ChatMessageContentPartKind _kind; @@ -83,6 +83,9 @@ internal ChatMessageContentPart( /// Present when is . public string ImageBytesMediaType => _imageUri?.ImageBytesMediaType; + // CUSTOM: + // - Added Experimental attribute. + // - Spread. /// /// The encoded binary audio payload associated with the content part. /// @@ -90,8 +93,12 @@ internal ChatMessageContentPart( /// Present when is . The content part /// represents user role audio input. /// + [Experimental("OPENAI001")] public BinaryData InputAudioBytes => _inputAudio?.Data; + // CUSTOM: + // - Added Experimental attribute. + // - Spread. /// /// The encoding format that the audio data provided in should be interpreted with. /// @@ -99,26 +106,39 @@ internal ChatMessageContentPart( /// Present when is . The content part /// represents user role audio input. /// + [Experimental("OPENAI001")] public ChatInputAudioFormat? InputAudioFormat => _inputAudio?.Format; - // CUSTOM: Spread. + // CUSTOM: + // - Added Experimental attribute. + // - Spread. /// The ID of the previously uploaded file that the content part represents. /// Present when is and the content part refers to a previously uploaded file. + [Experimental("OPENAI001")] public string FileId => _fileFile?.FileId; - // CUSTOM: Spread. + // CUSTOM: + // - Added Experimental attribute. + // - Spread. /// The binary file content of the file content part. /// Present when is and the content refers to data for a new file. + [Experimental("OPENAI001")] public BinaryData FileBytes => _fileFile?.FileBytes; - // CUSTOM: Spread. + // CUSTOM: + // - Added Experimental attribute. + // - Spread. /// The MIME type of the file, e.g., application/pdf. /// Present when is and the content refers to data for a new file. + [Experimental("OPENAI001")] public string FileBytesMediaType => _fileFile?.FileBytesMediaType; - // CUSTOM: Spread. + // CUSTOM: + // - Added Experimental attribute. + // - Spread. /// The filename for the new file content creation that the content part encapsulates. /// Present when is and the content refers to data for a new file. + [Experimental("OPENAI001")] public string Filename => _fileFile?.Filename; // CUSTOM: Spread. @@ -157,7 +177,7 @@ public static ChatMessageContentPart CreateImagePart(Uri imageUri, ChatImageDeta return new ChatMessageContentPart( kind: ChatMessageContentPartKind.Image, - imageUri: new(imageUri) { Detail = imageDetailLevel }); + imageUri: new(imageUri, imageDetailLevel)); } /// Creates a new that encapsulates an image. @@ -176,7 +196,7 @@ public static ChatMessageContentPart CreateImagePart(BinaryData imageBytes, stri return new ChatMessageContentPart( kind: ChatMessageContentPartKind.Image, - imageUri: new(imageBytes, imageBytesMediaType) { Detail = imageDetailLevel }); + imageUri: new(imageBytes, imageBytesMediaType, imageDetailLevel)); } /// Creates a new that encapsulates a refusal coming from the model. @@ -198,6 +218,7 @@ public static ChatMessageContentPart CreateRefusalPart(string refusal) /// /// The audio data. /// The format of the audio data. + [Experimental("OPENAI001")] public static ChatMessageContentPart CreateInputAudioPart(BinaryData inputAudioBytes, ChatInputAudioFormat inputAudioFormat) { Argument.AssertNotNull(inputAudioBytes, nameof(inputAudioBytes)); @@ -209,6 +230,7 @@ public static ChatMessageContentPart CreateInputAudioPart(BinaryData inputAudioB /// Creates a new that represents a previously uploaded file. /// is null or empty. + [Experimental("OPENAI001")] public static ChatMessageContentPart CreateFilePart(string fileId) { Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); @@ -227,6 +249,7 @@ public static ChatMessageContentPart CreateFilePart(string fileId) /// The filename to use for the file that will be created. /// or is null. /// or > is an empty string, and was expected to be non-empty. + [Experimental("OPENAI001")] public static ChatMessageContentPart CreateFilePart(BinaryData fileBytes, string fileBytesMediaType, string filename) { Argument.AssertNotNull(fileBytes, nameof(fileBytes)); @@ -235,10 +258,7 @@ public static ChatMessageContentPart CreateFilePart(BinaryData fileBytes, string return new ChatMessageContentPart( kind: ChatMessageContentPartKind.File, - fileFile: new(fileBytes, fileBytesMediaType) - { - Filename = filename, - }); + fileFile: new(fileBytes, fileBytesMediaType, filename)); } /// diff --git a/src/Custom/Chat/ChatMessageContentPartKind.cs b/src/Custom/Chat/ChatMessageContentPartKind.cs index 57c267404..4df8de982 100644 --- a/src/Custom/Chat/ChatMessageContentPartKind.cs +++ b/src/Custom/Chat/ChatMessageContentPartKind.cs @@ -1,17 +1,27 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Chat; /// /// Represents the possibles of underlying data for a chat message's content property. /// +[CodeGenType("ChatCompletionRequestMessageContentPartType")] public enum ChatMessageContentPartKind { + [CodeGenMember("Text")] Text, + [CodeGenMember("Refusal")] Refusal, + [CodeGenMember("ImageUrl")] Image, + [Experimental("OPENAI001")] + [CodeGenMember("InputAudio")] InputAudio, + [Experimental("OPENAI001")] + [CodeGenMember("File")] File, } \ No newline at end of file diff --git a/src/Custom/Chat/ChatMessageRole.cs b/src/Custom/Chat/ChatMessageRole.cs index e238e81f0..ce62b36bf 100644 --- a/src/Custom/Chat/ChatMessageRole.cs +++ b/src/Custom/Chat/ChatMessageRole.cs @@ -1,3 +1,5 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Chat; /// @@ -105,6 +107,7 @@ public enum ChatMessageRole /// /// developer replaces system when using o1 and newer models. /// + [Experimental("OPENAI001")] [CodeGenMember("Developer")] Developer, } \ No newline at end of file diff --git a/src/Custom/Chat/ChatOutputAudio.cs b/src/Custom/Chat/ChatOutputAudio.cs index 7c281cd97..32db01a0f 100644 --- a/src/Custom/Chat/ChatOutputAudio.cs +++ b/src/Custom/Chat/ChatOutputAudio.cs @@ -1,12 +1,13 @@ using System; -using System.Collections.Generic; -using System.Text.RegularExpressions; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. /// /// Represents the audio output generated by the model as part of a chat completion response. /// +[Experimental("OPENAI001")] [CodeGenType("ChatCompletionResponseMessageAudio1")] public partial class ChatOutputAudio { diff --git a/src/Custom/Chat/ChatOutputAudioFormat.cs b/src/Custom/Chat/ChatOutputAudioFormat.cs index 51007b9c8..e2d754b4f 100644 --- a/src/Custom/Chat/ChatOutputAudioFormat.cs +++ b/src/Custom/Chat/ChatOutputAudioFormat.cs @@ -1,13 +1,13 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. /// /// Specifies the audio format the model should use when generating output audio as part of a chat completion /// response. /// +[Experimental("OPENAI001")] [CodeGenType("CreateChatCompletionRequestAudioFormat")] public readonly partial struct ChatOutputAudioFormat { diff --git a/src/Custom/Chat/ChatOutputAudioReference.cs b/src/Custom/Chat/ChatOutputAudioReference.cs index 2efae4c84..c567a2599 100644 --- a/src/Custom/Chat/ChatOutputAudioReference.cs +++ b/src/Custom/Chat/ChatOutputAudioReference.cs @@ -1,9 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Text.RegularExpressions; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. /// /// Represents an ID-based reference to a past audio output as received from a prior chat completion response, as /// provided when creating an instance for use in a conversation history. @@ -14,6 +13,7 @@ namespace OpenAI.Chat; /// responses, respectively. The constructor overload can also be /// used to automatically populate the appropriate properties from a instance. /// +[Experimental("OPENAI001")] [CodeGenType("ChatCompletionRequestAssistantMessageAudio1")] public partial class ChatOutputAudioReference { diff --git a/src/Custom/Chat/ChatOutputAudioVoice.cs b/src/Custom/Chat/ChatOutputAudioVoice.cs index 5b6902978..cff490c5e 100644 --- a/src/Custom/Chat/ChatOutputAudioVoice.cs +++ b/src/Custom/Chat/ChatOutputAudioVoice.cs @@ -1,13 +1,13 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. /// /// Specifies the available voices that the model can use when generating output audio as part of a chat completion. /// -[CodeGenType("CreateChatCompletionRequestAudioVoice")] +[Experimental("OPENAI001")] +[CodeGenType("DotNetChatVoiceIds")] public readonly partial struct ChatOutputAudioVoice { diff --git a/src/Custom/Chat/ChatOutputPrediction.cs b/src/Custom/Chat/ChatOutputPrediction.cs index a564591af..a5414a7ff 100644 --- a/src/Custom/Chat/ChatOutputPrediction.cs +++ b/src/Custom/Chat/ChatOutputPrediction.cs @@ -1,9 +1,10 @@ -using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] [CodeGenType("ChatOutputPrediction")] public partial class ChatOutputPrediction { diff --git a/src/Custom/Chat/ChatOutputTokenUsageDetails.cs b/src/Custom/Chat/ChatOutputTokenUsageDetails.cs index ea402a2e5..85092294b 100644 --- a/src/Custom/Chat/ChatOutputTokenUsageDetails.cs +++ b/src/Custom/Chat/ChatOutputTokenUsageDetails.cs @@ -1,3 +1,5 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Chat; /// A breakdown of the number of tokens used to generate the output as reported in . @@ -15,9 +17,17 @@ public partial class ChatOutputTokenUsageDetails [CodeGenMember("AudioTokens")] public int AudioTokenCount { get; } + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + [Experimental("OPENAI001")] [CodeGenMember("AcceptedPredictionTokens")] public int AcceptedPredictionTokenCount { get; } + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + [Experimental("OPENAI001")] [CodeGenMember("RejectedPredictionTokens")] public int RejectedPredictionTokenCount { get; } } \ No newline at end of file diff --git a/src/Custom/Chat/ChatReasoningEffortLevel.cs b/src/Custom/Chat/ChatReasoningEffortLevel.cs index 77add09ba..d02f9eb2f 100644 --- a/src/Custom/Chat/ChatReasoningEffortLevel.cs +++ b/src/Custom/Chat/ChatReasoningEffortLevel.cs @@ -1,9 +1,10 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] [CodeGenType("ReasoningEffort")] public readonly partial struct ChatReasoningEffortLevel -{} \ No newline at end of file +{ +} \ No newline at end of file diff --git a/src/Custom/Chat/ChatResponseFormat.cs b/src/Custom/Chat/ChatResponseFormat.cs index c7cbe9f14..888bc1608 100644 --- a/src/Custom/Chat/ChatResponseFormat.cs +++ b/src/Custom/Chat/ChatResponseFormat.cs @@ -21,14 +21,14 @@ namespace OpenAI.Chat; /// /// /// -[CodeGenType("ChatResponseFormat")] +[CodeGenType("DotNetChatResponseFormat")] public partial class ChatResponseFormat { /// Creates a new requesting plain text. - public static ChatResponseFormat CreateTextFormat() => new InternalChatResponseFormatText(); + public static ChatResponseFormat CreateTextFormat() => new InternalDotNetChatResponseFormatText(); /// Creates a new requesting valid JSON, a.k.a. JSON mode. - public static ChatResponseFormat CreateJsonObjectFormat() => new InternalChatResponseFormatJsonObject(); + public static ChatResponseFormat CreateJsonObjectFormat() => new InternalDotNetChatResponseFormatJsonObject(); /// /// Creates a new requesting adherence to the specified JSON schema, @@ -94,17 +94,13 @@ public static ChatResponseFormat CreateJsonSchemaFormat(string jsonSchemaFormatN Argument.AssertNotNullOrEmpty(jsonSchemaFormatName, nameof(jsonSchemaFormatName)); Argument.AssertNotNull(jsonSchema, nameof(jsonSchema)); - InternalResponseFormatJsonSchemaJsonSchema internalSchema = new( + InternalDotNetChatResponseFormatJsonSchemaJsonSchema internalSchema = new( jsonSchemaFormatDescription, jsonSchemaFormatName, - jsonSchemaIsStrict, schema: jsonSchema, + jsonSchemaIsStrict, additionalBinaryDataProperties: null); - return new InternalChatResponseFormatJsonSchema(internalSchema); + return new InternalDotNetChatResponseFormatJsonSchema(internalSchema); } - - // CUSTOM: Made internal. - internal ChatResponseFormat() - { } } \ No newline at end of file diff --git a/src/Custom/Chat/ChatResponseModalities.cs b/src/Custom/Chat/ChatResponseModalities.cs index d6bb276da..c042c12bf 100644 --- a/src/Custom/Chat/ChatResponseModalities.cs +++ b/src/Custom/Chat/ChatResponseModalities.cs @@ -1,7 +1,9 @@ using System; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. /// /// Specifies the types of output content the model should generate for a chat completion request. /// @@ -12,6 +14,7 @@ namespace OpenAI.Chat; /// | . /// /// +[Experimental("OPENAI001")] [Flags] public enum ChatResponseModalities : int { diff --git a/src/Custom/Chat/ChatTool.cs b/src/Custom/Chat/ChatTool.cs index 88081a4a2..3423b3f47 100644 --- a/src/Custom/Chat/ChatTool.cs +++ b/src/Custom/Chat/ChatTool.cs @@ -25,8 +25,7 @@ internal ChatTool(InternalFunctionDefinition function) Function = function; } - - // CUSTOM: Renamed. + // CUSTOM: Public type applied. /// The kind of tool. [CodeGenMember("Type")] public ChatToolKind Kind { get; } = ChatToolKind.Function; @@ -121,16 +120,14 @@ public static ChatTool CreateFunctionTool(string functionName, string functionDe { Argument.AssertNotNull(functionName, nameof(functionName)); - InternalFunctionDefinition function = new(functionName) - { - Description = functionDescription, - Parameters = functionParameters, - Strict = functionSchemaIsStrict, - }; - return new( + function: new( + description: functionDescription, + name: functionName, + strict: functionSchemaIsStrict, + parameters: functionParameters, + additionalBinaryDataProperties: null), kind: ChatToolKind.Function, - function: function, additionalBinaryDataProperties: null); } } diff --git a/src/Custom/Chat/ChatToolCall.cs b/src/Custom/Chat/ChatToolCall.cs index 23aa229ba..d40ab462e 100644 --- a/src/Custom/Chat/ChatToolCall.cs +++ b/src/Custom/Chat/ChatToolCall.cs @@ -19,7 +19,7 @@ public partial class ChatToolCall [CodeGenMember("Function")] internal InternalChatCompletionMessageToolCallFunction Function { get; set; } - // CUSTOM: Renamed. + // CUSTOM: Public type applied.. /// The kind of tool call. [CodeGenMember("Type")] public ChatToolCallKind Kind { get; } = ChatToolCallKind.Function; diff --git a/src/Custom/Chat/ChatToolCallKind.cs b/src/Custom/Chat/ChatToolCallKind.cs index 63f702c58..2cfa10cad 100644 --- a/src/Custom/Chat/ChatToolCallKind.cs +++ b/src/Custom/Chat/ChatToolCallKind.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenType("ChatCompletionMessageToolCallType")] +[CodeGenType("ChatToolCallKind")] public enum ChatToolCallKind { Function, diff --git a/src/Custom/Chat/ChatToolChoice.Serialization.cs b/src/Custom/Chat/ChatToolChoice.Serialization.cs index 283d52199..33bbf5571 100644 --- a/src/Custom/Chat/ChatToolChoice.Serialization.cs +++ b/src/Custom/Chat/ChatToolChoice.Serialization.cs @@ -48,7 +48,7 @@ internal static ChatToolChoice DeserializeChatToolChoice(JsonElement element, Mo } else { - InternalChatCompletionNamedToolChoiceType type = default; + string type = default; InternalChatCompletionNamedToolChoiceFunction function = default; IDictionary serializedAdditionalRawData = default; Dictionary rawDataDictionary = new Dictionary(); @@ -56,7 +56,7 @@ internal static ChatToolChoice DeserializeChatToolChoice(JsonElement element, Mo { if (property.NameEquals("type"u8)) { - type = new InternalChatCompletionNamedToolChoiceType(property.Value.GetString()); + type = property.Value.GetString(); continue; } if (property.NameEquals("function"u8)) @@ -73,7 +73,7 @@ internal static ChatToolChoice DeserializeChatToolChoice(JsonElement element, Mo return new ChatToolChoice( predefined: false, predefinedValue: null, - type: InternalChatCompletionNamedToolChoiceType.Function, + type: FunctionType, function: new InternalChatCompletionNamedToolChoiceFunction(function.Name), serializedAdditionalRawData: rawDataDictionary); } diff --git a/src/Custom/Chat/ChatToolChoice.cs b/src/Custom/Chat/ChatToolChoice.cs index 6d6a2bc84..e2fee2010 100644 --- a/src/Custom/Chat/ChatToolChoice.cs +++ b/src/Custom/Chat/ChatToolChoice.cs @@ -27,9 +27,10 @@ namespace OpenAI.Chat; [CodeGenType("ChatCompletionToolChoice")] public partial class ChatToolChoice { + private const string FunctionType = "function"; private readonly bool _predefined; private readonly string _predefinedValue; - private readonly InternalChatCompletionNamedToolChoiceType? _type; + private readonly string _type; private readonly InternalChatCompletionNamedToolChoiceFunction _function; private const string AutoValue = "auto"; @@ -42,7 +43,7 @@ internal ChatToolChoice() } // CUSTOM: Added to support deserialization. - internal ChatToolChoice(bool predefined, string predefinedValue, InternalChatCompletionNamedToolChoiceType? type, InternalChatCompletionNamedToolChoiceFunction function, IDictionary serializedAdditionalRawData) + internal ChatToolChoice(bool predefined, string predefinedValue, string type, InternalChatCompletionNamedToolChoiceFunction function, IDictionary serializedAdditionalRawData) { _predefined = predefined; _predefinedValue = predefinedValue; @@ -104,7 +105,7 @@ public static ChatToolChoice CreateFunctionChoice(string functionName) return new ChatToolChoice( predefined: false, predefinedValue: null, - type: InternalChatCompletionNamedToolChoiceType.Function, + type: FunctionType, function: new InternalChatCompletionNamedToolChoiceFunction(functionName), serializedAdditionalRawData: null); } diff --git a/src/Custom/Chat/ChatToolKind.cs b/src/Custom/Chat/ChatToolKind.cs index 3f8cbbe01..94e48dd5e 100644 --- a/src/Custom/Chat/ChatToolKind.cs +++ b/src/Custom/Chat/ChatToolKind.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenType("ChatCompletionToolType")] +[CodeGenType("ChatToolKind")] public enum ChatToolKind { Function, diff --git a/src/Custom/Chat/ChatWebSearchOptions.cs b/src/Custom/Chat/ChatWebSearchOptions.cs index ca6a24bfe..01640b19f 100644 --- a/src/Custom/Chat/ChatWebSearchOptions.cs +++ b/src/Custom/Chat/ChatWebSearchOptions.cs @@ -1,8 +1,10 @@ using OpenAI.Internal; -using System; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. +[Experimental("OPENAI001")] [CodeGenType("CreateChatCompletionRequestWebSearchOptions")] public partial class ChatWebSearchOptions { diff --git a/src/Custom/Chat/Internal/GeneratorStubs.cs b/src/Custom/Chat/Internal/GeneratorStubs.cs index a54aba1f6..9e5acc63e 100644 --- a/src/Custom/Chat/Internal/GeneratorStubs.cs +++ b/src/Custom/Chat/Internal/GeneratorStubs.cs @@ -20,15 +20,9 @@ internal readonly partial struct InternalChatCompletionNamedToolChoiceType { } [CodeGenType("ChatCompletionRequestMessageContentPartImage")] internal partial class InternalChatCompletionRequestMessageContentPartImage { } -[CodeGenType("ChatCompletionRequestMessageContentPartImageType")] -internal readonly partial struct InternalChatCompletionRequestMessageContentPartImageType { } - [CodeGenType("ChatCompletionRequestMessageContentPartText")] internal partial class InternalChatCompletionRequestMessageContentPartText { } -[CodeGenType("ChatCompletionRequestMessageContentPartTextType")] -internal readonly partial struct InternalChatCompletionRequestMessageContentPartTextType { } - [CodeGenType("ChatCompletionResponseMessageFunctionCall")] internal partial class InternalChatCompletionResponseMessageFunctionCall { } @@ -38,9 +32,6 @@ internal readonly partial struct InternalChatCompletionResponseMessageRole { } [CodeGenType("ChatCompletionStreamOptions")] internal partial class InternalChatCompletionStreamOptions { } -[CodeGenType("ChatCompletionStreamResponseDeltaRole3")] -internal readonly partial struct InternalChatCompletionStreamResponseDeltaRole { } - [CodeGenType("CreateChatCompletionFunctionResponse")] internal partial class InternalCreateChatCompletionFunctionResponse { } @@ -56,15 +47,9 @@ internal readonly partial struct InternalCreateChatCompletionFunctionResponseObj [CodeGenType("ChatCompletionRequestMessageContentPartRefusal")] internal partial class InternalChatCompletionRequestMessageContentPartRefusal { } -[CodeGenType("ChatCompletionRequestMessageContentPartRefusalType")] -internal readonly partial struct InternalChatCompletionRequestMessageContentPartRefusalType { } - [CodeGenType("CreateChatCompletionRequestModel")] internal readonly partial struct InternalCreateChatCompletionRequestModel { } -[CodeGenType("CreateChatCompletionRequestServiceTier")] -internal readonly partial struct InternalCreateChatCompletionRequestServiceTier { } - [CodeGenType("CreateChatCompletionRequestToolChoice")] internal readonly partial struct InternalCreateChatCompletionRequestToolChoice { } @@ -98,21 +83,18 @@ internal partial class InternalCreateChatCompletionStreamResponseUsage { } [CodeGenType("CreateChatCompletionRequestModality")] internal readonly partial struct InternalCreateChatCompletionRequestModality { } -[CodeGenType("ChatCompletionRequestMessageContentPartAudioType")] -internal readonly partial struct InternalChatCompletionRequestMessageContentPartAudioType { } - [CodeGenType("ChatCompletionRequestMessageContentPartAudio")] internal partial class InternalChatCompletionRequestMessageContentPartAudio { } [CodeGenType("ChatCompletionRequestMessageContentPartAudioInputAudio")] internal partial class InternalChatCompletionRequestMessageContentPartAudioInputAudio { } +[CodeGenType("ChatOutputPredictionType")] +internal readonly partial struct InternalChatOutputPredictionKind { } + [CodeGenType("UnknownChatOutputPrediction")] internal partial class InternalUnknownChatOutputPrediction { } -[CodeGenType("ChatCompletionRequestMessageContentPartFileType")] -internal readonly partial struct InternalChatCompletionRequestMessageContentPartFileType { } - [CodeGenType("CreateChatCompletionRequestWebSearchOptionsUserLocation1Type")] internal readonly partial struct InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type { } @@ -128,5 +110,14 @@ internal partial class InternalCreateChatCompletionRequestWebSearchOptionsUserLo [CodeGenType("ChatCompletionResponseMessageAnnotationUrlCitation")] internal partial class InternalChatCompletionResponseMessageAnnotationUrlCitation { } -[CodeGenType("CreateChatCompletionStreamResponseChoiceFinishReason1")] -internal readonly partial struct InternalCreateChatCompletionStreamResponseChoiceFinishReason1 { } +[CodeGenType("DotNetChatResponseFormatJsonSchemaJsonSchema")] +internal partial class InternalDotNetChatResponseFormatJsonSchemaJsonSchema { } + +[CodeGenType("UnknownChatCompletionRequestMessageContentPart")] +internal partial class InternalUnknownChatCompletionRequestMessageContentPart { } + +[CodeGenType("ChatCompletionListObject")] internal readonly partial struct InternalChatCompletionListObject {} +[CodeGenType("ChatCompletionDeletedObject")] internal readonly partial struct InternalChatCompletionDeletedObject {} +[CodeGenType("ChatCompletionMessageListObject")] internal readonly partial struct InternalChatCompletionMessageListObject {} +[CodeGenType("ChatCompletionList")] internal partial class InternalChatCompletionList {} +[CodeGenType("ChatCompletionMessageList")] internal partial class InternalChatCompletionMessageList {} \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalChatCompletionMessageListDatum.cs b/src/Custom/Chat/Internal/InternalChatCompletionMessageListDatum.cs new file mode 100644 index 000000000..6b63f4c5a --- /dev/null +++ b/src/Custom/Chat/Internal/InternalChatCompletionMessageListDatum.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Chat; + +[CodeGenType("ChatCompletionMessageListDatum")] +internal partial class InternalChatCompletionMessageListDatum +{ + // CUSTOM: Ensure enumerated value is used. + [CodeGenMember("Role")] + internal ChatMessageRole Role { get; set; } = ChatMessageRole.Assistant; +} \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartFileFile.cs b/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartFileFile.cs index 87259c0ab..e755c6092 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartFileFile.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartFileFile.cs @@ -6,24 +6,35 @@ namespace OpenAI.Chat; [CodeGenType("ChatCompletionRequestMessageContentPartFileFile")] internal partial class InternalChatCompletionRequestMessageContentPartFileFile { - private readonly BinaryData _fileBytes; - private readonly string _fileBytesMediaType; + private BinaryData _fileBytes; + private string _fileBytesMediaType; // CUSTOM: Changed type from Uri to string to be able to support data URIs properly. /// Either a URL of the image or the base64 encoded image data. [CodeGenMember("FileData")] - internal string FileData { get; } + internal string InternalFileData + { + get => _internalFileData; + set + { + _internalFileData = value; + if (value is not null && !DataEncodingHelpers.TryParseDataUri(value, out _fileBytes, out _fileBytesMediaType)) + { + throw new ArgumentException($"Input did not parse a valid data URI."); + } + } + } + private string _internalFileData; - public InternalChatCompletionRequestMessageContentPartFileFile(BinaryData fileBytes, string fileBytesMediaType) + public InternalChatCompletionRequestMessageContentPartFileFile(BinaryData fileBytes, string fileBytesMediaType, string filename) + : this(filename: filename, null, null, null) { Argument.AssertNotNull(fileBytes, nameof(fileBytes)); Argument.AssertNotNull(fileBytesMediaType, nameof(fileBytesMediaType)); _fileBytes = fileBytes; _fileBytesMediaType = fileBytesMediaType; - - string base64EncodedData = Convert.ToBase64String(_fileBytes.ToArray()); - FileData = $"data:{_fileBytesMediaType};base64,{base64EncodedData}"; + _internalFileData = DataEncodingHelpers.CreateDataUri(fileBytes, fileBytesMediaType); } public BinaryData FileBytes => _fileBytes; diff --git a/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs b/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs index 13d33edd8..4fec659e2 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs @@ -8,68 +8,47 @@ namespace OpenAI.Chat; [CodeGenSuppress("InternalChatCompletionRequestMessageContentPartImageImageUrl", typeof(string))] internal partial class InternalChatCompletionRequestMessageContentPartImageImageUrl { -#if NET8_0_OR_GREATER - [GeneratedRegex(@"^data:(?.+?);base64,(?.+)$")] - private static partial Regex ParseDataUriRegex(); -#else - private static Regex ParseDataUriRegex() => s_parseDataUriRegex; - private static readonly Regex s_parseDataUriRegex = new(@"^data:(?.+?);base64,(?.+)$", RegexOptions.Compiled); -#endif - - private readonly Uri _imageUri; - private readonly BinaryData _imageBytes; - private readonly string _imageBytesMediaType; + private Uri _imageUri; + private BinaryData _imageBytes; + private string _imageBytesMediaType; // CUSTOM: Changed type from Uri to string to be able to support data URIs properly. /// Either a URL of the image or the base64 encoded image data. [CodeGenMember("Url")] - internal string Url { get; } + internal string InternalUrl + { + get => _internalUrl; + set + { + _internalUrl = value; + if (value is not null && !DataEncodingHelpers.TryParseDataUri(value, out _imageBytes, out _imageBytesMediaType)) + { + _imageUri = new Uri(value); + } + } + } + private string _internalUrl; /// Initializes a new instance of . /// Either a URL of the image or the base64 encoded image data. /// is null. - public InternalChatCompletionRequestMessageContentPartImageImageUrl(Uri uri) + public InternalChatCompletionRequestMessageContentPartImageImageUrl(Uri uri, ChatImageDetailLevel? detailLevel = default) + : this(detailLevel, null, null) { Argument.AssertNotNull(uri, nameof(uri)); - _imageUri = uri; - - Url = uri.ToString(); + _internalUrl = uri.ToString(); } - public InternalChatCompletionRequestMessageContentPartImageImageUrl(BinaryData imageBytes, string imageBytesMediaType) + public InternalChatCompletionRequestMessageContentPartImageImageUrl(BinaryData imageBytes, string imageBytesMediaType, ChatImageDetailLevel? detailLevel = default) + : this(detailLevel, null, null) { Argument.AssertNotNull(imageBytes, nameof(imageBytes)); Argument.AssertNotNull(imageBytesMediaType, nameof(imageBytesMediaType)); _imageBytes = imageBytes; _imageBytesMediaType = imageBytesMediaType; - - string base64EncodedData = Convert.ToBase64String(_imageBytes.ToArray()); - Url = $"data:{_imageBytesMediaType};base64,{base64EncodedData}"; - } - - /// Initializes a new instance of . - /// Specifies the detail level of the image. Learn more in the [Vision guide](/docs/guides/vision/low-or-high-fidelity-image-understanding). - /// Either a URL of the image or the base64 encoded image data. - /// Keeps track of any properties unknown to the library. - internal InternalChatCompletionRequestMessageContentPartImageImageUrl(ChatImageDetailLevel? detail, string url, IDictionary serializedAdditionalRawData) - { - Match parsedDataUri = ParseDataUriRegex().Match(url); - - if (parsedDataUri.Success) - { - _imageBytes = BinaryData.FromBytes(Convert.FromBase64String(parsedDataUri.Groups["data"].Value)); - _imageBytesMediaType = parsedDataUri.Groups["type"].Value; - } - else - { - _imageUri = new Uri(url); - } - - Url = url; - Detail = detail; - _additionalBinaryDataProperties = serializedAdditionalRawData; + _internalUrl = DataEncodingHelpers.CreateDataUri(imageBytes, imageBytesMediaType); } public Uri ImageUri => _imageUri; diff --git a/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.cs b/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.cs index 1f9759860..8077ad869 100644 --- a/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.cs +++ b/src/Custom/Chat/Internal/InternalChatCompletionStreamResponseDelta.cs @@ -3,7 +3,6 @@ namespace OpenAI.Chat; [CodeGenType("ChatCompletionStreamResponseDelta")] -[CodeGenSuppress("InternalChatCompletionStreamResponseDelta")] internal partial class InternalChatCompletionStreamResponseDelta { // CUSTOM: Changed type from string. diff --git a/src/Custom/Chat/Internal/InternalChatOutputPredictionKind.cs b/src/Custom/Chat/Internal/InternalChatOutputPredictionKind.cs deleted file mode 100644 index 7b567d2b6..000000000 --- a/src/Custom/Chat/Internal/InternalChatOutputPredictionKind.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.Chat; - -[CodeGenType("ChatOutputPredictionType")] -internal readonly partial struct InternalChatOutputPredictionKind -{ - // CUSTOM: Rename for clarity. - [CodeGenMember("Content")] - public static InternalChatOutputPredictionKind StaticContent { get; } = new InternalChatOutputPredictionKind(ContentValue); -} \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.Serialization.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.Serialization.cs deleted file mode 100644 index ffbb4950c..000000000 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.Serialization.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Chat; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalChatResponseFormatJsonObject : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalChatResponseFormatJsonObject, writer, options); - - internal static void SerializeInternalChatResponseFormatJsonObject(InternalChatResponseFormatJsonObject instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.cs index a04c80e25..ca3d0fd48 100644 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.cs +++ b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonObject.cs @@ -1,6 +1,5 @@ namespace OpenAI.Chat; -[CodeGenType("ChatResponseFormatJsonObject")] -internal partial class InternalChatResponseFormatJsonObject -{ -} \ No newline at end of file +[CodeGenType("DotNetChatResponseFormatJsonObject")] +internal partial class InternalDotNetChatResponseFormatJsonObject +{ } \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.Serialization.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.Serialization.cs deleted file mode 100644 index d6da14972..000000000 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.Serialization.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Chat; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalChatResponseFormatJsonSchema : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalChatResponseFormatJsonSchema, writer, options); - - internal static void SerializeInternalChatResponseFormatJsonSchema(InternalChatResponseFormatJsonSchema instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - if (_additionalBinaryDataProperties?.ContainsKey("json_schema") != true) - { - writer.WritePropertyName("json_schema"u8); - writer.WriteObjectValue(JsonSchema, options); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - writer.WriteEndObject(); - } -} diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.cs index deb15ac4c..902b44616 100644 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.cs +++ b/src/Custom/Chat/Internal/InternalChatResponseFormatJsonSchema.cs @@ -5,7 +5,7 @@ namespace OpenAI.Chat; -[CodeGenType("ChatResponseFormatJsonSchema")] -internal partial class InternalChatResponseFormatJsonSchema +[CodeGenType("DotNetChatResponseFormatJsonSchema")] +internal partial class InternalDotNetChatResponseFormatJsonSchema { } \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatText.Serialization.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatText.Serialization.cs index 54277f919..5f282702b 100644 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatText.Serialization.cs +++ b/src/Custom/Chat/Internal/InternalChatResponseFormatText.Serialization.cs @@ -1,44 +1 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Chat; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalChatResponseFormatText : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalChatResponseFormatText, writer, options); - - internal static void SerializeInternalChatResponseFormatText(InternalChatResponseFormatText instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - writer.WriteEndObject(); - } -} + \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalChatResponseFormatText.cs b/src/Custom/Chat/Internal/InternalChatResponseFormatText.cs index 0b4a58c1c..8020e4b7c 100644 --- a/src/Custom/Chat/Internal/InternalChatResponseFormatText.cs +++ b/src/Custom/Chat/Internal/InternalChatResponseFormatText.cs @@ -1,6 +1,5 @@ namespace OpenAI.Chat; -[CodeGenType("ChatResponseFormatText")] -internal partial class InternalChatResponseFormatText -{ -} +[CodeGenType("DotNetChatResponseFormatText")] +internal partial class InternalDotNetChatResponseFormatText +{ } \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.Serialization.cs b/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.Serialization.cs index 909c525df..5f282702b 100644 --- a/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.Serialization.cs +++ b/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.Serialization.cs @@ -1,44 +1 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.Chat; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -internal partial class InternalUnknownChatResponseFormat : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeChatResponseFormat, writer, options); - - internal static void SerializeChatResponseFormat(InternalUnknownChatResponseFormat instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - => instance.WriteCore(writer, options); - - internal override void WriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - writer.WriteEndObject(); - } -} + \ No newline at end of file diff --git a/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.cs b/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.cs index 64d220fc9..2d5fb7517 100644 --- a/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.cs +++ b/src/Custom/Chat/Internal/InternalUnknownChatResponseFormat.cs @@ -1,6 +1,6 @@ namespace OpenAI.Chat; -[CodeGenType("UnknownChatResponseFormat")] +[CodeGenType("UnknownDotNetChatResponseFormat")] internal partial class InternalUnknownChatResponseFormat { } \ No newline at end of file diff --git a/src/Custom/Chat/Messages/AssistantChatMessage.cs b/src/Custom/Chat/Messages/AssistantChatMessage.cs index da669844d..2fd886132 100644 --- a/src/Custom/Chat/Messages/AssistantChatMessage.cs +++ b/src/Custom/Chat/Messages/AssistantChatMessage.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using System.Linq; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; @@ -10,13 +10,9 @@ namespace OpenAI.Chat; /// represent chat history or example interactions to guide model behavior. /// [CodeGenType("ChatCompletionRequestAssistantMessage")] +[CodeGenVisibility(nameof(AssistantChatMessage), CodeGenVisibility.Internal)] public partial class AssistantChatMessage : ChatMessage { - // CUSTOM: Made internal. - internal AssistantChatMessage() - { - } - /// /// Creates a new instance of using a collection of content items. /// For assistant messages, this can be one or more of type text or exactly one of type refusal. @@ -25,7 +21,7 @@ internal AssistantChatMessage() /// The collection of content items associated with the message. /// public AssistantChatMessage(IEnumerable contentParts) - : base(ChatMessageRole.Assistant, contentParts) + : this(new ChatMessageContent(contentParts), ChatMessageRole.Assistant, null, null, null, null, null, null) { Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); } @@ -38,7 +34,7 @@ public AssistantChatMessage(IEnumerable contentParts) /// The collection of text and image content items associated with the message. /// public AssistantChatMessage(params ChatMessageContentPart[] contentParts) - : base(ChatMessageRole.Assistant, contentParts) + : this(new ChatMessageContent(contentParts), ChatMessageRole.Assistant, null, null, null, null, null, null) { Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); } @@ -49,7 +45,7 @@ public AssistantChatMessage(params ChatMessageContentPart[] contentParts) /// /// The text content of the message. public AssistantChatMessage(string content) - : base(ChatMessageRole.Assistant, content) + : this(new ChatMessageContent([content]), ChatMessageRole.Assistant, null, null, null, null, null, null) { Argument.AssertNotNull(content, nameof(content)); } @@ -60,7 +56,7 @@ public AssistantChatMessage(string content) /// /// The tool_calls made by the model. public AssistantChatMessage(IEnumerable toolCalls) - : base(ChatMessageRole.Assistant) + : this(null, ChatMessageRole.Assistant, null, null, null, null, null, null) { Argument.AssertNotNullOrEmpty(toolCalls, nameof(toolCalls)); @@ -77,11 +73,9 @@ public AssistantChatMessage(IEnumerable toolCalls) /// The function_call made by the model. [Obsolete($"This constructor is obsolete. Please use the constructor that takes an IEnumerable parameter instead.")] public AssistantChatMessage(ChatFunctionCall functionCall) - : base(ChatMessageRole.Assistant) + : this(null, ChatMessageRole.Assistant, null, null, null, null, functionCall, null) { Argument.AssertNotNull(functionCall, nameof(functionCall)); - - FunctionCall = functionCall; } /// @@ -89,11 +83,11 @@ public AssistantChatMessage(ChatFunctionCall functionCall) /// that included audio with a correlation ID. /// /// The audio reference with an id, produced by the model. + [Experimental("OPENAI001")] public AssistantChatMessage(ChatOutputAudioReference outputAudioReference) + : this(null, ChatMessageRole.Assistant, null, null, null, null, null, outputAudioReference) { Argument.AssertNotNull(outputAudioReference, nameof(outputAudioReference)); - - OutputAudioReference = outputAudioReference; } /// @@ -111,7 +105,17 @@ public AssistantChatMessage(ChatOutputAudioReference outputAudioReference) /// The role of the provided chat completion response was not . /// public AssistantChatMessage(ChatCompletion chatCompletion) - : base(ChatMessageRole.Assistant, chatCompletion?.Content) + : this( + chatCompletion?.Content, + ChatMessageRole.Assistant, + null, + chatCompletion?.Refusal, + null, + null, + chatCompletion?.FunctionCall, + outputAudioReference: chatCompletion?.OutputAudio is not null + ? new(chatCompletion.OutputAudio.Id) + : null) { Argument.AssertNotNull(chatCompletion, nameof(chatCompletion)); @@ -120,12 +124,6 @@ public AssistantChatMessage(ChatCompletion chatCompletion) throw new NotSupportedException($"Cannot instantiate an {nameof(AssistantChatMessage)} from a {nameof(ChatCompletion)} with role: {chatCompletion.Role}."); } - Refusal = chatCompletion.Refusal; - FunctionCall = chatCompletion.FunctionCall; - if (chatCompletion.OutputAudio is not null) - { - OutputAudioReference = new(chatCompletion.OutputAudio.Id); - } foreach (ChatToolCall toolCall in chatCompletion.ToolCalls ?? []) { ToolCalls.Add(toolCall); @@ -142,12 +140,15 @@ public AssistantChatMessage(ChatCompletion chatCompletion) // CUSTOM: Common initialization for input model collection property. [CodeGenMember("ToolCalls")] - public IList ToolCalls { get; } = new ChangeTrackingList(); + public IList ToolCalls { get; } [Obsolete($"This property is obsolete. Please use {nameof(ToolCalls)} instead.")] public ChatFunctionCall FunctionCall { get; set; } - // CUSTOM: Renamed. + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + [Experimental("OPENAI001")] [CodeGenMember("Audio")] public ChatOutputAudioReference OutputAudioReference { get; set; } } \ No newline at end of file diff --git a/src/Custom/Chat/Messages/ChatMessage.cs b/src/Custom/Chat/Messages/ChatMessage.cs index 207a55c17..d998db46a 100644 --- a/src/Custom/Chat/Messages/ChatMessage.cs +++ b/src/Custom/Chat/Messages/ChatMessage.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; @@ -53,46 +54,24 @@ namespace OpenAI.Chat; /// /// [CodeGenType("ChatCompletionRequestMessage")] +[CodeGenSuppress("_content")] +[CodeGenVisibility(nameof(ChatMessage), CodeGenVisibility.Internal)] public partial class ChatMessage { /// /// The content associated with the message. The interpretation of this content will vary depending on the message type. /// - public ChatMessageContent Content { get; } = new ChatMessageContent(); + public ChatMessageContent Content { get; } // CUSTOM: Changed type from string to ChatMessageRole. [CodeGenMember("Role")] internal ChatMessageRole Role { get; set; } // CUSTOM: Made internal. - internal ChatMessage() - { - } - internal ChatMessage(ChatMessageRole role) - { - Role = role; - } - - internal ChatMessage(ChatMessageRole role, IEnumerable contentParts) : this(role) - { - if (contentParts != null) - { - foreach (ChatMessageContentPart contentPart in contentParts) - { - Content.Add(contentPart); - } - } - } - - internal ChatMessage(ChatMessageRole role, string content = null) : this(role) - { - if (content != null) - { - Content.Add(ChatMessageContentPart.CreateTextPart(content)); - } - } - + : this(null, role, null) + { } + #region SystemChatMessage /// public static SystemChatMessage CreateSystemMessage(string content) => new(content); @@ -106,12 +85,15 @@ internal ChatMessage(ChatMessageRole role, string content = null) : this(role) #region DeveloperChatMessage /// + [Experimental("OPENAI001")] public static DeveloperChatMessage CreateDeveloperMessage(string content) => new(content); /// + [Experimental("OPENAI001")] public static DeveloperChatMessage CreateDeveloperMessage(IEnumerable contentParts) => new(contentParts); /// + [Experimental("OPENAI001")] public static DeveloperChatMessage CreateDeveloperMessage(params ChatMessageContentPart[] contentParts) => new(contentParts); #endregion @@ -146,6 +128,7 @@ internal ChatMessage(ChatMessageRole role, string content = null) : this(role) public static AssistantChatMessage CreateAssistantMessage(ChatCompletion chatCompletion) => new(chatCompletion); /// + [Experimental("OPENAI001")] public static AssistantChatMessage CreateAssistantMessage(ChatOutputAudioReference outputAudioReference) => new(outputAudioReference); #endregion diff --git a/src/Custom/Chat/Messages/DeveloperChatMessage.cs b/src/Custom/Chat/Messages/DeveloperChatMessage.cs index 81da6810b..835ab1262 100644 --- a/src/Custom/Chat/Messages/DeveloperChatMessage.cs +++ b/src/Custom/Chat/Messages/DeveloperChatMessage.cs @@ -1,14 +1,18 @@ using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; +// CUSTOM: Added Experimental attribute. /// /// Represents a chat message of the developer role as supplied to a chat completion request. A developer message is /// generally supplied as the first message to a chat completion request and guides the model's behavior across future /// assistant role response messages. These messages may help control behavior, style, tone, and /// restrictions for a model-based assistant. Developer messages replace system messages for o1 models and newer. /// +[Experimental("OPENAI001")] [CodeGenType("ChatCompletionRequestDeveloperMessage")] +[CodeGenVisibility(nameof(DeveloperChatMessage), CodeGenVisibility.Internal)] [CodeGenSuppress("DeveloperChatMessage", typeof(ChatMessageContent))] public partial class DeveloperChatMessage : ChatMessage { @@ -20,7 +24,7 @@ public partial class DeveloperChatMessage : ChatMessage /// The collection of content items associated with the message. /// public DeveloperChatMessage(IEnumerable contentParts) - : base(ChatMessageRole.Developer, contentParts) + : this(new ChatMessageContent(contentParts), ChatMessageRole.Developer, null, null) { } /// @@ -31,7 +35,7 @@ public DeveloperChatMessage(IEnumerable contentParts) /// The collection of content items associated with the message. /// public DeveloperChatMessage(params ChatMessageContentPart[] contentParts) - : base(ChatMessageRole.Developer, contentParts) + : this(new ChatMessageContent(contentParts), ChatMessageRole.Developer, null, null) { Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); } @@ -41,16 +45,11 @@ public DeveloperChatMessage(params ChatMessageContentPart[] contentParts) /// /// The text content of the message. public DeveloperChatMessage(string content) - : base(ChatMessageRole.Developer, content) + : this(new ChatMessageContent([content]), ChatMessageRole.Developer, null, null) { Argument.AssertNotNull(content, nameof(content)); } - // CUSTOM: Hide the default constructor. - internal DeveloperChatMessage() - { - } - /// /// An optional name for the participant. /// diff --git a/src/Custom/Chat/Messages/FunctionChatMessage.cs b/src/Custom/Chat/Messages/FunctionChatMessage.cs index cc9a79fd5..4448b00de 100644 --- a/src/Custom/Chat/Messages/FunctionChatMessage.cs +++ b/src/Custom/Chat/Messages/FunctionChatMessage.cs @@ -25,12 +25,10 @@ public partial class FunctionChatMessage : ChatMessage /// restriction (e.g. JSON) imposed on this content. /// public FunctionChatMessage(string functionName, string content) - : base(ChatMessageRole.Function, content) + : this(content is null ? null : new ChatMessageContent([content]), ChatMessageRole.Function, null, functionName) { Argument.AssertNotNull(functionName, nameof(functionName)); - FunctionName = functionName; - // FunctionChatMessage treats content as *required* but explicitly *nullable*. If null content was provided, // enforce manifestation of the (nullable) content collection via .Clear(). if (!Content.IsInnerCollectionDefined()) diff --git a/src/Custom/Chat/Messages/SystemChatMessage.cs b/src/Custom/Chat/Messages/SystemChatMessage.cs index 8b3906487..2b1bbd629 100644 --- a/src/Custom/Chat/Messages/SystemChatMessage.cs +++ b/src/Custom/Chat/Messages/SystemChatMessage.cs @@ -9,6 +9,7 @@ namespace OpenAI.Chat; /// restrictions for a model-based assistant. Developer messages replace system messages for o1 models and newer. /// [CodeGenType("ChatCompletionRequestSystemMessage")] +[CodeGenVisibility(nameof(SystemChatMessage), CodeGenVisibility.Internal)] [CodeGenSuppress("SystemChatMessage", typeof(ChatMessageContent))] public partial class SystemChatMessage : ChatMessage { @@ -20,7 +21,7 @@ public partial class SystemChatMessage : ChatMessage /// The collection of content items associated with the message. /// public SystemChatMessage(IEnumerable contentParts) - : base(ChatMessageRole.System, contentParts) + : this(new(contentParts), ChatMessageRole.System, null, null) { } /// @@ -31,7 +32,7 @@ public SystemChatMessage(IEnumerable contentParts) /// The collection of content items associated with the message. /// public SystemChatMessage(params ChatMessageContentPart[] contentParts) - : base(ChatMessageRole.System, contentParts) + : this(new(contentParts), ChatMessageRole.System, null, null) { Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); } @@ -41,16 +42,11 @@ public SystemChatMessage(params ChatMessageContentPart[] contentParts) /// /// The text content of the message. public SystemChatMessage(string content) - : base(ChatMessageRole.System, content) + : this(new([content]), ChatMessageRole.System, null, null) { Argument.AssertNotNull(content, nameof(content)); } - // CUSTOM: Hide the default constructor. - internal SystemChatMessage() - { - } - /// /// An optional name for the participant. /// diff --git a/src/Custom/Chat/Messages/ToolChatMessage.cs b/src/Custom/Chat/Messages/ToolChatMessage.cs index 038d6355f..8d6c13500 100644 --- a/src/Custom/Chat/Messages/ToolChatMessage.cs +++ b/src/Custom/Chat/Messages/ToolChatMessage.cs @@ -35,12 +35,10 @@ public partial class ToolChatMessage : ChatMessage /// The collection of content items associated with the message. /// public ToolChatMessage(string toolCallId, IEnumerable contentParts) - : base(ChatMessageRole.Tool, contentParts) + : this(new(contentParts), ChatMessageRole.Tool, null, toolCallId) { Argument.AssertNotNull(toolCallId, nameof(toolCallId)); Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); - - ToolCallId = toolCallId; } /// @@ -54,12 +52,10 @@ public ToolChatMessage(string toolCallId, IEnumerable co /// The collection of content items associated with the message. /// public ToolChatMessage(string toolCallId, params ChatMessageContentPart[] contentParts) - : base(ChatMessageRole.Tool, contentParts) + : this(new(contentParts), ChatMessageRole.Tool, null, toolCallId) { Argument.AssertNotNull(toolCallId, nameof(toolCallId)); Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); - - ToolCallId = toolCallId; } /// @@ -70,11 +66,9 @@ public ToolChatMessage(string toolCallId, params ChatMessageContentPart[] conten /// /// The text content of the message. public ToolChatMessage(string toolCallId, string content) - : base(ChatMessageRole.Tool, content) + : this(new([content]), ChatMessageRole.Tool, null, toolCallId) { Argument.AssertNotNull(toolCallId, nameof(toolCallId)); Argument.AssertNotNull(content, nameof(content)); - - ToolCallId = toolCallId; } } diff --git a/src/Custom/Chat/Messages/UserChatMessage.cs b/src/Custom/Chat/Messages/UserChatMessage.cs index 4d6ffb0ec..18f49fd40 100644 --- a/src/Custom/Chat/Messages/UserChatMessage.cs +++ b/src/Custom/Chat/Messages/UserChatMessage.cs @@ -9,6 +9,7 @@ namespace OpenAI.Chat; /// in either direct assistant message responses or in calls to supplied tools or functions. /// [CodeGenType("ChatCompletionRequestUserMessage")] +[CodeGenVisibility(nameof(UserChatMessage), CodeGenVisibility.Internal)] [CodeGenSuppress("UserChatMessage", typeof(ChatMessageContent))] public partial class UserChatMessage : ChatMessage { @@ -21,7 +22,7 @@ public partial class UserChatMessage : ChatMessage /// The collection of text and image content items associated with the message. /// public UserChatMessage(IEnumerable contentParts) - : base(ChatMessageRole.User, contentParts) + : this(new(contentParts), ChatMessageRole.User, null, null) { Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); } @@ -35,25 +36,19 @@ public UserChatMessage(IEnumerable contentParts) /// The collection of text and image content items associated with the message. /// public UserChatMessage(params ChatMessageContentPart[] contentParts) - : base(ChatMessageRole.User, contentParts) - { - } + : this(new(contentParts), ChatMessageRole.User, null, null) + { } /// /// Creates a new instance of with ordinary text content. /// /// The textual content associated with the message. public UserChatMessage(string content) - : base(ChatMessageRole.User, content) + : this(new([content]), ChatMessageRole.User, null, null) { Argument.AssertNotNull(content, nameof(content)); } - // CUSTOM: Hide the default constructor. - internal UserChatMessage() - { - } - // CUSTOM: Rename. /// /// An optional name for the participant. diff --git a/src/Custom/Chat/OpenAIChatModelFactory.cs b/src/Custom/Chat/OpenAIChatModelFactory.cs index 0e62ebe36..fe0353a52 100644 --- a/src/Custom/Chat/OpenAIChatModelFactory.cs +++ b/src/Custom/Chat/OpenAIChatModelFactory.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Security.Cryptography.X509Certificates; @@ -44,6 +45,7 @@ public static ChatCompletion ChatCompletion( /// Initializes a new instance of . /// A new instance for mocking. + [Experimental("OPENAI001")] public static ChatCompletion ChatCompletion( string id = null, ChatFinishReason finishReason = default, @@ -96,7 +98,7 @@ public static ChatCompletion ChatCompletion( model, systemFingerprint, usage, - InternalCreateChatCompletionResponseObject.ChatCompletion, + "chat.completion", serviceTier: null, choices, createdAt, @@ -110,7 +112,8 @@ public static ChatCompletion ChatCompletion( /// /// /// - /// + /// A new instance for mocking. + [Experimental("OPENAI001")] public static ChatMessageAnnotation ChatMessageAnnotation( int startIndex = default, int endIndex = default, @@ -204,6 +207,7 @@ public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reason /// Initializes a new instance of . /// A new instance for mocking. + [Experimental("OPENAI001")] public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = default, int audioTokenCount = default, int acceptedPredictionTokenCount = default, int rejectedPredictionTokenCount = default) { return new ChatOutputTokenUsageDetails( @@ -214,6 +218,7 @@ public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reason additionalBinaryDataProperties: null); } + [Experimental("OPENAI001")] public static ChatOutputAudio ChatOutputAudio(BinaryData audioBytes, string id = null, string transcript = null, DateTimeOffset expiresAt = default) { return new ChatOutputAudio( @@ -259,6 +264,7 @@ public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate( /// Initializes a new instance of . /// A new instance for mocking. + [Experimental("OPENAI001")] public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate( string completionId = null, ChatMessageContent contentUpdate = null, @@ -306,7 +312,7 @@ public static StreamingChatCompletionUpdate StreamingChatCompletionUpdate( return new StreamingChatCompletionUpdate( model, systemFingerprint, - InternalCreateChatCompletionStreamResponseObject.ChatCompletionChunk, + "chat.completion.chunk", completionId, serviceTier: null, choices, @@ -333,7 +339,8 @@ public static StreamingChatFunctionCallUpdate StreamingChatFunctionCallUpdate(st /// /// /// - /// + /// A new instance for mocking. + [Experimental("OPENAI001")] public static StreamingChatOutputAudioUpdate StreamingChatOutputAudioUpdate( string id = null, DateTimeOffset? expiresAt = null, diff --git a/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs b/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs index de5b90374..e0342fb9e 100644 --- a/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs +++ b/src/Custom/Chat/Streaming/StreamingChatCompletionUpdate.cs @@ -1,5 +1,7 @@ +using OpenAI.Internal; using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Chat; @@ -19,7 +21,7 @@ public partial class StreamingChatCompletionUpdate // - Changed type from string. /// The object type, which is always `chat.completion.chunk`. [CodeGenMember("Object")] - internal InternalCreateChatCompletionStreamResponseObject Object { get; } = InternalCreateChatCompletionStreamResponseObject.ChatCompletionChunk; + internal string Object { get; } = "chat.completion.chunk"; // CUSTOM: Renamed for clarity. [CodeGenMember("Id")] @@ -27,7 +29,7 @@ public partial class StreamingChatCompletionUpdate // CUSTOM: Made internal. [CodeGenMember("ServiceTier")] - internal InternalCreateChatCompletionStreamResponseServiceTier? ServiceTier { get; } + internal InternalServiceTier? ServiceTier { get; } // CUSTOM: Made internal.We only get back a single choice, and instead we flatten the structure for usability. [CodeGenMember("Choices")] @@ -110,11 +112,14 @@ public IReadOnlyList ToolCallUpdates [Obsolete($"This property is obsolete. Please use {nameof(ToolCallUpdates)} instead.")] public StreamingChatFunctionCallUpdate FunctionCallUpdate => InternalChoiceDelta?.FunctionCall; - // CUSTOM: Flattened choice delta property. + // CUSTOM: + // - Added Experimental attribute. + // - Flattened choice delta property. /// /// Incremental output audio generated by the model. Only expected when output audio has been requested via providing /// to and only available with /// supported models. /// + [Experimental("OPENAI001")] public StreamingChatOutputAudioUpdate OutputAudioUpdate => InternalChoiceDelta?.Audio; } diff --git a/src/Custom/Chat/Streaming/StreamingChatOutputAudioUpdate.cs b/src/Custom/Chat/Streaming/StreamingChatOutputAudioUpdate.cs index e5cb9c8c7..ae52973ee 100644 --- a/src/Custom/Chat/Streaming/StreamingChatOutputAudioUpdate.cs +++ b/src/Custom/Chat/Streaming/StreamingChatOutputAudioUpdate.cs @@ -1,10 +1,13 @@ namespace OpenAI.Chat; using System; +using System.Diagnostics.CodeAnalysis; +// CUSTOM: Added Experimental attribute. /// /// Represents an audio update in a streaming chat response. /// +[Experimental("OPENAI001")] [CodeGenType("ChatCompletionMessageAudioChunk")] public partial class StreamingChatOutputAudioUpdate { diff --git a/src/Custom/Chat/Streaming/StreamingChatToolCallUpdate.cs b/src/Custom/Chat/Streaming/StreamingChatToolCallUpdate.cs index d5effde61..9de61035a 100644 --- a/src/Custom/Chat/Streaming/StreamingChatToolCallUpdate.cs +++ b/src/Custom/Chat/Streaming/StreamingChatToolCallUpdate.cs @@ -10,10 +10,8 @@ public partial class StreamingChatToolCallUpdate // CUSTOM: Made internal. [CodeGenMember("Function")] internal InternalChatCompletionMessageToolCallChunkFunction Function { get; } - // CUSTOM: - // - Renamed. - // - Changed type from string. + // - Changed type to match public type. /// The kind of tool.Currently, only is supported. [CodeGenMember("Type")] public ChatToolCallKind Kind { get; } = ChatToolCallKind.Function; diff --git a/src/Custom/Common/Internal/GeneratorStubs.cs b/src/Custom/Common/Internal/GeneratorStubs.cs index 5f90238ba..b6f646f2a 100644 --- a/src/Custom/Common/Internal/GeneratorStubs.cs +++ b/src/Custom/Common/Internal/GeneratorStubs.cs @@ -1,26 +1,15 @@ namespace OpenAI.Internal; -[CodeGenType("OmniTypedResponseFormat")] -internal partial class InternalOmniTypedResponseFormat { } - -[CodeGenType("ResponseFormatJsonObject")] -internal partial class InternalResponseFormatJsonObject { } - -[CodeGenType("ResponseFormatJsonSchema")] -internal partial class InternalResponseFormatJsonSchema { } - -[CodeGenType("ResponseFormatJsonSchemaSchema")] -internal partial class InternalResponseFormatJsonSchemaSchema { } - -[CodeGenType("ResponseFormatText")] -internal partial class InternalResponseFormatText { } - -[CodeGenType("UnknownOmniTypedResponseFormat")] -internal partial class InternalUnknownOmniTypedResponseFormat { } - -[CodeGenType("WebSearchLocation")] -internal partial class InternalWebSearchLocation { } - -[CodeGenType("WebSearchContextSize")] -internal readonly partial struct InternalWebSearchContextSize { } - +[CodeGenType("ResponseFormat")] internal partial class InternalResponseFormat { } +[CodeGenType("ResponseFormatType")] internal readonly partial struct InternalResponseFormatType {} +[CodeGenType("ResponseFormatJsonObject")] internal partial class InternalResponseFormatJsonObject { } +[CodeGenType("ResponseFormatJsonSchema")] internal partial class InternalResponseFormatJsonSchema { } +[CodeGenType("ResponseFormatJsonSchemaSchema")] internal partial class InternalResponseFormatJsonSchemaSchema { } +[CodeGenType("ResponseFormatText")] internal partial class InternalResponseFormatText { } +[CodeGenType("UnknownResponseFormat")] internal partial class InternalUnknownResponseFormat { } +[CodeGenType("WebSearchLocation")] internal partial class InternalWebSearchLocation { } +[CodeGenType("WebSearchContextSize")] internal readonly partial struct InternalWebSearchContextSize { } +[CodeGenType("LogProbProperties")] internal partial class InternalLogProbProperties { } +[CodeGenType("ModelIdsShared")] internal readonly partial struct InternalModelIdsShared { } +[CodeGenType("VoiceIdsShared")] internal readonly partial struct InternalVoiceIdsShared { } +[CodeGenType("ServiceTier")] internal readonly partial struct InternalServiceTier { } \ No newline at end of file diff --git a/src/Custom/Containers/ContainerClient.cs b/src/Custom/Containers/ContainerClient.cs new file mode 100644 index 000000000..de10530ea --- /dev/null +++ b/src/Custom/Containers/ContainerClient.cs @@ -0,0 +1,12 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Threading; + +namespace OpenAI.Containers; + +[CodeGenType("Containers")] +internal partial class ContainerClient +{ + +} diff --git a/src/Custom/Containers/Internal/GeneratorStubs.cs b/src/Custom/Containers/Internal/GeneratorStubs.cs new file mode 100644 index 000000000..622c7c90c --- /dev/null +++ b/src/Custom/Containers/Internal/GeneratorStubs.cs @@ -0,0 +1,87 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.Containers; + +[CodeGenType("ContainerListResourceObject")] internal readonly partial struct InternalContainerListResourceObject {} +[CodeGenType("ContainerResourceExpiresAfterAnchor")] internal readonly partial struct InternalContainerResourceExpiresAfterAnchor {} +[CodeGenType("CreateContainerBodyExpiresAfterAnchor")] internal readonly partial struct InternalCreateContainerBodyExpiresAfterAnchor {} +[CodeGenType("DeleteContainerResponseObject")] internal readonly partial struct InternalDeleteContainerResponseObject {} +[CodeGenType("ContainerFileListResourceObject")] internal readonly partial struct InternalContainerFileListResourceObject {} +[CodeGenType("DeleteContainerFileResponseObject")] internal readonly partial struct InternalDeleteContainerFileResponseObject {} +[CodeGenType("ContainerListResource")] +internal partial class InternalContainerListResource +{ + public static explicit operator InternalContainerListResource(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalContainerListResource(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("ContainerResource")] +internal partial class InternalContainerResource +{ + public static explicit operator InternalContainerResource(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalContainerResource(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("ContainerResourceExpiresAfter")] internal partial class InternalContainerResourceExpiresAfter {} +[CodeGenType("CreateContainerBody")] internal partial class InternalCreateContainerBody +{ + public static implicit operator BinaryContent(InternalCreateContainerBody internalCreateContainerBody) + { + if (internalCreateContainerBody == null) + { + return null; + } + return BinaryContent.Create(internalCreateContainerBody, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("CreateContainerBodyExpiresAfter")] internal partial class InternalCreateContainerBodyExpiresAfter {} +[CodeGenType("DeleteContainerResponse")] +internal partial class InternalDeleteContainerResponse +{ + public static explicit operator InternalDeleteContainerResponse(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalDeleteContainerResponse(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("CreateContainerFileBody")] internal partial class InternalCreateContainerFileBody {} +[CodeGenType("ContainerFileResource")] +internal partial class InternalContainerFileResource +{ + public static explicit operator InternalContainerFileResource(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalContainerFileResource(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("ContainerFileListResource")] +internal partial class InternalContainerFileListResource +{ + public static explicit operator InternalContainerFileListResource(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalContainerFileListResource(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("DeleteContainerFileResponse")] +internal partial class InternalDeleteContainerFileResponse +{ + public static explicit operator InternalDeleteContainerFileResponse(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalDeleteContainerFileResponse(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} \ No newline at end of file diff --git a/src/Custom/Embeddings/EmbeddingClient.cs b/src/Custom/Embeddings/EmbeddingClient.cs index 359ce4aef..f4b6be8b5 100644 --- a/src/Custom/Embeddings/EmbeddingClient.cs +++ b/src/Custom/Embeddings/EmbeddingClient.cs @@ -103,9 +103,9 @@ public virtual async Task> GenerateEmbeddingAsync( options ??= new(); CreateEmbeddingGenerationOptions(input, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await GenerateEmbeddingsAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue(((OpenAIEmbeddingCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(OpenAIEmbeddingCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } // CUSTOM: Added to simplify generating a single embedding from a string input. @@ -122,9 +122,9 @@ public virtual ClientResult GenerateEmbedding(string input, Emb options ??= new(); CreateEmbeddingGenerationOptions(input, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = GenerateEmbeddings(content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue(((OpenAIEmbeddingCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(OpenAIEmbeddingCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } // CUSTOM: Added to simplify passing the input as a collection of strings instead of BinaryData. @@ -141,9 +141,9 @@ public virtual async Task> GenerateEmbed options ??= new(); CreateEmbeddingGenerationOptions(inputs, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await GenerateEmbeddingsAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((OpenAIEmbeddingCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIEmbeddingCollection.FromClientResult(result), result.GetRawResponse()); } @@ -161,9 +161,9 @@ public virtual ClientResult GenerateEmbeddings(IEnume options ??= new(); CreateEmbeddingGenerationOptions(inputs, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = GenerateEmbeddings(content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((OpenAIEmbeddingCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIEmbeddingCollection.FromClientResult(result), result.GetRawResponse()); } // CUSTOM: Added to simplify passing the input as a collection of ReadOnlyMemory tokens instead of BinaryData. @@ -180,9 +180,9 @@ public virtual async Task> GenerateEmbed options ??= new(); CreateEmbeddingGenerationOptions(inputs, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await GenerateEmbeddingsAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((OpenAIEmbeddingCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIEmbeddingCollection.FromClientResult(result), result.GetRawResponse()); } // CUSTOM: Added to simplify passing the input as a collection of ReadOnlyMemory of tokens instead of BinaryData. @@ -199,9 +199,9 @@ public virtual ClientResult GenerateEmbeddings(IEnume options ??= new(); CreateEmbeddingGenerationOptions(inputs, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = GenerateEmbeddings(content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((OpenAIEmbeddingCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIEmbeddingCollection.FromClientResult(result), result.GetRawResponse()); } private void CreateEmbeddingGenerationOptions(string input, ref EmbeddingGenerationOptions options) diff --git a/src/Custom/Embeddings/EmbeddingGenerationOptions.cs b/src/Custom/Embeddings/EmbeddingGenerationOptions.cs index 8d9853f16..da57cd11b 100644 --- a/src/Custom/Embeddings/EmbeddingGenerationOptions.cs +++ b/src/Custom/Embeddings/EmbeddingGenerationOptions.cs @@ -1,9 +1,11 @@ using System; +using System.ClientModel; namespace OpenAI.Embeddings; [CodeGenType("CreateEmbeddingRequest")] -[CodeGenSuppress("EmbeddingGenerationOptions", typeof(BinaryData), typeof(InternalCreateEmbeddingRequestModel))] +[CodeGenVisibility(nameof(EmbeddingGenerationOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(EmbeddingGenerationOptions), typeof(BinaryData), typeof(InternalCreateEmbeddingRequestModel))] public partial class EmbeddingGenerationOptions { // CUSTOM: @@ -22,12 +24,6 @@ public partial class EmbeddingGenerationOptions [CodeGenMember("EncodingFormat")] internal InternalCreateEmbeddingRequestEncodingFormat? EncodingFormat { get; set; } - // CUSTOM: Made public now that there are no required properties. - /// Initializes a new instance of . - public EmbeddingGenerationOptions() - { - } - // CUSTOM: Renamed. /// /// A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. @@ -35,4 +31,6 @@ public EmbeddingGenerationOptions() /// [CodeGenMember("User")] public string EndUserId { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } \ No newline at end of file diff --git a/src/Custom/Embeddings/OpenAIEmbedding.cs b/src/Custom/Embeddings/OpenAIEmbedding.cs index cbb581e29..408838afe 100644 --- a/src/Custom/Embeddings/OpenAIEmbedding.cs +++ b/src/Custom/Embeddings/OpenAIEmbedding.cs @@ -62,7 +62,7 @@ public partial class OpenAIEmbedding // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. /// The object type, which is always "embedding". - private InternalEmbeddingObject Object { get; } = InternalEmbeddingObject.Embedding; + private string Object { get; } = "embedding"; // CUSTOM: Added logic to handle additional custom properties. /// Initializes a new instance of . @@ -73,7 +73,7 @@ public partial class OpenAIEmbedding /// /// The object type, which is always "embedding". /// Keeps track of any properties unknown to the library. - internal OpenAIEmbedding(int index, BinaryData embeddingProperty, InternalEmbeddingObject @object, IDictionary serializedAdditionalRawData) + internal OpenAIEmbedding(int index, BinaryData embeddingProperty, string @object, IDictionary serializedAdditionalRawData) { Index = index; EmbeddingProperty = embeddingProperty; @@ -117,37 +117,43 @@ private static ReadOnlyMemory ConvertToVectorOfFloats(BinaryData binaryDa base64 = base64.Slice(1, base64.Length - 2); // Decode base64 string to bytes. - byte[] bytes = ArrayPool.Shared.Rent(Base64.GetMaxDecodedFromUtf8Length(base64.Length)); - try - { - OperationStatus status = Base64.DecodeFromUtf8(base64, bytes.AsSpan(), out int bytesConsumed, out int bytesWritten); - if (status != OperationStatus.Done || bytesWritten % sizeof(float) != 0) - { - ThrowInvalidData(); - } - - // Interpret bytes as floats - float[] vector = new float[bytesWritten / sizeof(float)]; - bytes.AsSpan(0, bytesWritten).CopyTo(MemoryMarshal.AsBytes(vector.AsSpan())); - if (!BitConverter.IsLittleEndian) - { - Span ints = MemoryMarshal.Cast(vector.AsSpan()); -#if NET8_0_OR_GREATER - BinaryPrimitives.ReverseEndianness(ints, ints); -#else - for (int i = 0; i < ints.Length; i++) + byte[] bytes = null; + try + { + bytes = ArrayPool.Shared.Rent(Base64.GetMaxDecodedFromUtf8Length(base64.Length)); + OperationStatus status = Base64.DecodeFromUtf8(base64, bytes.AsSpan(), out int bytesConsumed, out int bytesWritten); + if (status != OperationStatus.Done || bytesWritten % sizeof(float) != 0) { - ints[i] = BinaryPrimitives.ReverseEndianness(ints[i]); + ThrowInvalidData(); } + + // Interpret bytes as floats + float[] vector = new float[bytesWritten / sizeof(float)]; + bytes.AsSpan(0, bytesWritten).CopyTo(MemoryMarshal.AsBytes(vector.AsSpan())); + if (!BitConverter.IsLittleEndian) + { + Span ints = MemoryMarshal.Cast(vector.AsSpan()); +#if NET8_0_OR_GREATER + BinaryPrimitives.ReverseEndianness(ints, ints); +#else + for (int i = 0; i < ints.Length; i++) + { + ints[i] = BinaryPrimitives.ReverseEndianness(ints[i]); + } #endif - } + } + return new ReadOnlyMemory(vector); - } - finally - { - ArrayPool.Shared.Return(bytes); } - } - static void ThrowInvalidData() => + finally + { + if (bytes is not null) + { + ArrayPool.Shared.Return(bytes); + } + } + + static void ThrowInvalidData() => throw new FormatException("The input is not a valid Base64 string of encoded floats."); + } } diff --git a/src/Custom/Embeddings/OpenAIEmbeddingCollection.Serialization.cs b/src/Custom/Embeddings/OpenAIEmbeddingCollection.Serialization.cs index c295154c0..74cabf88c 100644 --- a/src/Custom/Embeddings/OpenAIEmbeddingCollection.Serialization.cs +++ b/src/Custom/Embeddings/OpenAIEmbeddingCollection.Serialization.cs @@ -45,7 +45,7 @@ internal static OpenAIEmbeddingCollection DeserializeOpenAIEmbeddingCollection(J } IReadOnlyList data = default; string model = default; - InternalCreateEmbeddingResponseObject @object = default; + string @object = default; EmbeddingTokenUsage usage = default; IDictionary serializedAdditionalRawData = default; Dictionary rawDataDictionary = new Dictionary(); @@ -68,7 +68,7 @@ internal static OpenAIEmbeddingCollection DeserializeOpenAIEmbeddingCollection(J } if (property.NameEquals("object"u8)) { - @object = new InternalCreateEmbeddingResponseObject(property.Value.GetString()); + @object = property.Value.GetString(); continue; } if (property.NameEquals("usage"u8)) diff --git a/src/Custom/Embeddings/OpenAIEmbeddingCollection.cs b/src/Custom/Embeddings/OpenAIEmbeddingCollection.cs index b7118d779..4f771ef76 100644 --- a/src/Custom/Embeddings/OpenAIEmbeddingCollection.cs +++ b/src/Custom/Embeddings/OpenAIEmbeddingCollection.cs @@ -1,6 +1,9 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Text.Json; namespace OpenAI.Embeddings; @@ -8,13 +11,13 @@ namespace OpenAI.Embeddings; [CodeGenSuppress("Data")] [CodeGenSuppress(nameof(OpenAIEmbeddingCollection))] [CodeGenSuppress(nameof(OpenAIEmbeddingCollection), typeof(string), typeof(EmbeddingTokenUsage))] -[CodeGenSuppress(nameof(OpenAIEmbeddingCollection), typeof(string), typeof(EmbeddingTokenUsage), typeof(InternalCreateEmbeddingResponseObject), typeof(IDictionary))] +[CodeGenSuppress(nameof(OpenAIEmbeddingCollection), typeof(string), typeof(EmbeddingTokenUsage), typeof(string), typeof(IDictionary))] public partial class OpenAIEmbeddingCollection : ReadOnlyCollection { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. /// The object type, which is always "list". [CodeGenMember("Object")] - private InternalCreateEmbeddingResponseObject Object { get; } = InternalCreateEmbeddingResponseObject.List; + private string Object { get; } = "list"; // CUSTOM: Set the inherited Items property via the base constructor in favor of the suppressed Data property. /// Initializes a new instance of . @@ -40,7 +43,7 @@ internal OpenAIEmbeddingCollection(IEnumerable data, string mod /// The object type, which is always "list". /// The usage information for the request. /// Keeps track of any properties unknown to the library. - internal OpenAIEmbeddingCollection(IReadOnlyList data, string model, InternalCreateEmbeddingResponseObject @object, EmbeddingTokenUsage usage, IDictionary serializedAdditionalRawData) + internal OpenAIEmbeddingCollection(IReadOnlyList data, string model, string @object, EmbeddingTokenUsage usage, IDictionary serializedAdditionalRawData) : base([.. data]) { Model = model; @@ -55,4 +58,11 @@ internal OpenAIEmbeddingCollection() : base([]) { } + + internal static OpenAIEmbeddingCollection FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeOpenAIEmbeddingCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + } } \ No newline at end of file diff --git a/src/Custom/Embeddings/OpenAIEmbeddingsModelFactory.cs b/src/Custom/Embeddings/OpenAIEmbeddingsModelFactory.cs index 1901ccfc5..43c36658b 100644 --- a/src/Custom/Embeddings/OpenAIEmbeddingsModelFactory.cs +++ b/src/Custom/Embeddings/OpenAIEmbeddingsModelFactory.cs @@ -26,7 +26,7 @@ public static OpenAIEmbeddingCollection OpenAIEmbeddingCollection(IEnumerable GetEvaluationsAsync(int? limit, string orderBy, string order, string after, RequestOptions options) + { + using PipelineMessage message = CreateGetEvalsRequest(after, limit, order, orderBy, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult CreateEvaluation(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateEvalRequest(content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CreateEvaluationAsync(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateEvalRequest(content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetEvaluation(string evaluationId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + + using PipelineMessage message = CreateGetEvalRequest(evaluationId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetEvaluationAsync(string evaluationId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + + using PipelineMessage message = CreateGetEvalRequest(evaluationId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult UpdateEvaluation(string evaluationId, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateUpdateEvalRequest(evaluationId, content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task UpdateEvaluationAsync(string evaluationId, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateUpdateEvalRequest(evaluationId, content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult DeleteEvaluation(string evaluationId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + + using PipelineMessage message = CreateDeleteEvalRequest(evaluationId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task DeleteEvaluationAsync(string evaluationId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + + using PipelineMessage message = CreateDeleteEvalRequest(evaluationId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetEvaluationRuns(string evaluationId, int? limit, string order, string after, string evaluationRunStatus, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + + using PipelineMessage message = CreateGetEvalRunsRequest(evaluationId, after, limit, order, evaluationRunStatus, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetEvaluationRunsAsync(string evaluationId, int? limit, string order, string after, string evaluationRunStatus, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + + using PipelineMessage message = CreateGetEvalRunsRequest(evaluationId, after, limit, order, evaluationRunStatus, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult CreateEvaluationRun(string evaluationId, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateEvalRunRequest(evaluationId, content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CreateEvaluationRunAsync(string evaluationId, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateEvalRunRequest(evaluationId, content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + + using PipelineMessage message = CreateGetEvalRunRequest(evaluationId, evaluationRunId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + + using PipelineMessage message = CreateGetEvalRunRequest(evaluationId, evaluationRunId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult CancelEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + + using PipelineMessage message = CreateCancelEvalRunRequest(evaluationId, evaluationRunId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CancelEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + + using PipelineMessage message = CreateCancelEvalRunRequest(evaluationId, evaluationRunId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult DeleteEvaluationRun(string evaluationId, string evaluationRunId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + + using PipelineMessage message = CreateDeleteEvalRunRequest(evaluationId, evaluationRunId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task DeleteEvaluationRunAsync(string evaluationId, string evaluationRunId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + + using PipelineMessage message = CreateDeleteEvalRunRequest(evaluationId, evaluationRunId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetEvaluationRunOutputItems(string evaluationId, string evaluationRunId, int? limit, string order, string after, string outputItemStatus, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + + using PipelineMessage message = CreateGetEvalRunOutputItemsRequest(evaluationId, evaluationRunId, after, limit, outputItemStatus, order, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetEvaluationRunOutputItemsAsync(string evaluationId, string evaluationRunId, int? limit, string order, string after, string outputItemStatus, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + + using PipelineMessage message = CreateGetEvalRunOutputItemsRequest(evaluationId, evaluationRunId, after, limit, outputItemStatus, order, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetEvaluationRunOutputItem(string evaluationId, string evaluationRunId, string outputItemId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + Argument.AssertNotNull(outputItemId, nameof(outputItemId)); + + using PipelineMessage message = CreateGetEvalRunOutputItemRequest(evaluationId, evaluationRunId, outputItemId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetEvaluationRunOutputItemAsync(string evaluationId, string evaluationRunId, string outputItemId, RequestOptions options) + { + Argument.AssertNotNull(evaluationId, nameof(evaluationId)); + Argument.AssertNotNull(evaluationRunId, nameof(evaluationRunId)); + Argument.AssertNotNull(outputItemId, nameof(outputItemId)); + + using PipelineMessage message = CreateGetEvalRunOutputItemRequest(evaluationId, evaluationRunId, outputItemId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } +} diff --git a/src/Custom/Evals/EvaluationClient.cs b/src/Custom/Evals/EvaluationClient.cs new file mode 100644 index 000000000..8abdd552e --- /dev/null +++ b/src/Custom/Evals/EvaluationClient.cs @@ -0,0 +1,84 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Threading; + +namespace OpenAI.Evals; + +// CUSTOM: +// - Renamed. +// - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. +// - Suppressed convenience methods for now. +/// The service client for OpenAI Evaluation operations. +[Experimental("OPENAI001")] +[CodeGenType("Evals")] +[CodeGenSuppress("CreateEval", typeof(InternalCreateEvalRequest), typeof(CancellationToken))] +[CodeGenSuppress("CreateEvalAsync", typeof(InternalCreateEvalRequest), typeof(CancellationToken))] +[CodeGenSuppress("GetEval", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetEvalAsync", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("UpdateEval", typeof(string), typeof(InternalUpdateEvalRequest), typeof(CancellationToken))] +[CodeGenSuppress("UpdateEvalAsync", typeof(string), typeof(InternalUpdateEvalRequest), typeof(CancellationToken))] +[CodeGenSuppress("DeleteEval", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("DeleteEvalAsync", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CreateEvalRun", typeof(string), typeof(InternalCreateEvalRunRequest), typeof(CancellationToken))] +[CodeGenSuppress("CreateEvalRunAsync", typeof(string), typeof(InternalCreateEvalRunRequest), typeof(CancellationToken))] +[CodeGenSuppress("GetEvalRun", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetEvalRunAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CancelEvalRun", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CancelEvalRunAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("DeleteEvalRun", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("DeleteEvalRunAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetEvalRunOutputItem", typeof(string), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetEvalRunOutputItemAsync", typeof(string), typeof(string), typeof(string), typeof(CancellationToken))] +public partial class EvaluationClient +{ + // CUSTOM: Added as a convenience. + /// Initializes a new instance of . + /// The API key to authenticate with the service. + /// is null. + public EvaluationClient(string apiKey) : this(new ApiKeyCredential(apiKey), new OpenAIClientOptions()) + { + } + + // CUSTOM: + // - Used a custom pipeline. + // - Demoted the endpoint parameter to be a property in the options class. + /// Initializes a new instance of . + /// The API key to authenticate with the service. + /// is null. + public EvaluationClient(ApiKeyCredential credential) : this(credential, new OpenAIClientOptions()) + { + } + + /// + /// Initializes a new instance of that will use an API key when authenticating. + /// + /// The API key used to authenticate with the service endpoint. + /// Additional options to customize the client. + /// The provided was null. + public EvaluationClient(ApiKeyCredential credential, OpenAIClientOptions options) + { + Argument.AssertNotNull(credential, nameof(credential)); + options ??= new OpenAIClientOptions(); + + Pipeline = OpenAIClient.CreatePipeline(credential, options); + _endpoint = OpenAIClient.GetEndpoint(options); + } + + // CUSTOM: + // - Used a custom pipeline. + // - Demoted the endpoint parameter to be a property in the options class. + // - Made protected. + /// Initializes a new instance of . + /// The HTTP pipeline to send and receive REST requests and responses. + /// The options to configure the client. + /// is null. + protected internal EvaluationClient(ClientPipeline pipeline, OpenAIClientOptions options) + { + Argument.AssertNotNull(pipeline, nameof(pipeline)); + options ??= new OpenAIClientOptions(); + + Pipeline = pipeline; + _endpoint = OpenAIClient.GetEndpoint(options); + } +} diff --git a/src/Custom/Evals/Internal/GeneratorStubs.cs b/src/Custom/Evals/Internal/GeneratorStubs.cs new file mode 100644 index 000000000..c83cfea32 --- /dev/null +++ b/src/Custom/Evals/Internal/GeneratorStubs.cs @@ -0,0 +1,123 @@ +using OpenAI.Files; +using System.ClientModel; + +namespace OpenAI.Evals; + +[CodeGenType("CreateEvalRequest")] internal partial class InternalCreateEvalRequest {} +[CodeGenType("CreateEvalRunRequest")] internal partial class InternalCreateEvalRunRequest {} +[CodeGenType("DeleteEvalResponse")] internal partial class InternalDeleteEvalResponse {} +[CodeGenType("DeleteEvalResponseObject")] internal readonly partial struct InternalDeleteEvalResponseObject {} +[CodeGenType("DeleteEvalRunResponse")] internal partial class InternalDeleteEvalRunResponse {} +[CodeGenType("DeleteEvalRunResponseObject")] internal readonly partial struct InternalDeleteEvalRunResponseObject {} +[CodeGenType("Eval")] internal partial class InternalEval {} +[CodeGenType("EvalApiError")] internal partial class InternalEvalApiError {} +[CodeGenType("EvalCompletionsRunDataSourceParams")] internal partial class InternalEvalCompletionsRunDataSourceParams {} +[CodeGenType("EvalCompletionsRunDataSourceParamsInputMessages1")] internal partial class InternalEvalCompletionsRunDataSourceParamsInputMessages1 {} +[CodeGenType("EvalCompletionsRunDataSourceParamsInputMessages1Type")] internal readonly partial struct InternalEvalCompletionsRunDataSourceParamsInputMessages1Type {} +[CodeGenType("EvalCompletionsRunDataSourceParamsInputMessages2")] internal partial class InternalEvalCompletionsRunDataSourceParamsInputMessages2 {} +[CodeGenType("EvalCompletionsRunDataSourceParamsInputMessages2Type")] internal readonly partial struct InternalEvalCompletionsRunDataSourceParamsInputMessages2Type {} +[CodeGenType("EvalCompletionsRunDataSourceParamsSamplingParams")] internal partial class InternalEvalCompletionsRunDataSourceParamsSamplingParams {} +[CodeGenType("EvalCustomDataSourceConfigParams")] internal partial class InternalEvalCustomDataSourceConfigParams {} +[CodeGenType("EvalCustomDataSourceConfigResource")] internal partial class InternalEvalCustomDataSourceConfigResource {} +[CodeGenType("EvalDataSourceConfigParams")] internal partial class InternalEvalDataSourceConfigParams {} +[CodeGenType("EvalDataSourceConfigResource")] internal partial class InternalEvalDataSourceConfigResource {} +[CodeGenType("EvalDataSourceConfigType")] internal readonly partial struct InternalEvalDataSourceConfigType {} +[CodeGenType("EvalGraderParams")] internal partial class InternalEvalGraderParams {} +[CodeGenType("EvalGraderResource")] internal partial class InternalEvalGraderResource {} +[CodeGenType("EvalGraderType")] internal readonly partial struct InternalEvalGraderType {} +[CodeGenType("EvalItem")] internal partial class InternalEvalItem {} +[CodeGenType("EvalItemContent")] internal partial class InternalEvalItemContent {} +[CodeGenType("EvalItemContentInputText")] internal partial class InternalEvalItemContentInputText {} +[CodeGenType("EvalItemContentOutputText")] internal partial class InternalEvalItemContentOutputText {} +[CodeGenType("EvalItemContentType")] internal readonly partial struct InternalEvalItemContentType {} +[CodeGenType("EvalItemRole")] internal readonly partial struct InternalEvalItemRole {} +[CodeGenType("EvalItemType")] internal readonly partial struct InternalEvalItemType {} +[CodeGenType("EvalJsonlRunDataSourceParams")] internal partial class InternalEvalJsonlRunDataSourceParams {} +[CodeGenType("EvalLabelModelGraderParams")] internal partial class InternalEvalLabelModelGraderParams {} +[CodeGenType("EvalLabelModelGraderParamsInput")] internal partial class InternalEvalLabelModelGraderParamsInput {} +[CodeGenType("EvalLabelModelGraderResource")] internal partial class InternalEvalLabelModelGraderResource {} +[CodeGenType("EvalList")] internal partial class InternalEvalList {} +[CodeGenType("EvalListObject")] internal readonly partial struct InternalEvalListObject {} +[CodeGenType("EvalLogsDataSourceConfigParams")] internal partial class InternalEvalLogsDataSourceConfigParams {} +[CodeGenType("EvalObject")] internal readonly partial struct InternalEvalObject {} +[CodeGenType("EvalPythonGraderParams")] internal partial class InternalEvalPythonGraderParams {} +[CodeGenType("EvalPythonGraderResource")] internal partial class InternalEvalPythonGraderResource {} +[CodeGenType("EvalResponsesRunDataSourceParams")] internal partial class InternalEvalResponsesRunDataSourceParams {} +[CodeGenType("EvalResponsesRunDataSourceParamsInputMessages1")] internal partial class InternalEvalResponsesRunDataSourceParamsInputMessages1 {} +[CodeGenType("EvalResponsesRunDataSourceParamsInputMessages1Type")] internal readonly partial struct InternalEvalResponsesRunDataSourceParamsInputMessages1Type {} +[CodeGenType("EvalResponsesRunDataSourceParamsInputMessages2")] internal partial class InternalEvalResponsesRunDataSourceParamsInputMessages2 {} +[CodeGenType("EvalResponsesRunDataSourceParamsInputMessages2Type")] internal readonly partial struct InternalEvalResponsesRunDataSourceParamsInputMessages2Type {} +[CodeGenType("EvalResponsesRunDataSourceParamsInputMessagesTemplate1")] internal partial class InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1 {} +[CodeGenType("EvalResponsesRunDataSourceParamsSamplingParams")] internal partial class InternalEvalResponsesRunDataSourceParamsSamplingParams {} +[CodeGenType("EvalRun")] internal partial class InternalEvalRun {} +[CodeGenType("EvalRunDataContentSource")] internal partial class InternalEvalRunDataContentSource {} +[CodeGenType("EvalRunDataContentSourceType")] internal readonly partial struct InternalEvalRunDataContentSourceType {} +[CodeGenType("EvalRunDataSourceParams")] internal partial class InternalEvalRunDataSourceParams {} +[CodeGenType("EvalRunDataSourceResource")] internal partial class InternalEvalRunDataSourceResource {} +[CodeGenType("EvalRunDataSourceType")] internal readonly partial struct InternalEvalRunDataSourceType {} +[CodeGenType("EvalRunFileContentDataContentSource")] internal partial class InternalEvalRunFileContentDataContentSource {} +[CodeGenType("EvalRunFileContentDataContentSourceContent")] internal partial class InternalEvalRunFileContentDataContentSourceContent {} +[CodeGenType("EvalRunFileIdDataContentSource")] internal partial class InternalEvalRunFileIdDataContentSource {} +[CodeGenType("EvalRunList")] internal partial class InternalEvalRunList {} +[CodeGenType("EvalRunListObject")] internal readonly partial struct InternalEvalRunListObject {} +[CodeGenType("EvalRunObject")] internal readonly partial struct InternalEvalRunObject {} +[CodeGenType("EvalRunOutputItem")] internal partial class InternalEvalRunOutputItem {} +[CodeGenType("EvalRunOutputItemList")] internal partial class InternalEvalRunOutputItemList {} +[CodeGenType("EvalRunOutputItemListObject")] internal readonly partial struct InternalEvalRunOutputItemListObject {} +[CodeGenType("EvalRunOutputItemObject")] internal readonly partial struct InternalEvalRunOutputItemObject {} +[CodeGenType("EvalRunOutputItemSample")] internal partial class InternalEvalRunOutputItemSample {} +[CodeGenType("EvalRunOutputItemSampleInput")] internal partial class InternalEvalRunOutputItemSampleInput {} +[CodeGenType("EvalRunOutputItemSampleOutput")] internal partial class InternalEvalRunOutputItemSampleOutput {} +[CodeGenType("EvalRunOutputItemSampleUsage")] internal partial class InternalEvalRunOutputItemSampleUsage {} +[CodeGenType("EvalRunPerModelUsage")] internal partial class InternalEvalRunPerModelUsage {} +[CodeGenType("EvalRunPerTestingCriteriaResult")] internal partial class InternalEvalRunPerTestingCriteriaResult {} +[CodeGenType("EvalRunResponsesDataContentSource")] internal partial class InternalEvalRunResponsesDataContentSource {} +[CodeGenType("EvalRunResultCounts")] internal partial class InternalEvalRunResultCounts {} +[CodeGenType("EvalRunStoredCompletionsDataContentSource")] internal partial class InternalEvalRunStoredCompletionsDataContentSource {} +[CodeGenType("EvalScoreModelGraderParams")] internal partial class InternalEvalScoreModelGraderParams {} +[CodeGenType("EvalScoreModelGraderResource")] internal partial class InternalEvalScoreModelGraderResource {} +[CodeGenType("EvalsErrorNotFoundResponse")] internal partial class InternalEvalsErrorNotFoundResponse {} +[CodeGenType("EvalsErrorResponse")] internal partial class InternalEvalsErrorResponse {} +[CodeGenType("EvalStoredCompletionsDataSourceConfigResource")] internal partial class InternalEvalStoredCompletionsDataSourceConfigResource {} +[CodeGenType("EvalStringCheckGraderParams")] internal partial class InternalEvalStringCheckGraderParams {} +[CodeGenType("EvalStringCheckGraderResource")] internal partial class InternalEvalStringCheckGraderResource {} +[CodeGenType("EvalStringCheckGraderResourceOperation")] internal readonly partial struct InternalEvalStringCheckGraderResourceOperation {} +[CodeGenType("EvalTextSimilarityGraderParams")] internal partial class InternalEvalTextSimilarityGraderParams {} +[CodeGenType("EvalTextSimilarityGraderResource")] internal partial class InternalEvalTextSimilarityGraderResource {} +[CodeGenType("EvalTextSimilarityGraderResourceEvaluationMetric")] internal readonly partial struct InternalEvalTextSimilarityGraderResourceEvaluationMetric {} +[CodeGenType("GetEvalRunOutputItemsRequestStatus")] internal readonly partial struct InternalGetEvalRunOutputItemsRequestStatus {} +[CodeGenType("GetEvalRunsRequestStatus")] internal readonly partial struct InternalGetEvalRunsRequestStatus {} +[CodeGenType("ListEvalsRequestOrderBy")] internal readonly partial struct InternalListEvalsRequestOrderBy {} +[CodeGenType("MetadataPropertyForRequest")] internal partial class InternalMetadataPropertyForRequest +{ + public static implicit operator BinaryContent(InternalMetadataPropertyForRequest internalMetadataPropertyForRequest) + { + if (internalMetadataPropertyForRequest == null) + { + return null; + } + return BinaryContent.Create(internalMetadataPropertyForRequest, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("UnknownEvalDataSourceConfigParams")] internal partial class InternalUnknownEvalDataSourceConfigParams {} +[CodeGenType("UnknownEvalDataSourceConfigResource")] internal partial class InternalUnknownEvalDataSourceConfigResource {} +[CodeGenType("UnknownEvalGraderParams")] internal partial class InternalUnknownEvalGraderParams {} +[CodeGenType("UnknownEvalGraderResource")] internal partial class InternalUnknownEvalGraderResource {} +[CodeGenType("UnknownEvalItemContent")] internal partial class InternalUnknownEvalItemContent {} +[CodeGenType("UnknownEvalRunDataContentSource")] internal partial class InternalUnknownEvalRunDataContentSource {} +[CodeGenType("UnknownEvalRunDataSourceParams")] internal partial class InternalUnknownEvalRunDataSourceParams {} +[CodeGenType("UpdateEvalRequest")] internal partial class InternalUpdateEvalRequest {} +[CodeGenType("EvalLogsDataSourceConfigResource")] internal partial class InternalEvalLogsDataSourceConfigResource {} +[CodeGenType("EvalGraderLabelModelResource")] internal partial class InternalEvalGraderLabelModelResource {} +[CodeGenType("EvalGraderTextSimilarityResource")] internal partial class InternalEvalGraderTextSimilarityResource {} +[CodeGenType("EvalGraderPythonResource")] internal partial class InternalEvalGraderPythonResource {} +[CodeGenType("EvalGraderScoreModelResource")] internal partial class InternalEvalGraderScoreModelResource {} +[CodeGenType("EvalStoredCompletionsDataSourceConfigParams")] internal partial class InternalEvalStoredCompletionsDataSourceConfigParams {} +[CodeGenType("EvalGraderLabelModelParams")] internal partial class InternalEvalGraderLabelModelParams {} +[CodeGenType("EvalGraderLabelModelParamsInput")] internal partial class InternalEvalGraderLabelModelParamsInput {} +[CodeGenType("EvalGraderStringCheckParams")] internal partial class InternalEvalGraderStringCheckParams {} +[CodeGenType("EvalGraderStringCheckParamsOperation")] internal readonly partial struct InternalEvalGraderStringCheckParamsOperation {} +[CodeGenType("EvalGraderTextSimilarityParams")] internal partial class InternalEvalGraderTextSimilarityParams {} +[CodeGenType("EvalGraderPythonParams")] internal partial class InternalEvalGraderPythonParams {} +[CodeGenType("EvalGraderScoreModelParams")] internal partial class InternalEvalGraderScoreModelParams {} +[CodeGenType("EvalResponsesRunDataSourceParamsSamplingParamsText")] internal partial class InternalEvalResponsesRunDataSourceParamsSamplingParamsText {} \ No newline at end of file diff --git a/src/Custom/Files/FileDeletionResult.cs b/src/Custom/Files/FileDeletionResult.cs index d3b059532..f971b0f91 100644 --- a/src/Custom/Files/FileDeletionResult.cs +++ b/src/Custom/Files/FileDeletionResult.cs @@ -1,4 +1,8 @@ -namespace OpenAI.Files; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Files; [CodeGenType("DeleteFileResponse")] public partial class FileDeletionResult @@ -10,5 +14,12 @@ public partial class FileDeletionResult // CUSTOM: Made internal. /// The object type, which is always `file`. [CodeGenMember("Object")] - internal InternalDeleteFileResponseObject Object { get; } = InternalDeleteFileResponseObject.File; + internal string Object { get; } = "file"; + + internal static FileDeletionResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeFileDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Files/FilePurpose.cs b/src/Custom/Files/FilePurpose.cs index cbae9b885..7712b2dc0 100644 --- a/src/Custom/Files/FilePurpose.cs +++ b/src/Custom/Files/FilePurpose.cs @@ -1,3 +1,5 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Files; [CodeGenType("OpenAIFilePurpose")] @@ -17,7 +19,9 @@ public enum FilePurpose Vision, + [Experimental("OPENAI001")] UserData, + [Experimental("OPENAI001")] Evaluations, } \ No newline at end of file diff --git a/src/Custom/Files/FileUploadPurpose.cs b/src/Custom/Files/FileUploadPurpose.cs index ca5f6cdda..81fc2ca44 100644 --- a/src/Custom/Files/FileUploadPurpose.cs +++ b/src/Custom/Files/FileUploadPurpose.cs @@ -1,9 +1,18 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Files; [CodeGenType("CreateFileRequestPurpose")] public readonly partial struct FileUploadPurpose { - // CUSTOM: Renamed. + // CUSTOM: Added Experimental attribute. + [Experimental("OPENAI001")] + public static FileUploadPurpose UserData { get; } = new FileUploadPurpose(UserDataValue); + + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + [Experimental("OPENAI001")] [CodeGenMember("Evals")] - public static FileUploadPurpose Evaluations { get; } = new("evals"); + public static FileUploadPurpose Evaluations { get; } = new(EvalsValue); } \ No newline at end of file diff --git a/src/Custom/Files/Internal/GeneratorStubs.cs b/src/Custom/Files/Internal/GeneratorStubs.cs index 8a12f29f0..cf854c952 100644 --- a/src/Custom/Files/Internal/GeneratorStubs.cs +++ b/src/Custom/Files/Internal/GeneratorStubs.cs @@ -1,17 +1,50 @@ +using OpenAI.Graders; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; + namespace OpenAI.Files; [CodeGenType("DeleteFileResponseObject")] internal readonly partial struct InternalDeleteFileResponseObject { } +[CodeGenType("AddUploadPartRequest")] internal partial class InternalAddUploadPartRequest { } -[CodeGenType("OpenAIFileObject")] -internal readonly partial struct InternalOpenAIFileObject { } +[CodeGenType("CompleteUploadRequest")] internal partial class InternalCompleteUploadRequest +{ + public static implicit operator BinaryContent(InternalCompleteUploadRequest internalCompleteUploadRequest) + { + if (internalCompleteUploadRequest == null) + { + return null; + } + return BinaryContent.Create(internalCompleteUploadRequest, ModelSerializationExtensions.WireOptions); + } +} + +[CodeGenType("CreateUploadRequest")] internal partial class InternalCreateUploadRequest +{ + public static implicit operator BinaryContent(InternalCreateUploadRequest internalCreateUploadRequest) + { + if (internalCreateUploadRequest == null) + { + return null; + } + return BinaryContent.Create(internalCreateUploadRequest, ModelSerializationExtensions.WireOptions); + } +} -[CodeGenType("AddUploadPartRequest")] internal partial class InternalAddUploadPartRequest { } -[CodeGenType("CompleteUploadRequest")] internal partial class InternalCompleteUploadRequest { } -[CodeGenType("CreateUploadRequest")] internal partial class InternalCreateUploadRequest { } [CodeGenType("CreateUploadRequestPurpose")] internal readonly partial struct InternalCreateUploadRequestPurpose { } [CodeGenType("ListFilesResponseObject")] internal readonly partial struct InternalListFilesResponseObject { } -[CodeGenType("Upload")] internal partial class InternalUpload { } +[CodeGenType("Upload")] +internal partial class InternalUpload +{ + public static explicit operator InternalUpload(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalUpload(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} [CodeGenType("UploadObject")] internal readonly partial struct InternalUploadObject { } [CodeGenType("UploadPart")] internal partial class InternalUploadPart { } [CodeGenType("UploadPartObject")] internal readonly partial struct InternalUploadPartObject { } diff --git a/src/Custom/Files/OpenAIFile.cs b/src/Custom/Files/OpenAIFile.cs index 488246b05..1573a9c68 100644 --- a/src/Custom/Files/OpenAIFile.cs +++ b/src/Custom/Files/OpenAIFile.cs @@ -1,4 +1,9 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.Files; @@ -7,12 +12,29 @@ public partial class OpenAIFile { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. /// The object type, which is always "file". - private InternalOpenAIFileObject Object { get; } = InternalOpenAIFileObject.File; + private string Object { get; } = "file"; - // CUSTOM: Renamed. - /// The size of the file, in bytes. + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + /// The size of the file, in bytes. + [Experimental("OPENAI001")] [CodeGenMember("Bytes")] - public int? SizeInBytes { get; } + public long? SizeInBytesLong { get; } + + /// + /// + /// Please use instead of this property. + /// + /// A backwards-compatible facade for . + /// + /// + /// This property will throw an if the reported file size exceeds the maximum value + /// of a 32-bit integer, approximately 2GB. The newer property addresses this + /// limitation and should always be used. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public int? SizeInBytes => SizeInBytesLong is null ? null : checked((int)SizeInBytesLong.Value); // CUSTOM: Added the Obsolete attribute. [Obsolete($"This property is obsolete. If this is a fine-tuning training file, it may take some time to process" @@ -24,4 +46,11 @@ public partial class OpenAIFile [Obsolete($"This property is obsolete. For details on why a fine-tuning training file failed validation, see the" + $" `error` field on the fine-tuning job.")] public string StatusDetails { get; } + + internal static OpenAIFile FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeOpenAIFile(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Files/OpenAIFileClient.Protocol.cs b/src/Custom/Files/OpenAIFileClient.Protocol.cs index a699ba158..167a335c8 100644 --- a/src/Custom/Files/OpenAIFileClient.Protocol.cs +++ b/src/Custom/Files/OpenAIFileClient.Protocol.cs @@ -85,7 +85,7 @@ public virtual ClientResult UploadFile(BinaryContent content, string contentType [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task GetFilesAsync(string purpose, RequestOptions options) { - using PipelineMessage message = CreateListFilesRequest(purpose, options); + using PipelineMessage message = CreateGetFilesRequest(purpose, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } @@ -99,7 +99,7 @@ public virtual async Task GetFilesAsync(string purpose, RequestOpt [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult GetFiles(string purpose, RequestOptions options) { - using PipelineMessage message = CreateListFilesRequest(purpose, options); + using PipelineMessage message = CreateGetFilesRequest(purpose, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } diff --git a/src/Custom/Files/OpenAIFileClient.cs b/src/Custom/Files/OpenAIFileClient.cs index 90e8f6ffd..2778d5526 100644 --- a/src/Custom/Files/OpenAIFileClient.cs +++ b/src/Custom/Files/OpenAIFileClient.cs @@ -13,8 +13,8 @@ namespace OpenAI.Files; /// The service client for OpenAI file operations. [CodeGenType("Files")] [CodeGenSuppress("OpenAIFileClient", typeof(ClientPipeline), typeof(Uri))] -[CodeGenSuppress("ListFilesAsync", typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListFiles", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetFilesAsync", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetFiles", typeof(string), typeof(CancellationToken))] [CodeGenSuppress("RetrieveFileAsync", typeof(string), typeof(CancellationToken))] [CodeGenSuppress("RetrieveFile", typeof(string), typeof(CancellationToken))] public partial class OpenAIFileClient @@ -98,7 +98,7 @@ public virtual async Task> UploadFileAsync(Stream file, using MultiPartFormDataBinaryContent content = options.ToMultipartContent(file, filename); ClientResult result = await UploadFileAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((OpenAIFile)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIFile.FromClientResult(result), result.GetRawResponse()); } /// Uploads a file that can be used across various operations. @@ -125,7 +125,7 @@ public virtual ClientResult UploadFile(Stream file, string filename, using MultiPartFormDataBinaryContent content = options.ToMultipartContent(file, filename); ClientResult result = UploadFile(content, content.ContentType, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((OpenAIFile)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIFile.FromClientResult(result), result.GetRawResponse()); } /// Uploads a file that can be used across various operations. @@ -207,7 +207,7 @@ public virtual ClientResult UploadFile(string filePath, FileUploadPu public virtual async Task> GetFilesAsync(CancellationToken cancellationToken = default) { ClientResult result = await GetFilesAsync(null, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((OpenAIFileCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIFileCollection.FromClientResult(result), result.GetRawResponse()); } /// Gets basic information about each of the files belonging to the user's organization. @@ -215,7 +215,7 @@ public virtual async Task> GetFilesAsync(Canc public virtual ClientResult GetFiles(CancellationToken cancellationToken = default) { ClientResult result = GetFiles(null, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((OpenAIFileCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIFileCollection.FromClientResult(result), result.GetRawResponse()); } /// Gets basic information about each of the files belonging to the user's organization. @@ -224,7 +224,7 @@ public virtual ClientResult GetFiles(CancellationToken can public virtual async Task> GetFilesAsync(FilePurpose purpose, CancellationToken cancellationToken = default) { ClientResult result = await GetFilesAsync(purpose.ToSerialString(), cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((OpenAIFileCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIFileCollection.FromClientResult(result), result.GetRawResponse()); } /// Gets basic information about each of the files belonging to the user's organization. @@ -233,7 +233,7 @@ public virtual async Task> GetFilesAsync(File public virtual ClientResult GetFiles(FilePurpose purpose, CancellationToken cancellationToken = default) { ClientResult result = GetFiles(purpose.ToSerialString(), cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((OpenAIFileCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIFileCollection.FromClientResult(result), result.GetRawResponse()); } /// Gets basic information about the specified file. @@ -246,7 +246,7 @@ public virtual async Task> GetFileAsync(string fileId, Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); ClientResult result = await GetFileAsync(fileId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((OpenAIFile)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIFile.FromClientResult(result), result.GetRawResponse()); } /// Gets basic information about the specified file. @@ -259,7 +259,7 @@ public virtual ClientResult GetFile(string fileId, CancellationToken Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); ClientResult result = GetFile(fileId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((OpenAIFile)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIFile.FromClientResult(result), result.GetRawResponse()); } /// Deletes the specified file. @@ -272,7 +272,7 @@ public virtual async Task> DeleteFileAsync(stri Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); ClientResult result = await DeleteFileAsync(fileId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((FileDeletionResult)result, result.GetRawResponse()); + return ClientResult.FromValue(FileDeletionResult.FromClientResult(result), result.GetRawResponse()); } /// Deletes the specified file. @@ -285,7 +285,7 @@ public virtual ClientResult DeleteFile(string fileId, Cancel Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); ClientResult result = DeleteFile(fileId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((FileDeletionResult)result, result.GetRawResponse()); + return ClientResult.FromValue(FileDeletionResult.FromClientResult(result), result.GetRawResponse()); } /// Downloads the content of the specified file. diff --git a/src/Custom/Files/OpenAIFileCollection.cs b/src/Custom/Files/OpenAIFileCollection.cs index 07ab6a5ca..46e9cc65b 100644 --- a/src/Custom/Files/OpenAIFileCollection.cs +++ b/src/Custom/Files/OpenAIFileCollection.cs @@ -1,6 +1,9 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Text.Json; namespace OpenAI.Files; @@ -8,12 +11,12 @@ namespace OpenAI.Files; [CodeGenSuppress("Data")] [CodeGenSuppress(nameof(OpenAIFileCollection))] [CodeGenSuppress(nameof(OpenAIFileCollection), typeof(string), typeof(string), typeof(bool))] -[CodeGenSuppress(nameof(OpenAIFileCollection), typeof(InternalListFilesResponseObject), typeof(string), typeof(string), typeof(bool), typeof(IDictionary))] +[CodeGenSuppress(nameof(OpenAIFileCollection), typeof(string), typeof(string), typeof(string), typeof(bool), typeof(IDictionary))] public partial class OpenAIFileCollection : ReadOnlyCollection { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. [CodeGenMember("Object")] - private InternalListFilesResponseObject Object { get; } = InternalListFilesResponseObject.List; + private string Object { get; } = "list"; // CUSTOM: Internalizing pending stanardized pagination representation for the list operation. [CodeGenMember("FirstId")] @@ -56,4 +59,11 @@ internal OpenAIFileCollection() : base([]) { } + + internal static OpenAIFileCollection FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeOpenAIFileCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + } } \ No newline at end of file diff --git a/src/Custom/Files/OpenAIFilesModelFactory.cs b/src/Custom/Files/OpenAIFilesModelFactory.cs index a470cb920..e26c9bd01 100644 --- a/src/Custom/Files/OpenAIFilesModelFactory.cs +++ b/src/Custom/Files/OpenAIFilesModelFactory.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace OpenAI.Files; @@ -15,7 +16,7 @@ public static FileDeletionResult FileDeletionResult(string fileId = null, bool d return new FileDeletionResult( deleted, fileId, - InternalDeleteFileResponseObject.File, + "file", additionalBinaryDataProperties: null); } @@ -23,7 +24,7 @@ public static FileDeletionResult FileDeletionResult(string fileId = null, bool d public static OpenAIFile OpenAIFileInfo(string id, int? sizeInBytes, DateTimeOffset createdAt, string filename, FilePurpose purpose, FileStatus status, string statusDetails) => OpenAIFileInfo( id: id, - sizeInBytes: sizeInBytes, + sizeInBytesLong: sizeInBytes, createdAt: createdAt, filename: filename, purpose: purpose, @@ -31,7 +32,8 @@ public static OpenAIFile OpenAIFileInfo(string id, int? sizeInBytes, DateTimeOff statusDetails: statusDetails, expiresAt: default); - public static OpenAIFile OpenAIFileInfo(string id = null, int? sizeInBytes = null, DateTimeOffset createdAt = default, string filename = null, FilePurpose purpose = default, FileStatus status = default, string statusDetails = null, DateTimeOffset? expiresAt = null) + [Experimental("OPENAI001")] + public static OpenAIFile OpenAIFileInfo(string id = null, int? sizeInBytes = null, DateTimeOffset createdAt = default, string filename = null, FilePurpose purpose = default, FileStatus status = default, string statusDetails = null, DateTimeOffset? expiresAt = null, long? sizeInBytesLong = null) { return new OpenAIFile( id: id, @@ -39,8 +41,8 @@ public static OpenAIFile OpenAIFileInfo(string id = null, int? sizeInBytes = nul expiresAt: expiresAt, filename: filename, purpose: purpose, - @object: InternalOpenAIFileObject.File, - sizeInBytes: sizeInBytes, + @object: "file", + sizeInBytesLong: sizeInBytesLong ?? sizeInBytes, status: status, statusDetails: statusDetails, additionalBinaryDataProperties: null); diff --git a/src/Custom/FineTuning/FineTuningCheckpoint.cs b/src/Custom/FineTuning/FineTuningCheckpoint.cs new file mode 100644 index 000000000..bc04688ac --- /dev/null +++ b/src/Custom/FineTuning/FineTuningCheckpoint.cs @@ -0,0 +1,36 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJobCheckpoint")] +public partial class FineTuningCheckpoint +{ + [CodeGenMember("Id")] + public string Id { get; } + + [CodeGenMember("CreatedAt")] + public DateTimeOffset CreatedAt { get; } + + [CodeGenMember("FineTunedModelCheckpoint")] + public string ModelId { get; } + + [CodeGenMember("StepNumber")] + public int StepNumber { get; } + + [CodeGenMember("FineTuningJobCheckpointMetrics")] + public FineTuningCheckpointMetrics Metrics { get; } + + [CodeGenMember("FineTuningJobId")] + public string JobId { get; } + + [CodeGenMember("Object")] + private string _object { get; } + + public override string ToString() + { + return $"FineTuningJobCheckpoint<{Id}, {StepNumber}, {ModelId}>"; + } + +} diff --git a/src/Custom/FineTuning/FineTuningCheckpointMetrics.cs b/src/Custom/FineTuning/FineTuningCheckpointMetrics.cs new file mode 100644 index 000000000..05548245e --- /dev/null +++ b/src/Custom/FineTuning/FineTuningCheckpointMetrics.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJobCheckpointMetrics")] +public partial class FineTuningCheckpointMetrics +{ + [CodeGenMember("Step")] + public int StepNumber { get; } + +} diff --git a/src/Custom/FineTuning/FineTuningClient.Protocol.cs b/src/Custom/FineTuning/FineTuningClient.Protocol.cs index 1f3c25c5d..88112acab 100644 --- a/src/Custom/FineTuning/FineTuningClient.Protocol.cs +++ b/src/Custom/FineTuning/FineTuningClient.Protocol.cs @@ -1,28 +1,24 @@ using System; using System.ClientModel; using System.ClientModel.Primitives; -using System.Text.Json; using System.Threading.Tasks; namespace OpenAI.FineTuning; [CodeGenSuppress("CreateFineTuningJobAsync", typeof(BinaryContent), typeof(RequestOptions))] [CodeGenSuppress("CreateFineTuningJob", typeof(BinaryContent), typeof(RequestOptions))] -[CodeGenSuppress("ListPaginatedFineTuningJobsAsync", typeof(string), typeof(int?), typeof(RequestOptions))] -[CodeGenSuppress("ListPaginatedFineTuningJobs", typeof(string), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetPaginatedFineTuningJobsAsync", typeof(string), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetPaginatedFineTuningJobs", typeof(string), typeof(int?), typeof(RequestOptions))] [CodeGenSuppress("RetrieveFineTuningJobAsync", typeof(string), typeof(RequestOptions))] [CodeGenSuppress("RetrieveFineTuningJob", typeof(string), typeof(RequestOptions))] [CodeGenSuppress("CancelFineTuningJobAsync", typeof(string), typeof(RequestOptions))] [CodeGenSuppress("CancelFineTuningJob", typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListFineTuningEventsAsync", typeof(string), typeof(string), typeof(int?), typeof(RequestOptions))] -[CodeGenSuppress("ListFineTuningEvents", typeof(string), typeof(string), typeof(int?), typeof(RequestOptions))] -[CodeGenSuppress("ListFineTuningJobCheckpointsAsync", typeof(string), typeof(string), typeof(int?), typeof(RequestOptions))] -[CodeGenSuppress("ListFineTuningJobCheckpoints", typeof(string), typeof(string), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetFineTuningEventsAsync", typeof(string), typeof(string), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetFineTuningEvents", typeof(string), typeof(string), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetFineTuningJobCheckpointsAsync", typeof(string), typeof(string), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetFineTuningJobCheckpoints", typeof(string), typeof(string), typeof(int?), typeof(RequestOptions))] public partial class FineTuningClient { - // CUSTOM: - // - Renamed. - // - Edited doc comment. /// /// [Protocol Method] Creates a fine-tuning job which begins the process of creating a new model from a given dataset. /// @@ -31,150 +27,117 @@ public partial class FineTuningClient /// [Learn more about fine-tuning](/docs/guides/fine-tuning) /// /// Value indicating whether the method - /// should return after the operation has been started and is still running - /// on the service, or wait until the operation has completed to return. + /// should return after the LRO has been started and is still running + /// on the service, or wait until the job has completed to return. /// /// The content to send as the body of the request. /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// is null. /// Service returned a non-success status code. - /// A that can be used to wait for - /// the operation to complete, get information about the fine tuning job, or - /// cancel the operation. - public virtual async Task CreateFineTuningJobAsync( + /// A that can be used to wait for + /// the LRO to complete, get information about the fine tuning job, or + /// cancel the job. + public virtual async Task FineTuneAsync( BinaryContent content, bool waitUntilCompleted, - RequestOptions options = null) + RequestOptions options) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateCreateFineTuningJobRequest(content, options); + using PipelineMessage message = PostJobPipelineMessage(content, options); PipelineResponse response = await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); - using JsonDocument doc = JsonDocument.Parse(response.Content); - string jobId = doc.RootElement.GetProperty("id"u8).GetString(); - string status = doc.RootElement.GetProperty("status"u8).GetString(); - - FineTuningJobOperation operation = this.CreateCreateJobOperation(jobId, status, response); - return await operation.WaitUntilAsync(waitUntilCompleted, options).ConfigureAwait(false); + FineTuningJob job = this.CreateJobFromResponse(response); + return await job.WaitUntilAsync(waitUntilCompleted, options).ConfigureAwait(false); } - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Creates a fine-tuning job which begins the process of creating a new model from a given dataset. - /// - /// Response includes details of the enqueued job including job status and the name of the fine-tuned models once complete. - /// - /// [Learn more about fine-tuning](/docs/guides/fine-tuning) - /// - /// Value indicating whether the method - /// should return after the operation has been started and is still running - /// on the service, or wait until the operation has completed to return. - /// - /// The content to send as the body of the request. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// Service returned a non-success status code. - /// A that can be used to wait for - /// the operation to complete, get information about the fine tuning job, or - /// cancel the operation. - public virtual FineTuningJobOperation CreateFineTuningJob( + /// + public virtual FineTuningJob FineTune( BinaryContent content, bool waitUntilCompleted, - RequestOptions options = null) + RequestOptions options) { Argument.AssertNotNull(content, nameof(content)); - using PipelineMessage message = CreateCreateFineTuningJobRequest(content, options); + using PipelineMessage message = PostJobPipelineMessage(content, options); PipelineResponse response = Pipeline.ProcessMessage(message, options); - using JsonDocument doc = JsonDocument.Parse(response.Content); - string jobId = doc.RootElement.GetProperty("id"u8).GetString(); - string status = doc.RootElement.GetProperty("status"u8).GetString(); - - FineTuningJobOperation operation = this.CreateCreateJobOperation(jobId, status, response); - return operation.WaitUntil(waitUntilCompleted, options); + FineTuningJob job = this.CreateJobFromResponse(response); + return job.WaitUntil(waitUntilCompleted, options); } // CUSTOM: // - Renamed. // - Edited doc comment. /// - /// [Protocol Method] List your organization's fine-tuning jobs + /// [Protocol Method] List all of your organization's fine-tuning jobs /// - /// Identifier for the last job from the previous pagination request. - /// Number of fine-tuning jobs to retrieve. + /// Identifier for the last job from the previous pagination request. + /// Number of fine-tuning jobs to retrieve at a time. Collection will iterate until _all_ jobs are fetched. /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// Service returned a non-success status code. /// The response returned from the service. - public virtual AsyncCollectionResult GetJobsAsync(string after, int? limit, RequestOptions options) + internal virtual AsyncCollectionResult GetJobsAsync(string afterJobId, int? pageSize, RequestOptions options) { - return new AsyncFineTuningJobCollectionResult(this, Pipeline, options, limit, after); + return new AsyncFineTuningJobCollectionResult(this, Pipeline, options, pageSize, afterJobId); } + // CUSTOM: // - Renamed. // - Edited doc comment. /// - /// [Protocol Method] List your organization's fine-tuning jobs + /// [Protocol Method] List all of your your organization's fine-tuning jobs /// /// Identifier for the last job from the previous pagination request. - /// Number of fine-tuning jobs to retrieve. + /// Number of fine-tuning jobs to retrieve at a time. Collection will iterate until _all_ jobs are fetched. /// The request options, which can override default behaviors of the client pipeline on a per-call basis. /// Service returned a non-success status code. /// The response returned from the service. - public virtual CollectionResult GetJobs(string after, int? limit, RequestOptions options) + internal virtual CollectionResult GetJobs(string after, int? pageSize, RequestOptions options) { - return new FineTuningJobCollectionResult(this, Pipeline, options, limit, after); + return new FineTuningJobCollectionResult(this, Pipeline, options, pageSize, after); } - // CUSTOM: - // - Renamed. - // - Edited doc comment. /// /// [Protocol Method] Get info about a fine-tuning job. /// /// [Learn more about fine-tuning](/docs/guides/fine-tuning) /// - /// The ID of the fine-tuning job. + /// The ID of the fine-tuning job. /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. + /// is null. + /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// The response returned from the service. - public virtual async Task GetJobAsync(string fineTuningJobId, RequestOptions options) + internal async Task GetJobAsync(string JobId, RequestOptions options) { - Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); + Argument.AssertNotNullOrEmpty(JobId, nameof(JobId)); - using PipelineMessage message = CreateRetrieveFineTuningJobRequest(fineTuningJobId, options); + using PipelineMessage message = GetJobPipelineMessage(Pipeline, _endpoint, JobId, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } - // CUSTOM: - // - Renamed. - // - Edited doc comment. /// /// [Protocol Method] Get info about a fine-tuning job. /// /// [Learn more about fine-tuning](/docs/guides/fine-tuning) /// - /// The ID of the fine-tuning job. + /// The ID of the fine-tuning job. /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// is null. - /// is an empty string, and was expected to be non-empty. + /// is null. + /// is an empty string, and was expected to be non-empty. /// Service returned a non-success status code. /// The response returned from the service. - public virtual ClientResult GetJob(string fineTuningJobId, RequestOptions options) + internal ClientResult GetJob(string JobId, RequestOptions options) { - Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); + Argument.AssertNotNullOrEmpty(JobId, nameof(JobId)); - using PipelineMessage message = CreateRetrieveFineTuningJobRequest(fineTuningJobId, options); + using PipelineMessage message = GetJobPipelineMessage(Pipeline, _endpoint, JobId, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } - internal virtual PipelineMessage CreateCreateFineTuningJobRequest(BinaryContent content, RequestOptions options) + internal virtual PipelineMessage PostJobPipelineMessage(BinaryContent content, RequestOptions options) { var message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -191,7 +154,7 @@ internal virtual PipelineMessage CreateCreateFineTuningJobRequest(BinaryContent return message; } - internal virtual PipelineMessage CreateGetPaginatedFineTuningJobsRequest(string after, int? limit, RequestOptions options) + internal virtual PipelineMessage GetJobsPipelineMessage(string after, int? limit, RequestOptions options) { var message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -214,16 +177,18 @@ internal virtual PipelineMessage CreateGetPaginatedFineTuningJobsRequest(string return message; } - internal virtual PipelineMessage CreateRetrieveFineTuningJobRequest(string fineTuningJobId, RequestOptions options) + internal static PipelineMessage GetJobPipelineMessage(ClientPipeline clientPipeline, Uri endpoint, string JobId, RequestOptions options) { - var message = Pipeline.CreateMessage(); + // This is referenced by client.GetJobAsync and client.GetJob, and job.GetJobAsync and job.GetJob. + // It is static so that FineTuningJob can use it as well. + var message = clientPipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; var request = message.Request; request.Method = "GET"; var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); + uri.Reset(endpoint); uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(fineTuningJobId, true); + uri.AppendPath(JobId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); message.Apply(options); diff --git a/src/Custom/FineTuning/FineTuningClient.cs b/src/Custom/FineTuning/FineTuningClient.cs index 4b6a3a0bc..fde3c4f43 100644 --- a/src/Custom/FineTuning/FineTuningClient.cs +++ b/src/Custom/FineTuning/FineTuningClient.cs @@ -1,8 +1,12 @@ using System; using System.ClientModel; using System.ClientModel.Primitives; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Linq; using System.Threading; +using System.Threading.Tasks; +using OpenAI.VectorStores; namespace OpenAI.FineTuning; @@ -10,22 +14,38 @@ namespace OpenAI.FineTuning; // - Renamed. // - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. // - Suppressed convenience methods for now. -/// The service client for OpenAI fine-tuning operations. +/// The service client for OpenAI fine-tuning jobs. [Experimental("OPENAI001")] [CodeGenType("FineTuning")] -[CodeGenSuppress("FineTuningClient", typeof(ClientPipeline), typeof(Uri))] +[CodeGenSuppress("CancelFineTuningJob", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CancelFineTuningJobAsync", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CreateFineTuningCheckpointPermission", typeof(string), typeof(IEnumerable), typeof(CancellationToken))] +[CodeGenSuppress("CreateFineTuningCheckpointPermissionAsync", typeof(string), typeof(IEnumerable), typeof(CancellationToken))] +[CodeGenSuppress("CreateFineTuningJob", typeof(FineTuningOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateFineTuningJobAsync", typeof(FineTuningOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateFineTuningJob", typeof(FineTuningOptions), typeof(CancellationToken))] -[CodeGenSuppress("ListPaginatedFineTuningJobsAsync", typeof(string), typeof(int?), typeof(CancellationToken))] -[CodeGenSuppress("ListPaginatedFineTuningJobs", typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetPaginatedFineTuningJobsAsync", typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetPaginatedFineTuningJobs", typeof(string), typeof(int?), typeof(CancellationToken))] [CodeGenSuppress("RetrieveFineTuningJobAsync", typeof(string), typeof(CancellationToken))] [CodeGenSuppress("RetrieveFineTuningJob", typeof(string), typeof(CancellationToken))] [CodeGenSuppress("CancelFineTuningJobAsync", typeof(string), typeof(CancellationToken))] [CodeGenSuppress("CancelFineTuningJob", typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListFineTuningEventsAsync", typeof(string), typeof(string), typeof(int?), typeof(CancellationToken))] -[CodeGenSuppress("ListFineTuningEvents", typeof(string), typeof(string), typeof(int?), typeof(CancellationToken))] -[CodeGenSuppress("ListFineTuningJobCheckpointsAsync", typeof(string), typeof(string), typeof(int?), typeof(CancellationToken))] -[CodeGenSuppress("ListFineTuningJobCheckpoints", typeof(string), typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetFineTuningEventsAsync", typeof(string), typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetFineTuningEvents", typeof(string), typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetFineTuningJobCheckpointsAsync", typeof(string), typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetFineTuningJobCheckpoints", typeof(string), typeof(string), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("DeleteFineTuningCheckpointPermission", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("DeleteFineTuningCheckpointPermissionAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("FineTuningClient", typeof(ClientPipeline), typeof(Uri))] +[CodeGenSuppress("PauseFineTuningJob", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("PauseFineTuningJobAsync", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("ResumeFineTuningJob", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("ResumeFineTuningJobAsync", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("RetrieveFineTuningJob", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("RetrieveFineTuningJobAsync", typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetFineTuningCheckpointPermissions", typeof(string), typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetFineTuningCheckpointPermissionsAsync", typeof(string), typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(CancellationToken))] + public partial class FineTuningClient { // CUSTOM: Added as a convenience. @@ -78,8 +98,104 @@ protected internal FineTuningClient(ClientPipeline pipeline, OpenAIClientOptions _endpoint = OpenAIClient.GetEndpoint(options); } - internal virtual FineTuningJobOperation CreateCreateJobOperation(string jobId, string status, PipelineResponse response) + protected internal FineTuningClient(ClientPipeline pipeline, Uri endpoint) + { + Argument.AssertNotNull(pipeline, nameof(pipeline)); + Argument.AssertNotNull(endpoint, nameof(endpoint)); + + Pipeline = pipeline; + _endpoint = endpoint; + } + + /// Creates a job with a training file and base model. + /// The original model to use as a starting base to fine-tune. String such as "gpt-3.5-turbo" + /// The training file Id that is already uploaded. String should match pattern '^file-[a-zA-Z0-9]{24}$'. + /// Whether to wait for the job to complete before returning. + /// Additional options () to customize the request. + /// A containing the newly started fine-tuning job. + /// The cancellation token. + public virtual FineTuningJob FineTune( + string baseModel, + string trainingFileId, + bool waitUntilCompleted, FineTuningOptions options = default, CancellationToken cancellationToken = default + ) + { + options ??= new FineTuningOptions(); + options.Model = baseModel; + options.TrainingFile = trainingFileId; + + return FineTune(options.ToBinaryContent(), waitUntilCompleted, cancellationToken.ToRequestOptions()); + } + + /// + public virtual async Task FineTuneAsync( + string baseModel, + string trainingFileId, + bool waitUntilCompleted, FineTuningOptions options = default, CancellationToken cancellationToken = default + ) + { + + options ??= new FineTuningOptions(); + options.Model = baseModel; + options.TrainingFile = trainingFileId; + + return await FineTuneAsync(options.ToBinaryContent(), waitUntilCompleted, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + } + /// + /// Get FineTuningJob for a previously started fine-tuning job. + /// + /// [Learn more about fine-tuning](/docs/guides/fine-tuning) + /// + /// The ID of the fine-tuning job. + /// The cancellation token. + public virtual FineTuningJob GetJob(string jobId, CancellationToken cancellationToken = default) + { + return FineTuningJob.Rehydrate(this, jobId, cancellationToken.ToRequestOptions()); + } + + /// + /// Get FineTuningJob for a previously started fine-tuning job. + /// + /// [Learn more about fine-tuning](/docs/guides/fine-tuning) + /// + /// The ID of the fine-tuning job. + /// The cancellation token. + public async virtual Task GetJobAsync(string jobId, CancellationToken cancellationToken = default) + { + return await FineTuningJob.RehydrateAsync(this, jobId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + } + + /// + /// Retrieves a list of fine-tuning jobs. + /// + /// Additional options: to customize the request. + /// The cancellation token. + /// A containing the list of fine-tuning jobs. + public virtual CollectionResult GetJobs(FineTuningJobCollectionOptions options = default, CancellationToken cancellationToken = default) + { + options ??= new FineTuningJobCollectionOptions(); + return GetJobs(options.AfterJobId, options.PageSize, cancellationToken.ToRequestOptions()) as CollectionResult; + } + + /// + /// A containing the list of fine-tuning jobs. + public virtual AsyncCollectionResult GetJobsAsync( + FineTuningJobCollectionOptions options = default, + CancellationToken cancellationToken = default) + { + options ??= new FineTuningJobCollectionOptions(); + AsyncCollectionResult jobs = GetJobsAsync(options.AfterJobId, options.PageSize, cancellationToken.ToRequestOptions()); + return (AsyncCollectionResult)jobs; + } + + internal virtual FineTuningJob CreateJobFromResponse(PipelineResponse response) + { + return new FineTuningJob(Pipeline, _endpoint, response); + } + + internal virtual IEnumerable CreateJobsFromPageResponse(PipelineResponse response) { - return new FineTuningJobOperation(Pipeline, _endpoint, jobId, status, response); + InternalListPaginatedFineTuningJobsResponse jobs = ModelReaderWriter.Read(response.Content)!; + return jobs.Data.Select(job => new FineTuningJob(Pipeline, _endpoint, job, response)); } } diff --git a/src/Custom/FineTuning/FineTuningError.cs b/src/Custom/FineTuning/FineTuningError.cs new file mode 100644 index 000000000..8157b3fc1 --- /dev/null +++ b/src/Custom/FineTuning/FineTuningError.cs @@ -0,0 +1,11 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJobError1")] +public partial class FineTuningError +{ + [CodeGenMember("Param")] + public string InvalidParameter { get; } +} diff --git a/src/Custom/FineTuning/FineTuningEvent.cs b/src/Custom/FineTuning/FineTuningEvent.cs new file mode 100644 index 000000000..816978735 --- /dev/null +++ b/src/Custom/FineTuning/FineTuningEvent.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJobEvent")] +public partial class FineTuningEvent +{ + [CodeGenMember("FineTuningJobEventLevel")] + public string Level; + + [CodeGenMember("Object")] + private string _object; +} \ No newline at end of file diff --git a/src/Custom/FineTuning/FineTuningHyperparameters.cs b/src/Custom/FineTuning/FineTuningHyperparameters.cs new file mode 100644 index 000000000..8c580c7e3 --- /dev/null +++ b/src/Custom/FineTuning/FineTuningHyperparameters.cs @@ -0,0 +1,49 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.InteropServices; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJobHyperparameters")] +[StructLayout(LayoutKind.Auto)] +public readonly partial struct FineTuningHyperparameters +{ + + private static readonly BinaryData Auto = new("\"auto\""); + + [CodeGenMember("NEpochs")] + internal BinaryData _EpochCount { get; } + + [CodeGenMember("BatchSize")] + internal BinaryData _BatchSize { get; } + + [CodeGenMember("LearningRateMultiplier")] + internal BinaryData _LearningRateMultiplier { get; } + + private float HandleDefaults(BinaryData data) + { + if (data is null) + { + throw new ArgumentNullException("This hyperparameter is not set. Values for BatchSize and LearningRateMultiplier are not available in responses."); + } + + if (data.ToString() == Auto.ToString()) + { + return 0; + } + + try + { + return float.Parse(data.ToString()); + } + catch (FormatException) + { + throw new FormatException($"Hyperparameter expected a number or \"auto\" string. Got {data}"); + } + } + + public int EpochCount => (int)HandleDefaults(_EpochCount); + public int BatchSize => (int)HandleDefaults(_BatchSize); + public float LearningRateMultiplier => HandleDefaults(_LearningRateMultiplier); +} diff --git a/src/Custom/FineTuning/FineTuningIntegration.cs b/src/Custom/FineTuning/FineTuningIntegration.cs new file mode 100644 index 000000000..8bbe13d7c --- /dev/null +++ b/src/Custom/FineTuning/FineTuningIntegration.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; + +namespace OpenAI.FineTuning; + +/// +/// Parent class for all fine-tuning integrations. +/// Use to create a Weights & Biases integration. +/// +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestIntegration")] +public partial class FineTuningIntegration +{ +} \ No newline at end of file diff --git a/src/Custom/FineTuning/FineTuningJob.Protocol.cs b/src/Custom/FineTuning/FineTuningJob.Protocol.cs new file mode 100644 index 000000000..5d6fa88ec --- /dev/null +++ b/src/Custom/FineTuning/FineTuningJob.Protocol.cs @@ -0,0 +1,285 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.FineTuning; + +/// +/// A long-running operation for creating a new model from a given dataset. +/// +[Experimental("OPENAI001")] +public partial class FineTuningJob : OperationResult +{ + internal readonly ClientPipeline _pipeline; + private readonly Uri _endpoint; + internal readonly FineTuningClient _client; + + /// + public override ContinuationToken? RehydrationToken { get; protected set; } + + /// + /// Recreates a from a rehydration token. + /// + /// The used to obtain the job status from the service. + /// The rehydration token corresponding to the job to rehydrate. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The rehydrated LRO . + /// or is null. + public static FineTuningJob Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, RequestOptions options) + { + Argument.AssertNotNull(client, nameof(client)); + Argument.AssertNotNull(rehydrationToken, nameof(rehydrationToken)); + + FineTuningJobToken token = FineTuningJobToken.FromToken(rehydrationToken); + + ClientResult result = client.GetJob(token.JobId, options); + PipelineResponse response = result.GetRawResponse(); + + return client.CreateJobFromResponse(response); + } + + /// + public static async Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, RequestOptions options) + { + Argument.AssertNotNull(client, nameof(client)); + Argument.AssertNotNull(rehydrationToken, nameof(rehydrationToken)); + + FineTuningJobToken token = FineTuningJobToken.FromToken(rehydrationToken); + + ClientResult result = await client.GetJobAsync(token.JobId, options).ConfigureAwait(false); + PipelineResponse response = result.GetRawResponse(); + + return client.CreateJobFromResponse(response); + } + + /// + /// Recreates a from a fine tuning job id. + /// + /// The used to obtain the job status from the service. + /// The id of the fine tuning job to rehydrate. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// The rehydrated LRO . + /// or is null. + public static FineTuningJob Rehydrate(FineTuningClient client, string JobId, RequestOptions options) + { + Argument.AssertNotNull(client, nameof(client)); + Argument.AssertNotNull(JobId, nameof(JobId)); + + ClientResult result = client.GetJob(JobId, options); + PipelineResponse response = result.GetRawResponse(); + + return client.CreateJobFromResponse(response); + } + + /// /> + public static async Task RehydrateAsync(FineTuningClient client, string JobId, RequestOptions options) + { + Argument.AssertNotNull(client, nameof(client)); + Argument.AssertNotNull(JobId, nameof(JobId)); + + ClientResult result = await client.GetJobAsync(JobId, options).ConfigureAwait(false); + PipelineResponse response = result.GetRawResponse(); + + return client.CreateJobFromResponse(response); + } + + + /// + public override async ValueTask UpdateStatusAsync(RequestOptions? options) + { + options = options ?? new RequestOptions(); + ClientResult result = await GetJobAsync(options).ConfigureAwait(false); + var response = result.GetRawResponse(); + SetRawResponse(response); + using JsonDocument doc = JsonDocument.Parse(response.Content); + string status = doc.RootElement.GetProperty("status"u8).GetString()!; + HasCompleted = GetHasCompleted(status); + return result; + } + + /// + public override ClientResult UpdateStatus(RequestOptions? options) + { + options = options ?? new RequestOptions(); + ClientResult result = GetJob(options); + var response = result.GetRawResponse(); + SetRawResponse(response); + using JsonDocument doc = JsonDocument.Parse(response.Content); + string status = doc.RootElement.GetProperty("status"u8).GetString()!; + HasCompleted = GetHasCompleted(status); + return result; + } + + internal async Task WaitUntilAsync(bool waitUntilCompleted, RequestOptions options) + { + if (!waitUntilCompleted) + { + return this; + } + + await WaitForCompletionAsync(options?.CancellationToken ?? default).ConfigureAwait(false); + return this; + } + + internal FineTuningJob WaitUntil(bool waitUntilCompleted, RequestOptions options) + { + if (!waitUntilCompleted) + { + return this; + } + + WaitForCompletion(options?.CancellationToken ?? default); + return this; + } + + /// + /// [Protocol Method] Get info about a fine-tuning job. + /// + /// [Learn more about fine-tuning](/docs/guides/fine-tuning) + /// + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + internal virtual async Task GetJobAsync(RequestOptions options) + { + using PipelineMessage message = FineTuningClient.GetJobPipelineMessage(_pipeline, _endpoint, JobId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + // CUSTOM: + // - Renamed. + // - Edited doc comment. + /// + /// [Protocol Method] Get info about a fine-tuning job. + /// + /// [Learn more about fine-tuning](/docs/guides/fine-tuning) + /// + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + internal virtual ClientResult GetJob(RequestOptions options) + { + using PipelineMessage message = FineTuningClient.GetJobPipelineMessage(_pipeline, _endpoint, JobId, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + /// + /// [Protocol Method] Immediately cancel a fine-tune job. + /// + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task CancelAsync(RequestOptions options) + { + // Create FineTuningClient from _endpoint and _pipeline + using PipelineMessage message = _client.CreateCancelFineTuningJobRequest(JobId, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] Immediately cancel a fine-tune job. + /// + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult Cancel(RequestOptions options) + { + using PipelineMessage message = _client.CreateCancelFineTuningJobRequest(JobId, options); + PipelineResponse response = _pipeline.ProcessMessage(message, options); + return ClientResult.FromResponse(response); + } + + /// + /// [Protocol Method] Get status updates (events) for a fine-tuning job. + /// + /// Identifier for the last event from the previous pagination request. + /// Number of events to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual AsyncCollectionResult GetEventsAsync(string? after, int? limit, RequestOptions options) + { + return new AsyncFineTuningEventCollectionResult(this, options, limit, after); + } + + /// + public virtual CollectionResult GetEvents(string? after, int? limit, RequestOptions options) + { + return new FineTuningEventCollectionResult(this, options, limit, after); + } + + /// + /// [Protocol Method] List the checkpoints for a fine-tuning job. + /// + /// Identifier for the last checkpoint ID from the previous pagination request. + /// Number of checkpoints to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual AsyncCollectionResult GetCheckpointsAsync(string? after, int? limit, RequestOptions? options) + { + return new AsyncFineTuningCheckpointCollectionResult(this, options, limit, after); + } + + /// + /// [Protocol Method] List the checkpoints for a fine-tuning job. + /// + /// Identifier for the last checkpoint ID from the previous pagination request. + /// Number of checkpoints to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual CollectionResult GetCheckpoints(string? after, int? limit, RequestOptions? options) + { + return new FineTuningCheckpointCollectionResult(this, options, limit, after); + } + + /// + /// [Protocol Method] List the checkpoints for a fine-tuning job. + /// + /// Identifier for the last checkpoint ID from the previous pagination request. + /// Number of checkpoints to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + internal virtual async Task GetCheckpointsPageAsync(string? after, int? limit, RequestOptions? options) + { + using PipelineMessage message = _client.CreateGetFineTuningJobCheckpointsRequest(JobId, after, limit, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + /// + /// [Protocol Method] List the checkpoints for a fine-tuning job. + /// + /// Identifier for the last checkpoint ID from the previous pagination request. + /// Number of checkpoints to retrieve. + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + internal virtual ClientResult GetCheckpointsPage(string? after, int? limit, RequestOptions? options) + { + using PipelineMessage message = _client.CreateGetFineTuningJobCheckpointsRequest(JobId, after, limit, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + internal virtual async Task GetEventsPageAsync(string? after, int? limit, RequestOptions? options) + { + using PipelineMessage message = _client.CreateGetFineTuningEventsRequest(JobId, after, limit, options); + return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + internal virtual ClientResult GetEventsPage(string? after, int? limit, RequestOptions? options) + { + using PipelineMessage message = _client.CreateGetFineTuningEventsRequest(JobId, after, limit, options); + return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); + } + + + + +} diff --git a/src/Custom/FineTuning/FineTuningJob.cs b/src/Custom/FineTuning/FineTuningJob.cs new file mode 100644 index 000000000..3b652b0fa --- /dev/null +++ b/src/Custom/FineTuning/FineTuningJob.cs @@ -0,0 +1,290 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.FineTuning; + +/// +/// A long-running operation for creating a new model from a given dataset. +/// +public partial class FineTuningJob : OperationResult +{ + public string? Value = null; + public string JobId { get; private set; } = null!; + public string BaseModel { get; private set; } = null!; + public DateTimeOffset? EstimatedFinishAt { get; private set; } + public string ValidationFileId { get; private set; } = null!; + public string TrainingFileId { get; private set; } = null!; + public IReadOnlyList ResultFileIds { get; private set; } = null!; + public FineTuningStatus Status { get; private set; } + + [Obsolete("This property is deprecated. Use the MethodHyperparameters property instead.")] + public FineTuningHyperparameters Hyperparameters { get; private set; } = default; + public IReadOnlyList Integrations { get; private set; } = null!; + public int BillableTrainedTokenCount { get; private set; } + public string? UserProvidedSuffix { get; private set; } + public int? Seed { get; private set; } + public FineTuningTrainingMethod? TrainingMethod { get; private set; } = default; + public IDictionary Metadata { get; private set; } = new Dictionary(); + + public MethodHyperparameters? MethodHyperparameters + { + get + { + if (TrainingMethod == null) + { + return null; + } + if (TrainingMethod.Kind == InternalFineTuneMethodType.Supervised) + { + return TrainingMethod.Supervised.Hyperparameters; + } + else if (TrainingMethod.Kind == InternalFineTuneMethodType.Dpo) + { + return TrainingMethod.Dpo.Hyperparameters; + } + + return null; + } + } + /// + /// Creates a new from a . + /// + /// + /// + /// + internal FineTuningJob( + ClientPipeline pipeline, + Uri endpoint, + PipelineResponse response) : this(pipeline, endpoint, InternalFineTuningJob.FromClientResult(ClientResult.FromResponse(response)), response) + { + } + + /// + /// Creates a new from a . + /// Pipeline response is saved but not used for inferring job data. Response could be a page of values. + /// + /// + /// + /// + /// + internal FineTuningJob( + ClientPipeline pipeline, + Uri endpoint, + InternalFineTuningJob job, + PipelineResponse response) : base(response) + { + _pipeline = pipeline; + _endpoint = endpoint; + _client = new FineTuningClient(_pipeline, _endpoint); + CopyLocalParameters(response, job); + } + + internal void CopyLocalParameters(PipelineResponse response, InternalFineTuningJob job) + { + Value = job.FineTunedModel; + + BaseModel = job.BaseModel; + EstimatedFinishAt = job.EstimatedFinishAt; + Hyperparameters = job.Hyperparameters; + Integrations = job.Integrations; + JobId = job.JobId; + RehydrationToken = new FineTuningJobToken(job.JobId); + ResultFileIds = job.ResultFileIds; + Seed = job.Seed; + Status = job.Status; + TrainingFileId = job.TrainingFileId; + UserProvidedSuffix = job.UserProvidedSuffix; + ValidationFileId = job.ValidationFileId; + TrainingMethod = job.Method; + Metadata = job.Metadata; + + HasCompleted = GetHasCompleted(Status); + SetRawResponse(response); + } + + private static bool GetHasCompleted(FineTuningStatus status) + { + return status == FineTuningStatus.Succeeded || + status == FineTuningStatus.Failed || + status == FineTuningStatus.Cancelled; + } + + /// + /// Get status updates (events) for a fine-tuning job. + /// + /// Filter parameters via . + /// The cancellation token to use. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual AsyncCollectionResult GetEventsAsync(GetEventsOptions options, CancellationToken cancellationToken = default) + { + options ??= new GetEventsOptions(); + return (AsyncCollectionResult)GetEventsAsync(options.AfterEventId, options.PageSize, cancellationToken.ToRequestOptions()); + } + + /// + public virtual CollectionResult GetEvents(GetEventsOptions options, CancellationToken cancellationToken = default) + { + options ??= new GetEventsOptions(); + return (CollectionResult)GetEvents(options.AfterEventId, options.PageSize, cancellationToken.ToRequestOptions()); + } + + /// + /// List the checkpoints for a fine-tuning job. + /// + /// Filter parameters via . + /// The cancellation token to use. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual AsyncCollectionResult GetCheckpointsAsync(GetCheckpointsOptions? options = null, CancellationToken cancellationToken = default) + { + options ??= new GetCheckpointsOptions(); + return (AsyncCollectionResult)GetCheckpointsAsync(options.AfterCheckpointId, options.PageSize, cancellationToken.ToRequestOptions()); + + } + + /// + /// List the checkpoints for a fine-tuning job. + /// + /// Filter parameters via . + /// The cancellation token to use. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual CollectionResult GetCheckpoints(GetCheckpointsOptions? options = null, CancellationToken cancellationToken = default) + { + options ??= new GetCheckpointsOptions(); + return (CollectionResult)GetCheckpoints(options.AfterCheckpointId, options.PageSize, cancellationToken.ToRequestOptions()); + } + + /// + /// Recreates a from a rehydration token. + /// + /// The used to obtain the LRO status from the service. + /// The rehydration token corresponding to the job to rehydrate. + /// A token that can be used to cancel the request. + /// The rehydrated LRO . + /// or is null. + public static FineTuningJob Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default) + { + return Rehydrate(client, rehydrationToken, cancellationToken.ToRequestOptions()); + } + + + /// " + public static async Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default) + { + return await RehydrateAsync(client, rehydrationToken, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + } + + /// + /// Recreates a from a fine tuning job id. + /// + /// The used to obtain the LRO status from the service. + /// The id of the fine tuning job to rehydrate. + /// A token that can be used to cancel the request. + /// The rehydrated LRO . + public static FineTuningJob Rehydrate(FineTuningClient client, string JobId, CancellationToken cancellationToken = default) + { + return Rehydrate(client, JobId, cancellationToken.ToRequestOptions()); + } + + /// + public static async Task RehydrateAsync(FineTuningClient client, string JobId, CancellationToken cancellationToken = default) + { + return await RehydrateAsync(client, JobId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + } + + /// + public async ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default) + { + ClientResult result = await GetJobAsync(cancellationToken.ToRequestOptions()).ConfigureAwait(false); + var response = result.GetRawResponse(); + CopyLocalParameters(response, InternalFineTuningJob.FromClientResult(ClientResult.FromResponse(response))); + return result; + } + + /// + public ClientResult UpdateStatus(CancellationToken cancellationToken = default) + { + ClientResult result = GetJob(cancellationToken.ToRequestOptions()); + var response = result.GetRawResponse(); + CopyLocalParameters(response, InternalFineTuningJob.FromClientResult(ClientResult.FromResponse(response))); + return result; + } + + /// + /// [Protocol Method] Immediately cancel a fine-tune job, and update parameters (such as status) of the LRO. + /// + /// The cancellation token. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual ClientResult CancelAndUpdate(CancellationToken cancellationToken = default) + { + using PipelineMessage message = _client.CreateCancelFineTuningJobRequest(JobId, cancellationToken.ToRequestOptions()); + PipelineResponse response = _pipeline.ProcessMessage(message, cancellationToken.ToRequestOptions()); + CopyLocalParameters(response, InternalFineTuningJob.FromClientResult(ClientResult.FromResponse(response))); + return ClientResult.FromResponse(response); + } + + /// + /// [Protocol Method] Immediately cancel a fine-tune job. + /// + /// The request options, which can override default behaviors of the client pipeline on a per-call basis. + /// Service returned a non-success status code. + /// The response returned from the service. + public virtual async Task CancelAndUpdateAsync(CancellationToken cancellationToken = default) + { + using PipelineMessage message = _client.CreateCancelFineTuningJobRequest(JobId, cancellationToken.ToRequestOptions()); + PipelineResponse response = await _pipeline.ProcessMessageAsync(message, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + CopyLocalParameters(response, InternalFineTuningJob.FromClientResult(ClientResult.FromResponse(response))); + return ClientResult.FromResponse(response); + } + + override public async ValueTask WaitForCompletionAsync(CancellationToken cancellationToken = default) + { + while (!HasCompleted) + { + var delay = GetDelay(); + + await Task.Delay(delay, cancellationToken).ConfigureAwait(false); + + await UpdateStatusAsync(cancellationToken).ConfigureAwait(false); + } + } + + override public void WaitForCompletion(CancellationToken cancellationToken = default) + { + while (!HasCompleted) + { + TimeSpan delay = GetDelay(); + + if (!cancellationToken.CanBeCanceled) + { + Thread.Sleep(delay); + } + else if (cancellationToken.WaitHandle.WaitOne(delay)) + { + cancellationToken.ThrowIfCancellationRequested(); + } + + UpdateStatus(cancellationToken); + } + } + private TimeSpan GetDelay() + { + if (EstimatedFinishAt.HasValue) + { + return EstimatedFinishAt.Value - DateTimeOffset.UtcNow; + } + return Status == FineTuningStatus.Running + ? TimeSpan.FromSeconds(30) + : TimeSpan.FromSeconds(1); + } + +} \ No newline at end of file diff --git a/src/Custom/FineTuning/FineTuningJobCollectionOptions.cs b/src/Custom/FineTuning/FineTuningJobCollectionOptions.cs new file mode 100644 index 000000000..221f546e5 --- /dev/null +++ b/src/Custom/FineTuning/FineTuningJobCollectionOptions.cs @@ -0,0 +1,14 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +public class FineTuningJobCollectionOptions +{ + public string AfterJobId { get; set; } + + public int? PageSize { get; set; } + + // TODO: Implement status as a filter for the list of jobs + //public FineTuningStatus Status { get; set; } +} diff --git a/src/Custom/FineTuning/FineTuningJobEventType.cs b/src/Custom/FineTuning/FineTuningJobEventType.cs new file mode 100644 index 000000000..1d7bc5fd7 --- /dev/null +++ b/src/Custom/FineTuning/FineTuningJobEventType.cs @@ -0,0 +1,9 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJobEventType")] +public readonly partial struct FineTuningJobEventKind +{ +} diff --git a/src/Custom/FineTuning/FineTuningJobOperation.Protocol.cs b/src/Custom/FineTuning/FineTuningJobOperation.Protocol.cs deleted file mode 100644 index 35ccda72e..000000000 --- a/src/Custom/FineTuning/FineTuningJobOperation.Protocol.cs +++ /dev/null @@ -1,462 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; - -#nullable enable - -namespace OpenAI.FineTuning; - -/// -/// A long-running operation for creating a new model from a given dataset. -/// -[Experimental("OPENAI001")] -public class FineTuningJobOperation : OperationResult -{ - private readonly ClientPipeline _pipeline; - private readonly Uri _endpoint; - - private readonly string _jobId; - - internal FineTuningJobOperation( - ClientPipeline pipeline, - Uri endpoint, - string jobId, - string status, - PipelineResponse response) : base(response) - { - _pipeline = pipeline; - _endpoint = endpoint; - _jobId = jobId; - - HasCompleted = GetHasCompleted(status); - RehydrationToken = new FineTuningJobOperationToken(jobId); - } - - public string JobId => _jobId; - - /// - public override ContinuationToken? RehydrationToken { get; protected set; } - - /// - /// Recreates a from a rehydration token. - /// - /// The used to obtain the - /// operation status from the service. - /// The rehydration token corresponding to - /// the operation to rehydrate. - /// A token that can be used to cancel the - /// request. - /// The rehydrated operation. - /// or is null. - public static async Task RehydrateAsync(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(client, nameof(client)); - Argument.AssertNotNull(rehydrationToken, nameof(rehydrationToken)); - - FineTuningJobOperationToken token = FineTuningJobOperationToken.FromToken(rehydrationToken); - - ClientResult result = await client.GetJobAsync(token.JobId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response.Content); - string status = doc.RootElement.GetProperty("status"u8).GetString()!; - - return client.CreateCreateJobOperation(token.JobId, status, response); - } - - /// - /// Recreates a from a rehydration token. - /// - /// The used to obtain the - /// operation status from the service. - /// The rehydration token corresponding to - /// the operation to rehydrate. - /// A token that can be used to cancel the - /// request. - /// The rehydrated operation. - /// or is null. - public static FineTuningJobOperation Rehydrate(FineTuningClient client, ContinuationToken rehydrationToken, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(client, nameof(client)); - Argument.AssertNotNull(rehydrationToken, nameof(rehydrationToken)); - - FineTuningJobOperationToken token = FineTuningJobOperationToken.FromToken(rehydrationToken); - - ClientResult result = client.GetJob(token.JobId, cancellationToken.ToRequestOptions()); - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response.Content); - string status = doc.RootElement.GetProperty("status"u8).GetString()!; - - return client.CreateCreateJobOperation(token.JobId, status, response); - } - - /// - /// Recreates a from a rehydration token. - /// - /// The used to obtain the - /// operation status from the service. - /// The id of the fine tuning job to rehydrate. - /// A token that can be used to cancel the - /// request. - /// The rehydrated operation. - /// or is null. - public static async Task RehydrateAsync(FineTuningClient client, string fineTuningJobId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(client, nameof(client)); - Argument.AssertNotNull(fineTuningJobId, nameof(fineTuningJobId)); - - ClientResult result = await client.GetJobAsync(fineTuningJobId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response.Content); - string status = doc.RootElement.GetProperty("status"u8).GetString()!; - - return client.CreateCreateJobOperation(fineTuningJobId, status, response); - } - - /// - /// Recreates a from a rehydration token. - /// - /// The used to obtain the - /// operation status from the service. - /// The id of the fine tuning job to rehydrate. - /// A token that can be used to cancel the - /// request. - /// The rehydrated operation. - /// or is null. - public static FineTuningJobOperation Rehydrate(FineTuningClient client, string fineTuningJobId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(client, nameof(client)); - Argument.AssertNotNull(fineTuningJobId, nameof(fineTuningJobId)); - - ClientResult result = client.GetJob(fineTuningJobId, cancellationToken.ToRequestOptions()); - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response.Content); - string status = doc.RootElement.GetProperty("status"u8).GetString()!; - - return client.CreateCreateJobOperation(fineTuningJobId, status, response); - } - - /// - public override async ValueTask UpdateStatusAsync(RequestOptions? options = null) - { - ClientResult result = await GetJobAsync(options).ConfigureAwait(false); - - ApplyUpdate(result); - - return result; - } - - /// - public override ClientResult UpdateStatus(RequestOptions? options = null) - { - ClientResult result = GetJob(options); - - ApplyUpdate(result); - - return result; - } - - internal async Task WaitUntilAsync(bool waitUntilCompleted, RequestOptions? options) - { - if (!waitUntilCompleted) return this; - await WaitForCompletionAsync(options?.CancellationToken ?? default).ConfigureAwait(false); - return this; - } - - internal FineTuningJobOperation WaitUntil(bool waitUntilCompleted, RequestOptions? options) - { - if (!waitUntilCompleted) return this; - WaitForCompletion(options?.CancellationToken ?? default); - return this; - } - - private void ApplyUpdate(ClientResult result) - { - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response.Content); - string? status = doc.RootElement.GetProperty("status"u8).GetString(); - - HasCompleted = GetHasCompleted(status); - SetRawResponse(response); - } - - private static bool GetHasCompleted(string? status) - { - return status == FineTuningJobStatus.Succeeded || - status == FineTuningJobStatus.Failed || - status == FineTuningJobStatus.Cancelled; - } - - // Generated protocol methods - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Get info about a fine-tuning job. - /// - /// [Learn more about fine-tuning](/docs/guides/fine-tuning) - /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task GetJobAsync(RequestOptions? options) - { - using PipelineMessage message = CreateRetrieveFineTuningJobRequest(_jobId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Get info about a fine-tuning job. - /// - /// [Learn more about fine-tuning](/docs/guides/fine-tuning) - /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult GetJob(RequestOptions? options) - { - using PipelineMessage message = CreateRetrieveFineTuningJobRequest(_jobId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Immediately cancel a fine-tune job. - /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual async Task CancelAsync(RequestOptions? options) - { - using PipelineMessage message = CreateCancelFineTuningJobRequest(_jobId, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Immediately cancel a fine-tune job. - /// - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual ClientResult Cancel(RequestOptions? options) - { - using PipelineMessage message = CreateCancelFineTuningJobRequest(_jobId, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Get status updates for a fine-tuning job. - /// - /// Identifier for the last event from the previous pagination request. - /// Number of events to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual AsyncCollectionResult GetJobEventsAsync(string? after, int? limit, RequestOptions options) - { - return new AsyncFineTuningJobEventCollectionResult(this, options, limit, after); - } - - // CUSTOM: - // - Renamed. - // - Edited doc comment. - /// - /// [Protocol Method] Get status updates for a fine-tuning job. - /// - /// Identifier for the last event from the previous pagination request. - /// Number of events to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual CollectionResult GetJobEvents(string? after, int? limit, RequestOptions options) - { - return new FineTuningJobEventCollectionResult(this, options, limit, after); - } - - /// - /// [Protocol Method] List the checkpoints for a fine-tuning job. - /// - /// Identifier for the last checkpoint ID from the previous pagination request. - /// Number of checkpoints to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual AsyncCollectionResult GetJobCheckpointsAsync(string? after, int? limit, RequestOptions? options) - { - return new AsyncFineTuningJobCheckpointCollectionResult(this, options, limit, after); - } - - /// - /// [Protocol Method] List the checkpoints for a fine-tuning job. - /// - /// Identifier for the last checkpoint ID from the previous pagination request. - /// Number of checkpoints to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - public virtual CollectionResult GetJobCheckpoints(string? after, int? limit, RequestOptions? options) - { - return new FineTuningJobCheckpointCollectionResult(this, options, limit, after); - } - - /// - /// [Protocol Method] List the checkpoints for a fine-tuning job. - /// - /// Identifier for the last checkpoint ID from the previous pagination request. - /// Number of checkpoints to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - internal virtual async Task GetJobCheckpointsPageAsync(string? after, int? limit, RequestOptions? options) - { - using PipelineMessage message = CreateGetFineTuningJobCheckpointsRequest(_jobId, after, limit, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - /// - /// [Protocol Method] List the checkpoints for a fine-tuning job. - /// - /// Identifier for the last checkpoint ID from the previous pagination request. - /// Number of checkpoints to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - internal virtual ClientResult GetJobPageCheckpoints(string? after, int? limit, RequestOptions? options) - { - using PipelineMessage message = CreateGetFineTuningJobCheckpointsRequest(_jobId, after, limit, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - /// - /// [Protocol Method] List the checkpoints for a fine-tuning job. - /// - /// Identifier for the last checkpoint ID from the previous pagination request. - /// Number of checkpoints to retrieve. - /// The request options, which can override default behaviors of the client pipeline on a per-call basis. - /// Service returned a non-success status code. - /// The response returned from the service. - internal virtual ClientResult GetJobCheckpointsPage(string? after, int? limit, RequestOptions? options) - { - using PipelineMessage message = CreateGetFineTuningJobCheckpointsRequest(_jobId, after, limit, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - } - - internal virtual async Task GetJobEventsPageAsync(string? after, int? limit, RequestOptions? options) - { - using PipelineMessage message = CreateGetFineTuningEventsRequest(_jobId, after, limit, options); - return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); - } - - internal virtual ClientResult GetJobEventsPage(string? after, int? limit, RequestOptions? options) - { - using PipelineMessage message = CreateGetFineTuningEventsRequest(_jobId, after, limit, options); - return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); - - } - - internal virtual PipelineMessage CreateRetrieveFineTuningJobRequest(string fineTuningJobId, RequestOptions? options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "GET"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(fineTuningJobId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal virtual PipelineMessage CreateCancelFineTuningJobRequest(string fineTuningJobId, RequestOptions? options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "POST"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(fineTuningJobId, true); - uri.AppendPath("/cancel", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal virtual PipelineMessage CreateGetFineTuningJobCheckpointsRequest(string fineTuningJobId, string? after, int? limit, RequestOptions? options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "GET"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(fineTuningJobId, true); - uri.AppendPath("/checkpoints", false); - if (after != null) - { - uri.AppendQuery("after", after, true); - } - if (limit != null) - { - uri.AppendQuery("limit", limit.Value, true); - } - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - internal virtual PipelineMessage CreateGetFineTuningEventsRequest(string jobId, string? after, int? limit, RequestOptions? options) - { - var message = _pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - var request = message.Request; - request.Method = "GET"; - var uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/fine_tuning/jobs/", false); - uri.AppendPath(jobId, true); - uri.AppendPath("/events", false); - if (after != null) - { - uri.AppendQuery("after", after, true); - } - if (limit != null) - { - uri.AppendQuery("limit", limit.Value, true); - } - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } - - private static PipelineMessageClassifier? _pipelineMessageClassifier200; - private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 ??= PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); -} diff --git a/src/Custom/FineTuning/FineTuningOptions.cs b/src/Custom/FineTuning/FineTuningOptions.cs new file mode 100644 index 000000000..98655ca04 --- /dev/null +++ b/src/Custom/FineTuning/FineTuningOptions.cs @@ -0,0 +1,72 @@ +using System.ClientModel; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +/// +/// Represents additional options available when creating a . +/// +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequest")] +public partial class FineTuningOptions +{ + [CodeGenMember("CreateFineTuningJobRequestModel")] + internal string Model { get; set; } + + [CodeGenMember("TrainingFile")] + internal string TrainingFile { get; set; } + + // CUSTOM: Hide deprecated Hyperparameters in favor of method + /// + [CodeGenMember("Hyperparameters")] + internal HyperparameterOptions Hyperparameters { get; set; } + + /// + /// Suffix to append to the model name and job name + /// + [CodeGenMember("Suffix")] + public string Suffix { get; set; } + + /// + /// The validation file Id that is already uploaded. String should match pattern '^file-[a-zA-Z0-9]{24}$' and is retrieved by using a FileClient.UploadFile(...) call. + /// + [CodeGenMember("ValidationFile")] + public string ValidationFile { get; set; } + + /// + /// A list of integrations to use See . + /// Only WandB.io is currently supported. + /// + [CodeGenMember("Integrations")] + public IList Integrations { get; } + + /// + /// The seed to use for reproducibility. + /// A random one will be generated if you do not set one. + /// + [CodeGenMember("Seed")] + public int? Seed { get; set; } + + [CodeGenMember("Method")] + public FineTuningTrainingMethod TrainingMethod { get; set; } + + [CodeGenMember("Metadata")] + public IDictionary Metadata { get; } = new ChangeTrackingDictionary(); + + public FineTuningOptions() + { + Integrations = new ChangeTrackingList(); + } + + internal FineTuningOptions(string model, string trainingFile) + : this() + { + Argument.AssertNotNull(trainingFile, nameof(trainingFile)); + + Model = model; + TrainingFile = trainingFile; + } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); +} \ No newline at end of file diff --git a/src/Custom/FineTuning/FineTuningStatus.cs b/src/Custom/FineTuning/FineTuningStatus.cs new file mode 100644 index 000000000..e7f6de9cb --- /dev/null +++ b/src/Custom/FineTuning/FineTuningStatus.cs @@ -0,0 +1,19 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJobStatus")] +public readonly partial struct FineTuningStatus : IEquatable +{ + public bool InProgress => + _value == FineTuningStatus.ValidatingFiles || + _value == FineTuningStatus.Queued || + _value == FineTuningStatus.Running; + + public bool Equals(string other) + { + return string.Equals(_value.ToString(), other); + } +} diff --git a/src/Custom/FineTuning/FineTuningTrainingMethod.cs b/src/Custom/FineTuning/FineTuningTrainingMethod.cs new file mode 100644 index 000000000..f7da0c290 --- /dev/null +++ b/src/Custom/FineTuning/FineTuningTrainingMethod.cs @@ -0,0 +1,54 @@ +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuneMethod")] +public partial class FineTuningTrainingMethod +{ + private static readonly BinaryData Auto = new("\"auto\""); + + internal InternalFineTuningJobRequestMethodSupervised Supervised { get; set; } + + internal InternalFineTuningJobRequestMethodDpo Dpo { get; set; } + + public static FineTuningTrainingMethod CreateSupervised( + HyperparameterBatchSize batchSize = null, + HyperparameterEpochCount epochCount = null, + HyperparameterLearningRate learningRate = null) + { + return new FineTuningTrainingMethod() + { + Kind = InternalFineTuneMethodType.Supervised, + Supervised = new() { + Hyperparameters = new() { + _BatchSize = batchSize is not null ? ModelReaderWriter.Write(batchSize) : null, + _NEpochs = epochCount is not null ? ModelReaderWriter.Write(epochCount) : null, + _LearningRateMultiplier = learningRate is not null ? ModelReaderWriter.Write(learningRate) : null, + }, + }, + }; + } + + public static FineTuningTrainingMethod CreateDirectPreferenceOptimization( + HyperparameterBatchSize batchSize = null, + HyperparameterEpochCount epochCount = null, + HyperparameterLearningRate learningRate = null, + HyperparameterBetaFactor betaFactor = null) + { + return new FineTuningTrainingMethod() + { + Kind = InternalFineTuneMethodType.Dpo, + Dpo = new() { + Hyperparameters = new() { + _Beta = betaFactor is not null ? ModelReaderWriter.Write(betaFactor) : null, + _BatchSize = batchSize is not null ? ModelReaderWriter.Write(batchSize) : null, + _NEpochs = epochCount is not null ? ModelReaderWriter.Write(epochCount) : null, + _LearningRateMultiplier = learningRate is not null ? ModelReaderWriter.Write(learningRate) : null, + }, + }, + }; + } +} \ No newline at end of file diff --git a/src/Custom/FineTuning/GetCheckpointsOptions.cs b/src/Custom/FineTuning/GetCheckpointsOptions.cs new file mode 100644 index 000000000..de42173d4 --- /dev/null +++ b/src/Custom/FineTuning/GetCheckpointsOptions.cs @@ -0,0 +1,11 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +public class GetCheckpointsOptions +{ + public string AfterCheckpointId { get; set; } + + public int? PageSize { get; set; } +} diff --git a/src/Custom/FineTuning/GetEventsOptions.cs b/src/Custom/FineTuning/GetEventsOptions.cs new file mode 100644 index 000000000..2d4832c14 --- /dev/null +++ b/src/Custom/FineTuning/GetEventsOptions.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("ListFineTuningJobEventsRequest")] +public class GetEventsOptions +{ + [CodeGenMember("JobId")] + internal string JobId { get; set; } + + [CodeGenMember("After")] + public string AfterEventId { get; set; } + + [CodeGenMember("Limit")] + public int? PageSize { get; set; } +} diff --git a/src/Custom/FineTuning/HyperParametersForSupervised.cs b/src/Custom/FineTuning/HyperParametersForSupervised.cs new file mode 100644 index 000000000..131768bbc --- /dev/null +++ b/src/Custom/FineTuning/HyperParametersForSupervised.cs @@ -0,0 +1,22 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuneSupervisedHyperparameters")] +public partial class HyperparametersForSupervised : MethodHyperparameters +{ + [CodeGenMember("BatchSize")] + internal BinaryData _BatchSize { get; set; } + + [CodeGenMember("NEpochs")] + internal BinaryData _NEpochs { get; set; } + + [CodeGenMember("LearningRateMultiplier")] + internal BinaryData _LearningRateMultiplier { get; set; } + public int BatchSize => (int)HandleDefaults(_BatchSize); + public int EpochCount => (int)HandleDefaults(_NEpochs); + public float LearningRateMultiplier => HandleDefaults(_LearningRateMultiplier); + +} diff --git a/src/Custom/FineTuning/HyperparameterBatchSize.cs b/src/Custom/FineTuning/HyperparameterBatchSize.cs new file mode 100644 index 000000000..0b0ec6edc --- /dev/null +++ b/src/Custom/FineTuning/HyperparameterBatchSize.cs @@ -0,0 +1,99 @@ +using System; +using System.ClientModel.Primitives; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum")] +internal readonly partial struct InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum { } + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersBatchSizeOption")] +public partial class HyperparameterBatchSize : IEquatable, IEquatable, IJsonModel +{ + private readonly string _stringValue; + private readonly int? _intValue; + + internal HyperparameterBatchSize() { } + + internal HyperparameterBatchSize(string predefinedLabel) + { + _stringValue = predefinedLabel; + } + + public HyperparameterBatchSize(int batchSize) + { + _intValue = batchSize; + } + + public static HyperparameterBatchSize CreateAuto() => new(InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum.Auto.ToString()); + public static HyperparameterBatchSize CreateSize(int batchSize) => new(batchSize); + + public static implicit operator HyperparameterBatchSize(int batchSize) => new(batchSize); + + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterBatchSize first, HyperparameterBatchSize second) + { + if (first is null && second is null) return true; + if (first is null || second is null) return false; + if (first._intValue.HasValue != second._intValue.HasValue) return false; + if (first._intValue.HasValue) return first._intValue == second._intValue; + return first._stringValue == second._stringValue; + } + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterBatchSize first, HyperparameterBatchSize second) => !(first == second); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other) => _intValue == other; + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other) => _intValue is null && _stringValue == other; + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other) => other is HyperparameterBatchSize cc && cc == this; + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => _intValue?.GetHashCode() ?? _stringValue.GetHashCode(); + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + SerializeHyperparameterBatchSize(this, writer, options); + } + + HyperparameterBatchSize IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeHyperparameterBatchSize(document.RootElement, options); + } + + internal static void SerializeHyperparameterBatchSize(HyperparameterBatchSize instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + if (instance._intValue is not null) + { + writer.WriteNumberValue(instance._intValue.Value); + } + else + { + writer.WriteStringValue(instance._stringValue); + } + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + HyperparameterBatchSize IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeHyperparameterBatchSize, data, options); + + internal static HyperparameterBatchSize DeserializeHyperparameterBatchSize(JsonElement element, ModelReaderWriterOptions options = null) + { + options ??= ModelSerializationExtensions.WireOptions; + + return element.ValueKind switch + { + JsonValueKind.Number => new(element.GetInt32()), + JsonValueKind.String => new(element.GetString()), + _ => throw new ArgumentException($"Unsupported JsonValueKind", nameof(HyperparameterBatchSize)) + }; + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; +} \ No newline at end of file diff --git a/src/Custom/FineTuning/HyperparameterBetaFactor.cs b/src/Custom/FineTuning/HyperparameterBetaFactor.cs new file mode 100644 index 000000000..44455a5c8 --- /dev/null +++ b/src/Custom/FineTuning/HyperparameterBetaFactor.cs @@ -0,0 +1,98 @@ +using System; +using System.ClientModel.Primitives; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersBetaChoiceEnum")] +internal readonly partial struct InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum { } + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersBetaOption")] +public partial class HyperparameterBetaFactor : IEquatable, IEquatable, IJsonModel +{ + private readonly string _stringValue; + private readonly int? _intValue; + + internal HyperparameterBetaFactor() { } + internal HyperparameterBetaFactor(string predefinedLabel) + { + _stringValue = predefinedLabel; + } + + public HyperparameterBetaFactor(int beta) + { + _intValue = beta; + } + + public static HyperparameterBetaFactor CreateAuto() => new(InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum.Auto.ToString()); + public static HyperparameterBetaFactor CreateBeta(int beta) => new(beta); + + public static implicit operator HyperparameterBetaFactor(int beta) => new(beta); + + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterBetaFactor first, HyperparameterBetaFactor second) + { + if (first is null && second is null) return true; + if (first is null || second is null) return false; + if (first._intValue.HasValue != second._intValue.HasValue) return false; + if (first._intValue.HasValue) return first._intValue == second._intValue; + return first._stringValue == second._stringValue; + } + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterBetaFactor first, HyperparameterBetaFactor second) => !(first == second); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other) => _intValue == other; + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other) => _intValue is null && _stringValue == other; + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other) => other is HyperparameterBetaFactor cc && cc == this; + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => _intValue?.GetHashCode() ?? _stringValue.GetHashCode(); + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + throw new NotImplementedException(); + } + + HyperparameterBetaFactor IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeHyperparameterBeta(document.RootElement, options); + } + + internal static void SerializeHyperparameterBeta(HyperparameterBetaFactor instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + if (instance._intValue is not null) + { + writer.WriteNumberValue(instance._intValue.Value); + } + else + { + writer.WriteStringValue(instance._stringValue); + } + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + HyperparameterBetaFactor IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeHyperparameterBeta, data, options); + + internal static HyperparameterBetaFactor DeserializeHyperparameterBeta(JsonElement element, ModelReaderWriterOptions options = null) + { + options ??= ModelSerializationExtensions.WireOptions; + + return element.ValueKind switch + { + JsonValueKind.Number => new(element.GetInt32()), + JsonValueKind.String => new(element.GetString()), + _ => throw new ArgumentException($"Unsupported JsonValueKind", "beta") + }; + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; +} \ No newline at end of file diff --git a/src/Custom/FineTuning/HyperparameterEpochCount.cs b/src/Custom/FineTuning/HyperparameterEpochCount.cs new file mode 100644 index 000000000..1f896f172 --- /dev/null +++ b/src/Custom/FineTuning/HyperparameterEpochCount.cs @@ -0,0 +1,99 @@ +using System; +using System.ClientModel.Primitives; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum")] +internal readonly partial struct InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum { } + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersNEpochsOption")] +public partial class HyperparameterEpochCount : IEquatable, IEquatable, IJsonModel +{ + private readonly string _stringValue; + private readonly int? _intValue; + + internal HyperparameterEpochCount(string predefinedLabel) + { + _stringValue = predefinedLabel; + } + + internal HyperparameterEpochCount() { } + + public HyperparameterEpochCount(int epochCount) + { + _intValue = epochCount; + } + + public static HyperparameterEpochCount CreateAuto() => new(InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum.Auto.ToString()); + public static HyperparameterEpochCount CreateEpochCount(int epochCount) => new(epochCount); + + public static implicit operator HyperparameterEpochCount(int epochCount) => new(epochCount); + + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterEpochCount first, HyperparameterEpochCount second) + { + if (first is null && second is null) return true; + if (first is null || second is null) return false; + if (first._intValue.HasValue != second._intValue.HasValue) return false; + if (first._intValue.HasValue) return first._intValue == second._intValue; + return first._stringValue == second._stringValue; + } + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterEpochCount first, HyperparameterEpochCount second) => !(first == second); + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other) => _intValue == other; + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other) => _intValue is null && _stringValue == other; + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other) => other is HyperparameterEpochCount cc && cc == this; + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => _intValue?.GetHashCode() ?? _stringValue.GetHashCode(); + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + SerializeHyperparameterEpochCount(this, writer, options); + } + + HyperparameterEpochCount IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeHyperparameterEpochCount(document.RootElement, options); + } + + internal static void SerializeHyperparameterEpochCount(HyperparameterEpochCount instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + if (instance._intValue is not null) + { + writer.WriteNumberValue(instance._intValue.Value); + } + else + { + writer.WriteStringValue(instance._stringValue); + } + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + HyperparameterEpochCount IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeHyperparameterEpochCount, data, options); + + internal static HyperparameterEpochCount DeserializeHyperparameterEpochCount(JsonElement element, ModelReaderWriterOptions options = null) + { + options ??= ModelSerializationExtensions.WireOptions; + + return element.ValueKind switch + { + JsonValueKind.Number => new(element.GetInt32()), + JsonValueKind.String => new(element.GetString()), + _ => throw new ArgumentException($"Unsupported JsonValueKind", nameof(HyperparameterEpochCount)) + }; + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; +} \ No newline at end of file diff --git a/src/Custom/FineTuning/HyperparameterLearningRate.cs b/src/Custom/FineTuning/HyperparameterLearningRate.cs new file mode 100644 index 000000000..3e193b2d6 --- /dev/null +++ b/src/Custom/FineTuning/HyperparameterLearningRate.cs @@ -0,0 +1,101 @@ +using System; +using System.ClientModel.Primitives; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum")] +internal readonly partial struct InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum { } + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparametersLearningRateMultiplierOption")] +public partial class HyperparameterLearningRate : IEquatable, IEquatable, IEquatable, IJsonModel +{ + private readonly string _stringValue; + private readonly double? _doubleValue; + + internal HyperparameterLearningRate() { } + + internal HyperparameterLearningRate(string predefinedLabel) => _stringValue = predefinedLabel; + + public HyperparameterLearningRate(double learningRateMultiplier) => _doubleValue = learningRateMultiplier; + + public static HyperparameterLearningRate CreateAuto() => new(InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum.Auto.ToString()); + public static HyperparameterLearningRate CreateMultiplier(double learningRateMultiplier) => new(learningRateMultiplier); + + public static implicit operator HyperparameterLearningRate(double learningRateMultiplier) => new(learningRateMultiplier); + + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator ==(HyperparameterLearningRate first, HyperparameterLearningRate second) + { + if (first is null && second is null) return true; + if (first is null || second is null) return false; + if (first._doubleValue.HasValue != second._doubleValue.HasValue) return false; + if (first._doubleValue.HasValue) return first._doubleValue == second._doubleValue; + return first._stringValue == second._stringValue; + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public static bool operator !=(HyperparameterLearningRate first, HyperparameterLearningRate second) => !(first == second); + + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(double other) => _doubleValue == other; + + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(int other) => _doubleValue == other; + + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Equals(string other) => _doubleValue is null && _stringValue == other; + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object other) => other is HyperparameterLearningRate cc && cc == this; + + [EditorBrowsable(EditorBrowsableState.Never)] + public override int GetHashCode() => _doubleValue?.GetHashCode() ?? _stringValue.GetHashCode(); + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + SerializeHyperparameterLearningRate(this, writer, options); + } + + HyperparameterLearningRate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeHyperparameterLearningRate(document.RootElement, options); + } + + internal static void SerializeHyperparameterLearningRate(HyperparameterLearningRate instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + if (instance._doubleValue is not null) + { + writer.WriteNumberValue(instance._doubleValue.Value); + } + else + { + writer.WriteStringValue(instance._stringValue); + } + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + HyperparameterLearningRate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeHyperparameterLearningRate, data, options); + + internal static HyperparameterLearningRate DeserializeHyperparameterLearningRate(JsonElement element, ModelReaderWriterOptions options = null) + { + options ??= ModelSerializationExtensions.WireOptions; + + return element.ValueKind switch + { + JsonValueKind.Number => new(element.GetDouble()), + JsonValueKind.String => new(element.GetString()), + _ => throw new ArgumentException($"Unsupported JsonValueKind", nameof(HyperparameterLearningRate)) + }; + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; +} \ No newline at end of file diff --git a/src/Custom/FineTuning/HyperparameterOptions.cs b/src/Custom/FineTuning/HyperparameterOptions.cs new file mode 100644 index 000000000..246549fff --- /dev/null +++ b/src/Custom/FineTuning/HyperparameterOptions.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestHyperparameters")] +internal partial class HyperparameterOptions +{ + [CodeGenMember("NEpochs")] + public HyperparameterEpochCount EpochCount { get; set; } + + [CodeGenMember("BatchSize")] + public HyperparameterBatchSize BatchSize { get; set; } + + [CodeGenMember("LearningRateMultiplier")] + public HyperparameterLearningRate LearningRate { get; set; } +} \ No newline at end of file diff --git a/src/Custom/FineTuning/HyperparametersForDPO.cs b/src/Custom/FineTuning/HyperparametersForDPO.cs new file mode 100644 index 000000000..b09d6bd6b --- /dev/null +++ b/src/Custom/FineTuning/HyperparametersForDPO.cs @@ -0,0 +1,28 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + + +[Experimental("OPENAI001")] +[CodeGenType("FineTuneDPOHyperparameters")] +public partial class HyperparametersForDPO : MethodHyperparameters +{ + [CodeGenMember("BatchSize")] + internal BinaryData _BatchSize { get; set; } + + [CodeGenMember("NEpochs")] + internal BinaryData _NEpochs { get; set; } + + [CodeGenMember("LearningRateMultiplier")] + internal BinaryData _LearningRateMultiplier { get; set; } + + [CodeGenMember("Beta")] + internal BinaryData _Beta { get; set; } + + + public int BatchSize => (int)HandleDefaults(_BatchSize); + public int EpochCount => (int)HandleDefaults(_NEpochs); + public float LearningRateMultiplier => HandleDefaults(_LearningRateMultiplier); + public float Beta => HandleDefaults(_Beta); +} diff --git a/src/Custom/FineTuning/Internal/FineTuningJobOperationToken.cs b/src/Custom/FineTuning/Internal/FineTuningJobOperationToken.cs deleted file mode 100644 index 915a1112b..000000000 --- a/src/Custom/FineTuning/Internal/FineTuningJobOperationToken.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.ClientModel; -using System.Diagnostics; -using System.IO; -using System.Text.Json; - -#nullable enable - -namespace OpenAI.FineTuning; - -internal class FineTuningJobOperationToken : ContinuationToken -{ - public FineTuningJobOperationToken(string jobId) - { - JobId = jobId; - } - - public string JobId { get; } - - public override BinaryData ToBytes() - { - using MemoryStream stream = new(); - using Utf8JsonWriter writer = new(stream); - - writer.WriteStartObject(); - - writer.WriteString("jobId", JobId); - - writer.WriteEndObject(); - - writer.Flush(); - stream.Position = 0; - - return BinaryData.FromStream(stream); - } - - public static FineTuningJobOperationToken FromToken(ContinuationToken continuationToken) - { - if (continuationToken is FineTuningJobOperationToken token) - { - return token; - } - - BinaryData data = continuationToken.ToBytes(); - - if (data.ToMemory().Length == 0) - { - throw new ArgumentException("Failed to create FineTuningJobOperationToken from provided continuationToken.", nameof(continuationToken)); - } - - Utf8JsonReader reader = new(data); - - string jobId = null!; - - reader.Read(); - - Debug.Assert(reader.TokenType == JsonTokenType.StartObject); - - while (reader.Read()) - { - if (reader.TokenType == JsonTokenType.EndObject) - { - break; - } - - Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); - - string propertyName = reader.GetString()!; - - switch (propertyName) - { - case "jobId": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.String); - jobId = reader.GetString()!; - break; - - default: - throw new JsonException($"Unrecognized property '{propertyName}'."); - } - } - - if (jobId is null) - { - throw new ArgumentException("Failed to create FineTuningJobOperationToken from provided continuationToken.", nameof(continuationToken)); - } - - return new(jobId); - } -} - diff --git a/src/Custom/FineTuning/Internal/FineTuningJobToken.cs b/src/Custom/FineTuning/Internal/FineTuningJobToken.cs new file mode 100644 index 000000000..513d98d5a --- /dev/null +++ b/src/Custom/FineTuning/Internal/FineTuningJobToken.cs @@ -0,0 +1,93 @@ +using System; +using System.ClientModel; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class FineTuningJobToken : ContinuationToken +{ + public FineTuningJobToken(string jobId) + { + JobId = jobId; + } + + public string JobId { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + + writer.WriteStartObject(); + + writer.WriteString("jobId", JobId); + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public static FineTuningJobToken FromToken(ContinuationToken continuationToken) + { + if (continuationToken is FineTuningJobToken token) + { + return token; + } + + BinaryData data = continuationToken.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException("Failed to create " + nameof(FineTuningJobToken) + " from provided continuationToken.", nameof(continuationToken)); + } + + Utf8JsonReader reader = new(data); + + string jobId = null!; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "jobId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + jobId = reader.GetString()!; + break; + + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + if (jobId is null) + { + throw new ArgumentException("Failed to create " + nameof(FineTuningJobToken) + " from provided continuationToken.", nameof(continuationToken)); + } + + return new(jobId); + } +} + diff --git a/src/Custom/FineTuning/Internal/GeneratorStubs.cs b/src/Custom/FineTuning/Internal/GeneratorStubs.cs index 65e072734..98ded7728 100644 --- a/src/Custom/FineTuning/Internal/GeneratorStubs.cs +++ b/src/Custom/FineTuning/Internal/GeneratorStubs.cs @@ -1,25 +1,7 @@ -using OpenAI.Chat; -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - namespace OpenAI.FineTuning; // CUSTOM: Made internal. -[CodeGenType("FineTuneChatCompletionRequestAssistantMessage")] -internal partial class InternalFineTuneChatCompletionRequestAssistantMessage -{ - [CodeGenMember("Content")] - public ChatMessageContent Content { get; set; } -} - -[CodeGenType("FinetuneChatRequestInput")] -internal partial class InternalFinetuneChatRequestInput { } - -[CodeGenType("FinetuneCompletionRequestInput")] -internal partial class InternalFinetuneCompletionRequestInput { } - [CodeGenType("FineTuningIntegration")] internal partial class InternalFineTuningIntegration { } @@ -39,12 +21,6 @@ internal partial class InternalCreateFineTuningJobRequestWandbIntegrationWandb [CodeGenType("FineTuningJobObject")] internal readonly partial struct InternalFineTuningJobObject { } -[CodeGenType("FineTuningJobCheckpoint")] -internal partial class InternalFineTuningJobCheckpoint { } - -[CodeGenType("FineTuningJobCheckpointMetrics")] -internal partial class InternalFineTuningJobCheckpointMetrics { } - [CodeGenType("FineTuningJobCheckpointObject")] internal readonly partial struct InternalFineTuningJobCheckpointObject { } @@ -66,15 +42,6 @@ internal readonly partial struct InternalListPaginatedFineTuningJobsResponseObje [CodeGenType("FineTuningIntegrationWandbWandb")] internal partial class FineTuningIntegrationWandbWandb { } -[CodeGenType("FineTuningJobHyperparametersBatchSizeChoiceEnum")] -internal readonly partial struct FineTuningJobHyperparametersBatchSizeChoiceEnum { } - -[CodeGenType("FineTuningJobHyperparametersLearningRateMultiplierChoiceEnum")] -internal readonly partial struct FineTuningJobHyperparametersLearningRateMultiplierChoiceEnum { } - -[CodeGenType("FineTuningJobHyperparametersNEpochsChoiceEnum")] -internal readonly partial struct FineTuningJobHyperparametersNEpochsChoiceEnum { } - [CodeGenType("UnknownCreateFineTuningJobRequestIntegration")] internal partial class UnknownCreateFineTuningJobRequestIntegration { } @@ -90,20 +57,6 @@ internal readonly partial struct InternalListFineTuningJobEventsResponseObject { [CodeGenType("CreateFineTuningJobRequestModel")] internal readonly partial struct InternalCreateFineTuningJobRequestModel { } -// Future public types follow - -[CodeGenType("CreateFineTuningJobRequestIntegration")] -internal partial class FineTuningIntegration { } - -[CodeGenType("FineTuningJob")] -internal partial class FineTuningJob { } - -[CodeGenType("FineTuningJobError1")] -internal partial class FineTuningJobError { } - -[CodeGenType("FineTuningJobEvent")] -internal partial class FineTuningJobEvent { } - [CodeGenType("FineTuningJobEventLevel")] internal enum FineTuningJobEventLevel { @@ -112,72 +65,30 @@ internal enum FineTuningJobEventLevel Error } -[CodeGenType("FineTuningJobHyperparameters")] -[StructLayout(LayoutKind.Auto)] -internal readonly partial struct FineTuningJobHyperparameters -{ - public BinaryData NEpochs { get; } - public BinaryData BatchSize { get; } - public BinaryData LearningRateMultiplier { get; } -} - -[CodeGenType("FineTuningJobStatus")] -internal readonly partial struct FineTuningJobStatus { } - -[CodeGenType("CreateFineTuningJobRequest")] -internal partial class FineTuningOptions { } - -[CodeGenType("CreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum")] -internal readonly partial struct HyperparameterBatchSize { } - -[CodeGenType("CreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum")] -internal readonly partial struct HyperparameterCycleCount { } - -[CodeGenType("CreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum")] -internal readonly partial struct HyperparameterLearningRate { } - -[CodeGenType("CreateFineTuningJobRequestHyperparameters")] -internal partial class HyperparameterOptions { } - -[CodeGenType("CreateFineTuningJobRequestWandbIntegration")] -internal partial class WeightsAndBiasesIntegration { } - -// TODO: not yet integrated - -[CodeGenType("FineTuneChatRequestInput")] -internal partial class InternalTodoFineTuneChatRequestInput { } - -[CodeGenType("FineTuneCompletionRequestInput")] -internal partial class InternalTodoFineTuneCompletionRequestInput { } - [CodeGenType("FineTuneDPOMethod")] -internal partial class InternalTodoFineTuneDPOMethod { } - -[CodeGenType("FineTuneDPOMethodHyperparameters")] -internal partial class InternalTodoFineTuneDPOMethodHyperparameters { } - -[CodeGenType("FineTuneMethod")] -internal partial class InternalTodoFineTuneMethod { } +internal partial class InternalFineTuningJobRequestMethodDpo { } [CodeGenType("FineTuneMethodType")] -internal readonly partial struct InternalTodoFineTuneMethodType { } +internal readonly partial struct InternalFineTuneMethodType { } [CodeGenType("FineTuneSupervisedMethod")] -internal partial class InternalTodoFineTuneSupervisedMethod { } +internal partial class InternalFineTuningJobRequestMethodSupervised { } -[CodeGenType("FineTuneSupervisedMethodHyperparameters")] -internal partial class InternalFineTuneSupervisedMethodHyperparameters { } +// TODO: not yet integrated -[CodeGenType("FineTuningJobEventType")] -internal readonly partial struct InternalFineTuningJobEventType { } +[CodeGenType("FineTuneChatRequestInput")] +internal partial class InternalTodoFineTuneChatRequestInput { } [CodeGenType("FineTuneChatCompletionRequestAssistantMessageWeight")] internal readonly partial struct InternalFineTuneChatCompletionRequestAssistantMessageWeight { } -[CodeGenType("FineTuneChatCompletionRequestAssistantMessageRole")] -internal readonly partial struct InternalFineTuneChatCompletionRequestAssistantMessageRole { } - [CodeGenType("CreateFineTuningCheckpointPermissionRequest")] internal partial class InternalCreateFineTuningCheckpointPermissionRequest { } [CodeGenType("DeleteFineTuningCheckpointPermissionResponse")] internal partial class InternalDeleteFineTuningCheckpointPermissionResponse { } [CodeGenType("FineTuningCheckpointPermission")] internal partial class InternalFineTuningCheckpointPermission { } [CodeGenType("ListFineTuningCheckpointPermissionResponse")] internal partial class InternalListFineTuningCheckpointPermissionResponse { } +[CodeGenType("CreateFineTuningJobRequestIntegrationType")] internal readonly partial struct InternalCreateFineTuningJobRequestIntegrationType {} +[CodeGenType("FineTuneReinforcementHyperparametersReasoningEffort")] internal readonly partial struct InternalFineTuneReinforcementHyperparametersReasoningEffort {} +[CodeGenType("FineTuneReinforcementMethod")] internal partial class InternalFineTuneReinforcementMethod {} +[CodeGenType("FineTuningCheckpointPermissionObject")] internal readonly partial struct InternalFineTuningCheckpointPermissionObject {} +[CodeGenType("ListFineTuningCheckpointPermissionResponseObject")] internal readonly partial struct InternalListFineTuningCheckpointPermissionResponseObject {} +[CodeGenType("DeleteFineTuningCheckpointPermissionResponseObject")] internal readonly partial struct InternalDeleteFineTuningCheckpointPermissionResponseObject {} \ No newline at end of file diff --git a/src/Custom/FineTuning/Internal/InternalFineTuningJob.cs b/src/Custom/FineTuning/Internal/InternalFineTuningJob.cs new file mode 100644 index 000000000..df9f3948c --- /dev/null +++ b/src/Custom/FineTuning/Internal/InternalFineTuningJob.cs @@ -0,0 +1,87 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.FineTuning; + +/** + * Represents a fine-tuning job as returned by the OpenAI API. + * This is separate from the class, which is a Long Running Operation. + */ + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJob")] +internal partial class InternalFineTuningJob +{ + [CodeGenMember("Id")] + public string JobId { get; } + + [CodeGenMember("Model")] + public string BaseModel { get; } + + [CodeGenMember("EstimatedFinish")] + public DateTimeOffset? EstimatedFinishAt { get; } + + [CodeGenMember("ValidationFile")] + public string ValidationFileId { get; } + + [CodeGenMember("TrainingFile")] + public string TrainingFileId { get; } + + [CodeGenMember("ResultFiles")] + public IReadOnlyList ResultFileIds { get; } + + [CodeGenMember("Status")] + public FineTuningStatus Status { get; } + + [CodeGenMember("Object")] + internal string _object { get; } + + [CodeGenMember("Hyperparameters")] + public FineTuningHyperparameters Hyperparameters { get; } = default; + + [CodeGenMember("Integrations")] + public IReadOnlyList Integrations { get; } + + [CodeGenMember("TrainedTokens")] + public int? BillableTrainedTokenCount { get; set; } + + [CodeGenMember("UserProvidedSuffix")] + public string UserProvidedSuffix { get; } + + [CodeGenMember("CreatedAt")] + public DateTimeOffset CreatedAt { get; } + + [CodeGenMember("Error")] + public FineTuningError Error { get; } + + [CodeGenMember("FineTunedModel")] + public string FineTunedModel { get; } + + [CodeGenMember("FinishedAt")] + public DateTimeOffset? FinishedAt { get; } + + [CodeGenMember("OrganizationId")] + public string OrganizationId { get; } + + [CodeGenMember("Seed")] + public int Seed { get; } + + [CodeGenMember("Method")] + public FineTuningTrainingMethod Method { get; } + + public override string ToString() + { + return $"FineTuningJob<{JobId}, {Status}, {CreatedAt}>"; + } + + internal static InternalFineTuningJob FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalFineTuningJob(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} \ No newline at end of file diff --git a/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningCheckpointCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningCheckpointCollectionResult.cs new file mode 100644 index 000000000..9e6ad5da5 --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningCheckpointCollectionResult.cs @@ -0,0 +1,87 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class AsyncFineTuningCheckpointCollectionResult : AsyncCollectionResult +{ + private readonly FineTuningJob _job; + private readonly RequestOptions? _options; + private readonly CancellationToken _cancellationToken; + + // Initial values + private readonly int? _limit; + private readonly string? _after; + + public AsyncFineTuningCheckpointCollectionResult( + FineTuningJob job, + RequestOptions? options, + int? limit, string? after, CancellationToken cancellationToken = default) + { + _job = job; + _options = options; + + _limit = limit; + _after = after; + _cancellationToken = cancellationToken; + } + + public async override IAsyncEnumerable GetRawPagesAsync() + { + ClientResult page = await GetFirstPageAsync().ConfigureAwait(false); + yield return page; + + while (HasNextPage(page)) + { + page = await GetNextPageAsync(page); + yield return page; + } + } + + public override ContinuationToken? GetContinuationToken(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + return FineTuningEventCollectionPageToken.FromResponse(page, _job.JobId, _limit); + } + + public async Task GetFirstPageAsync() + => await _job.GetCheckpointsPageAsync(_after, _limit, _options).ConfigureAwait(false); + + public async Task GetNextPageAsync(ClientResult result) + { + Argument.AssertNotNull(result, nameof(result)); + + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response?.Content); + + JsonElement data = doc.RootElement.GetProperty("data"); + JsonElement lastItem = data.EnumerateArray().LastOrDefault(); + string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? + idElement.GetString() : null; + + return await _job.GetCheckpointsPageAsync(lastId, _limit, _options).ConfigureAwait(false); + } + + public static bool HasNextPage(ClientResult result) + => FineTuningCheckpointCollectionResult.HasNextPage(result); + + protected override IAsyncEnumerable GetValuesFromPageAsync(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + PipelineResponse response = page.GetRawResponse(); + InternalListFineTuningJobCheckpointsResponse list = ModelReaderWriter.Read(response.Content)!; + return list.Data.ToAsyncEnumerable(_cancellationToken); + } +} diff --git a/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningEventCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningEventCollectionResult.cs new file mode 100644 index 000000000..9c39a244d --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningEventCollectionResult.cs @@ -0,0 +1,87 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class AsyncFineTuningEventCollectionResult : AsyncCollectionResult +{ + private readonly FineTuningJob _job; + private readonly RequestOptions? _options; + private readonly CancellationToken _cancellationToken; + + // Initial values + private readonly int? _limit; + private readonly string? _after; + + public AsyncFineTuningEventCollectionResult( + FineTuningJob job, + RequestOptions? options, + int? limit, string? after) + { + _job = job; + _options = options; + + _limit = limit; + _after = after; + _cancellationToken = _options?.CancellationToken ?? default; + } + + public async override IAsyncEnumerable GetRawPagesAsync() + { + ClientResult page = await GetFirstPageAsync().ConfigureAwait(false); + yield return page; + + while (HasNextPage(page)) + { + page = await GetNextPageAsync(page); + yield return page; + } + } + + public override ContinuationToken? GetContinuationToken(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + return FineTuningEventCollectionPageToken.FromResponse(page, _job.JobId, _limit); + } + + public async Task GetFirstPageAsync() + => await _job.GetEventsPageAsync(_after, _limit, _options).ConfigureAwait(false); + + public async Task GetNextPageAsync(ClientResult result) + { + Argument.AssertNotNull(result, nameof(result)); + + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response?.Content); + + JsonElement data = doc.RootElement.GetProperty("data"); + JsonElement lastItem = data.EnumerateArray().LastOrDefault(); + string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? + idElement.GetString() : null; + + return await _job.GetEventsPageAsync(lastId, _limit, _options).ConfigureAwait(false); + } + + public static bool HasNextPage(ClientResult result) + => FineTuningEventCollectionResult.HasNextPage(result); + + protected override IAsyncEnumerable GetValuesFromPageAsync(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + PipelineResponse response = page.GetRawResponse(); + InternalListFineTuningJobEventsResponse list = ModelReaderWriter.Read(response.Content)!; + return list.Data.ToAsyncEnumerable(_cancellationToken); + } +} diff --git a/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobCheckpointCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobCheckpointCollectionResult.cs deleted file mode 100644 index c030d9400..000000000 --- a/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobCheckpointCollectionResult.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; -using System.Threading.Tasks; - -#nullable enable - -namespace OpenAI.FineTuning; - -internal class AsyncFineTuningJobCheckpointCollectionResult : AsyncCollectionResult -{ - private readonly FineTuningJobOperation _operation; - private readonly RequestOptions? _options; - - // Initial values - private readonly int? _limit; - private readonly string? _after; - - public AsyncFineTuningJobCheckpointCollectionResult( - FineTuningJobOperation fineTuningJobOperation, - RequestOptions? options, - int? limit, string? after) - { - _operation = fineTuningJobOperation; - _options = options; - - _limit = limit; - _after = after; - } - - public async override IAsyncEnumerable GetRawPagesAsync() - { - ClientResult page = await GetFirstPageAsync().ConfigureAwait(false); - yield return page; - - while (HasNextPage(page)) - { - page = await GetNextPageAsync(page); - yield return page; - } - } - - public override ContinuationToken? GetContinuationToken(ClientResult page) - { - Argument.AssertNotNull(page, nameof(page)); - - return FineTuningJobEventCollectionPageToken.FromResponse(page, _operation.JobId, _limit); - } - - public async Task GetFirstPageAsync() - => await _operation.GetJobCheckpointsPageAsync(_after, _limit, _options).ConfigureAwait(false); - - public async Task GetNextPageAsync(ClientResult result) - { - Argument.AssertNotNull(result, nameof(result)); - - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response?.Content); - - JsonElement data = doc.RootElement.GetProperty("data"); - JsonElement lastItem = data.EnumerateArray().LastOrDefault(); - string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? - idElement.GetString() : null; - - return await _operation.GetJobCheckpointsPageAsync(lastId, _limit, _options).ConfigureAwait(false); - } - - public static bool HasNextPage(ClientResult result) - => FineTuningJobCheckpointCollectionResult.HasNextPage(result); -} diff --git a/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobCollectionResult.cs index 89645ecbf..3c5943f35 100644 --- a/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobCollectionResult.cs +++ b/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobCollectionResult.cs @@ -1,46 +1,58 @@ -using System.ClientModel; +using OpenAI.Assistants; +using System; +using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text.Json; +using System.Threading; using System.Threading.Tasks; #nullable enable namespace OpenAI.FineTuning; -internal class AsyncFineTuningJobCollectionResult : AsyncCollectionResult +[Experimental("OPENAI001")] +internal class AsyncFineTuningJobCollectionResult : AsyncCollectionResult { private readonly FineTuningClient _fineTuningClient; private readonly ClientPipeline _pipeline; private readonly RequestOptions? _options; + private readonly CancellationToken _cancellationToken; // Initial values private readonly int? _limit; + private readonly int? _pageSize; private readonly string _after; public AsyncFineTuningJobCollectionResult(FineTuningClient fineTuningClient, ClientPipeline pipeline, RequestOptions? options, - int? limit, string after) + int? pageSize, string after) { _fineTuningClient = fineTuningClient; _pipeline = pipeline; _options = options; - _limit = limit; + _pageSize = pageSize; _after = after; + _cancellationToken = _options?.CancellationToken ?? default; } public async override IAsyncEnumerable GetRawPagesAsync() { ClientResult page = await GetFirstPageAsync().ConfigureAwait(false); - yield return page; - while (HasNextPage(page)) + while (true) { - page = await GetNextPageAsync(page); yield return page; + if (!HasNextPage(page)) + { + break; + } + page = await GetNextPageAsync(page); } } @@ -48,11 +60,11 @@ public async override IAsyncEnumerable GetRawPagesAsync() { Argument.AssertNotNull(page, nameof(page)); - return FineTuningJobCollectionPageToken.FromResponse(page, _limit); + return FineTuningCollectionPageToken.FromResponse(page, _pageSize); } public async Task GetFirstPageAsync() - => await GetJobsAsync(_after, _limit, _options).ConfigureAwait(false); + => await GetJobsAsync(_after, _pageSize, _options).ConfigureAwait(false); public async Task GetNextPageAsync(ClientResult result) { @@ -67,7 +79,7 @@ public async Task GetNextPageAsync(ClientResult result) string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? idElement.GetString() : null; - return await GetJobsAsync(lastId, _limit, _options).ConfigureAwait(false); + return await GetJobsAsync(lastId, _pageSize, _options).ConfigureAwait(false); } public static bool HasNextPage(ClientResult result) @@ -75,7 +87,15 @@ public static bool HasNextPage(ClientResult result) internal virtual async Task GetJobsAsync(string? after, int? limit, RequestOptions? options) { - using PipelineMessage message = _fineTuningClient.CreateGetPaginatedFineTuningJobsRequest(after, limit, options); + using PipelineMessage message = _fineTuningClient.GetJobsPipelineMessage(after, limit, options); return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } + + protected override IAsyncEnumerable GetValuesFromPageAsync(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + PipelineResponse response = page.GetRawResponse(); + return _fineTuningClient.CreateJobsFromPageResponse(response).ToAsyncEnumerable(_cancellationToken); + } } diff --git a/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobEventCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobEventCollectionResult.cs deleted file mode 100644 index 573dcec2c..000000000 --- a/src/Custom/FineTuning/Internal/Pagination/AsyncFineTuningJobEventCollectionResult.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; -using System.Threading.Tasks; - -#nullable enable - -namespace OpenAI.FineTuning; - -internal class AsyncFineTuningJobEventCollectionResult : AsyncCollectionResult -{ - private readonly FineTuningJobOperation _operation; - private readonly RequestOptions? _options; - - // Initial values - private readonly int? _limit; - private readonly string? _after; - - public AsyncFineTuningJobEventCollectionResult( - FineTuningJobOperation fineTuningJobOperation, - RequestOptions? options, - int? limit, string? after) - { - _operation = fineTuningJobOperation; - _options = options; - - _limit = limit; - _after = after; - } - - public async override IAsyncEnumerable GetRawPagesAsync() - { - ClientResult page = await GetFirstPageAsync().ConfigureAwait(false); - yield return page; - - while (HasNextPage(page)) - { - page = await GetNextPageAsync(page); - yield return page; - } - } - - public override ContinuationToken? GetContinuationToken(ClientResult page) - { - Argument.AssertNotNull(page, nameof(page)); - - return FineTuningJobEventCollectionPageToken.FromResponse(page, _operation.JobId, _limit); - } - - public async Task GetFirstPageAsync() - => await _operation.GetJobEventsPageAsync(_after, _limit, _options).ConfigureAwait(false); - - public async Task GetNextPageAsync(ClientResult result) - { - Argument.AssertNotNull(result, nameof(result)); - - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response?.Content); - - JsonElement data = doc.RootElement.GetProperty("data"); - JsonElement lastItem = data.EnumerateArray().LastOrDefault(); - string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? - idElement.GetString() : null; - - return await _operation.GetJobEventsPageAsync(lastId, _limit, _options).ConfigureAwait(false); - } - - public static bool HasNextPage(ClientResult result) - => FineTuningJobEventCollectionResult.HasNextPage(result); -} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningCheckpointCollectionPageToken.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningCheckpointCollectionPageToken.cs new file mode 100644 index 000000000..ed584863a --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/FineTuningCheckpointCollectionPageToken.cs @@ -0,0 +1,137 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class FineTuningCheckpointCollectionPageToken: ContinuationToken +{ + protected FineTuningCheckpointCollectionPageToken(string jobId, int? pageSize, string? afterCheckpointId) + { + JobId = jobId; + PageSize = pageSize; + AfterCheckpointId = afterCheckpointId; + } + + public string JobId { get; } + + public int? PageSize { get; } + + public string? AfterCheckpointId { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + + writer.WriteStartObject(); + writer.WriteString("jobId", JobId); + + if (PageSize.HasValue) + { + writer.WriteNumber("limit", PageSize.Value); + } + + if (AfterCheckpointId is not null) + { + writer.WriteString("after", AfterCheckpointId); + } + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public static FineTuningCheckpointCollectionPageToken FromToken(ContinuationToken pageToken) + { + if (pageToken is FineTuningCheckpointCollectionPageToken token) + { + return token; + } + + BinaryData data = pageToken.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException($"Failed to create {nameof(FineTuningCheckpointCollectionPageToken)} from provided argument.", nameof(pageToken)); + } + + Utf8JsonReader reader = new(data); + + string jobId = null!; + int? limit = null; + string? after = null; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "jobId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + jobId = reader.GetString()!; + break; + case "limit": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.Number); + limit = reader.GetInt32(); + break; + case "after": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + after = reader.GetString(); + break; + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + if (jobId is null) + { + throw new ArgumentException($"Failed to create {nameof(FineTuningCheckpointCollectionPageToken)} from provided argument.", nameof(pageToken)); + } + + return new(jobId, limit, after); + } + + public static FineTuningCheckpointCollectionPageToken FromOptions(string jobId, int? pageSize, string? afterCheckpointId) + => new(jobId, pageSize, afterCheckpointId); + + public static FineTuningCheckpointCollectionPageToken? FromResponse(ClientResult result, string jobId, int? pageSize) + { + PipelineResponse response = result.GetRawResponse(); + using JsonDocument doc = JsonDocument.Parse(response.Content); + string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; + bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); + + if (!hasMore || lastId is null) + { + return null; + } + + return new(jobId, pageSize, lastId); + } +} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningCheckpointCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningCheckpointCollectionResult.cs new file mode 100644 index 000000000..70f45b46f --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/FineTuningCheckpointCollectionResult.cs @@ -0,0 +1,92 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class FineTuningCheckpointCollectionResult : CollectionResult +{ + private readonly FineTuningJob _job; + private readonly RequestOptions? _options; + + // Initial values + private readonly int? _limit; + private readonly string? _after; + + public FineTuningCheckpointCollectionResult( + FineTuningJob job, + RequestOptions? options, + int? limit, string? after) + { + _job = job; + _options = options; + + _limit = limit; + _after = after; + } + + public override IEnumerable GetRawPages() + { + ClientResult page = GetFirstPage(); + yield return page; + + while (HasNextPage(page)) + { + page = GetNextPage(page); + yield return page; + } + } + + public override ContinuationToken? GetContinuationToken(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + return FineTuningCheckpointCollectionPageToken.FromResponse(page, _job.JobId, _limit); + } + + public ClientResult GetFirstPage() + => _job.GetCheckpointsPage(_after, _limit, _options); + + public ClientResult GetNextPage(ClientResult result) + { + Argument.AssertNotNull(result, nameof(result)); + + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response?.Content); + + JsonElement data = doc.RootElement.GetProperty("data"); + JsonElement lastItem = data.EnumerateArray().LastOrDefault(); + string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? + idElement.GetString() : null; + + return _job.GetCheckpointsPage(lastId, _limit, _options); + } + + public static bool HasNextPage(ClientResult result) + { + Argument.AssertNotNull(result, nameof(result)); + + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); + + return hasMore; + } + + protected override IEnumerable GetValuesFromPage(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + PipelineResponse response = page.GetRawResponse(); + InternalListFineTuningJobCheckpointsResponse points = ModelReaderWriter.Read(response.Content)!; + return points.Data; + } +} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningCollectionPageToken.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningCollectionPageToken.cs new file mode 100644 index 000000000..d72bcbbf9 --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/FineTuningCollectionPageToken.cs @@ -0,0 +1,117 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class FineTuningCollectionPageToken : ContinuationToken +{ + protected FineTuningCollectionPageToken(int? limit, string? after) + { + Limit = limit; + After = after; + } + + public int? Limit { get; } + + public string? After { get; } + + public static FineTuningCollectionPageToken FromToken(ContinuationToken pageToken) + { + if (pageToken is FineTuningCollectionPageToken token) + { + return token; + } + + BinaryData data = pageToken.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException("Failed to create FineTuningCollectionPageToken from provided pageToken.", nameof(pageToken)); + } + + Utf8JsonReader reader = new(data); + + int? limit = null; + string? after = null; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "limit": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.Number); + limit = reader.GetInt32(); + break; + case "after": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + after = reader.GetString(); + break; + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + return new(limit, after); + } + + public static FineTuningCollectionPageToken FromOptions(int? limit, string? after) + => new(limit, after); + + public static FineTuningCollectionPageToken? FromResponse(ClientResult result, int? limit) + { + PipelineResponse response = result.GetRawResponse(); + using JsonDocument doc = JsonDocument.Parse(response.Content); + string? lastId; + bool hasLast = TryGetLastId(doc, out lastId); + bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); + + if (!hasMore || lastId is null) + { + return null; + } + + return new(limit, lastId); + } + + private static bool TryGetLastId(JsonDocument json, out string? lastId) + { + if (!json.RootElement.GetProperty("has_more"u8).GetBoolean()) + { + lastId = null; + return false; + } + + if (json?.RootElement.TryGetProperty("data", out JsonElement dataElement) == true + && dataElement.EnumerateArray().LastOrDefault().TryGetProperty("id", out JsonElement idElement) == true) + { + lastId = idElement.GetString(); + return true; + } + + lastId = null; + return false; + } +} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningEventCollectionPageToken.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningEventCollectionPageToken.cs new file mode 100644 index 000000000..84fc550d8 --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/FineTuningEventCollectionPageToken.cs @@ -0,0 +1,137 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class FineTuningEventCollectionPageToken : ContinuationToken +{ + protected FineTuningEventCollectionPageToken(string jobId, int? limit, string? after) + { + JobId = jobId; + Limit = limit; + After = after; + } + + public string JobId { get; } + + public int? Limit { get; } + + public string? After { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + + writer.WriteStartObject(); + writer.WriteString("jobId", JobId); + + if (Limit.HasValue) + { + writer.WriteNumber("limit", Limit.Value); + } + + if (After is not null) + { + writer.WriteString("after", After); + } + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public static FineTuningEventCollectionPageToken FromToken(ContinuationToken pageToken) + { + if (pageToken is FineTuningEventCollectionPageToken token) + { + return token; + } + + BinaryData data = pageToken.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException("Failed to create FineTuningEventCollectionPageToken from provided pageToken.", nameof(pageToken)); + } + + Utf8JsonReader reader = new(data); + + string jobId = null!; + int? limit = null; + string? after = null; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "jobId": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + jobId = reader.GetString()!; + break; + case "limit": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.Number); + limit = reader.GetInt32(); + break; + case "after": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + after = reader.GetString(); + break; + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + if (jobId is null) + { + throw new ArgumentException("Failed to create FineTuningEventCollectionPageToken from provided pageToken.", nameof(pageToken)); + } + + return new(jobId, limit, after); + } + + public static FineTuningEventCollectionPageToken FromOptions(string jobId, int? limit, string? after) + => new(jobId, limit, after); + + public static FineTuningEventCollectionPageToken? FromResponse(ClientResult result, string jobId, int? limit) + { + PipelineResponse response = result.GetRawResponse(); + using JsonDocument doc = JsonDocument.Parse(response.Content); + string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; + bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); + + if (!hasMore || lastId is null) + { + return null; + } + + return new(jobId, limit, lastId); + } +} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningEventCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningEventCollectionResult.cs new file mode 100644 index 000000000..c38c88ffc --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/FineTuningEventCollectionResult.cs @@ -0,0 +1,92 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class FineTuningEventCollectionResult : CollectionResult +{ + private readonly FineTuningJob _job; + private readonly RequestOptions? _options; + + // Initial values + private readonly int? _limit; + private readonly string? _after; + + public FineTuningEventCollectionResult( + FineTuningJob job, + RequestOptions? options, + int? limit, string? after) + { + _job = job; + _options = options; + + _limit = limit; + _after = after; + } + + public override IEnumerable GetRawPages() + { + ClientResult page = GetFirstPage(); + yield return page; + + while (HasNextPage(page)) + { + page = GetNextPage(page); + yield return page; + } + } + + public override ContinuationToken? GetContinuationToken(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + return FineTuningEventCollectionPageToken.FromResponse(page, _job.JobId, _limit); + } + + public ClientResult GetFirstPage() + => _job.GetEventsPage(_after, _limit, _options); + + public ClientResult GetNextPage(ClientResult result) + { + Argument.AssertNotNull(result, nameof(result)); + + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response?.Content); + + JsonElement data = doc.RootElement.GetProperty("data"); + JsonElement lastItem = data.EnumerateArray().LastOrDefault(); + string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? + idElement.GetString() : null; + + return _job.GetEventsPage(lastId, _limit, _options); + } + + public static bool HasNextPage(ClientResult result) + { + Argument.AssertNotNull(result, nameof(result)); + + PipelineResponse response = result.GetRawResponse(); + + using JsonDocument doc = JsonDocument.Parse(response.Content); + bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); + + return hasMore; + } + + protected override IEnumerable GetValuesFromPage(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + PipelineResponse response = page.GetRawResponse(); + InternalListFineTuningJobEventsResponse events = ModelReaderWriter.Read(response.Content)!; + return events.Data; + } +} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningEventsPageToken.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningEventsPageToken.cs new file mode 100644 index 000000000..3ebd2efcf --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/FineTuningEventsPageToken.cs @@ -0,0 +1,125 @@ +using System; +using System.ClientModel; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Text.Json; + +#nullable enable + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +internal class FineTuningEventsPageToken : ContinuationToken +{ + protected FineTuningEventsPageToken(string jobId, string? after, int? limit) + { + JobId = jobId; + After = after; + Limit = limit; + } + + public string JobId { get; } + public string? After { get; } + public int? Limit { get; } + + public override BinaryData ToBytes() + { + using MemoryStream stream = new(); + using Utf8JsonWriter writer = new(stream); + + writer.WriteStartObject(); + + writer.WriteString("fine_tuning_job_id", JobId); + + if (Limit.HasValue) + { + writer.WriteNumber("limit", Limit.Value); + } + + if (After is not null) + { + writer.WriteString("after", After); + } + + writer.WriteEndObject(); + + writer.Flush(); + stream.Position = 0; + + return BinaryData.FromStream(stream); + } + + public FineTuningEventsPageToken? GetNextPageToken(bool hasMore) + { + return hasMore + ? new FineTuningEventsPageToken(JobId, After, Limit) + : null; + + } + + public static FineTuningEventsPageToken FromToken(ContinuationToken token) + { + if (token is FineTuningEventsPageToken pageToken) + { + return pageToken; + } + + BinaryData data = token.ToBytes(); + + if (data.ToMemory().Length == 0) + { + throw new ArgumentException( + $"Failed to create {nameof(FineTuningEventsPageToken)} from provided token.", + nameof(token)); + } + + Utf8JsonReader reader = new(data); + + string jobId = ""; + string? after = null; + int? limit = null; + + reader.Read(); + + Debug.Assert(reader.TokenType == JsonTokenType.StartObject); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + break; + } + + Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); + + string propertyName = reader.GetString()!; + + switch (propertyName) + { + case "fine_tuning_job_id": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + jobId = reader.GetString()!; + break; + case "after": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.String); + after = reader.GetString(); + break; + case "limit": + reader.Read(); + Debug.Assert(reader.TokenType == JsonTokenType.Number); + limit = reader.GetInt32(); + break; + default: + throw new JsonException($"Unrecognized property '{propertyName}'."); + } + } + + return new(jobId, after, limit); + } + + public static FineTuningEventsPageToken FromOptions(string jobId, string? after, int? limit) + => new FineTuningEventsPageToken(jobId, after, limit); +} \ No newline at end of file diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCheckpointCollectionPageToken.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCheckpointCollectionPageToken.cs deleted file mode 100644 index 38f615720..000000000 --- a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCheckpointCollectionPageToken.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Diagnostics; -using System.IO; -using System.Text.Json; - -#nullable enable - -namespace OpenAI.FineTuning; - -internal class FineTuningJobCheckpointCollectionPageToken : ContinuationToken -{ - protected FineTuningJobCheckpointCollectionPageToken(string jobId, int? limit, string? after) - { - JobId = jobId; - Limit = limit; - After = after; - } - - public string JobId { get; } - - public int? Limit { get; } - - public string? After { get; } - - public override BinaryData ToBytes() - { - using MemoryStream stream = new(); - using Utf8JsonWriter writer = new(stream); - - writer.WriteStartObject(); - writer.WriteString("jobId", JobId); - - if (Limit.HasValue) - { - writer.WriteNumber("limit", Limit.Value); - } - - if (After is not null) - { - writer.WriteString("after", After); - } - - writer.WriteEndObject(); - - writer.Flush(); - stream.Position = 0; - - return BinaryData.FromStream(stream); - } - - public static FineTuningJobCheckpointCollectionPageToken FromToken(ContinuationToken pageToken) - { - if (pageToken is FineTuningJobCheckpointCollectionPageToken token) - { - return token; - } - - BinaryData data = pageToken.ToBytes(); - - if (data.ToMemory().Length == 0) - { - throw new ArgumentException("Failed to create FineTuningJobCheckpointCollectionPageToken from provided pageToken.", nameof(pageToken)); - } - - Utf8JsonReader reader = new(data); - - string jobId = null!; - int? limit = null; - string? after = null; - - reader.Read(); - - Debug.Assert(reader.TokenType == JsonTokenType.StartObject); - - while (reader.Read()) - { - if (reader.TokenType == JsonTokenType.EndObject) - { - break; - } - - Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); - - string propertyName = reader.GetString()!; - - switch (propertyName) - { - case "jobId": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.String); - jobId = reader.GetString()!; - break; - case "limit": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.Number); - limit = reader.GetInt32(); - break; - case "after": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.String); - after = reader.GetString(); - break; - default: - throw new JsonException($"Unrecognized property '{propertyName}'."); - } - } - - if (jobId is null) - { - throw new ArgumentException("Failed to create FineTuningJobCheckpointCollectionPageToken from provided pageToken.", nameof(pageToken)); - } - - return new(jobId, limit, after); - } - - public static FineTuningJobCheckpointCollectionPageToken FromOptions(string jobId, int? limit, string? after) - => new(jobId, limit, after); - - public static FineTuningJobCheckpointCollectionPageToken? FromResponse(ClientResult result, string jobId, int? limit) - { - PipelineResponse response = result.GetRawResponse(); - using JsonDocument doc = JsonDocument.Parse(response.Content); - string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; - bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); - - if (!hasMore || lastId is null) - { - return null; - } - - return new(jobId, limit, lastId); - } -} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCheckpointCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCheckpointCollectionResult.cs deleted file mode 100644 index 815829d20..000000000 --- a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCheckpointCollectionResult.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; - -#nullable enable - -namespace OpenAI.FineTuning; - -internal class FineTuningJobCheckpointCollectionResult : CollectionResult -{ - private readonly FineTuningJobOperation _operation; - private readonly RequestOptions? _options; - - // Initial values - private readonly int? _limit; - private readonly string? _after; - - public FineTuningJobCheckpointCollectionResult( - FineTuningJobOperation fineTuningJobOperation, - RequestOptions? options, - int? limit, string? after) - { - _operation = fineTuningJobOperation; - _options = options; - - _limit = limit; - _after = after; - } - - public override IEnumerable GetRawPages() - { - ClientResult page = GetFirstPage(); - yield return page; - - while (HasNextPage(page)) - { - page = GetNextPage(page); - yield return page; - } - } - - public override ContinuationToken? GetContinuationToken(ClientResult page) - { - Argument.AssertNotNull(page, nameof(page)); - - return FineTuningJobCheckpointCollectionPageToken.FromResponse(page, _operation.JobId, _limit); - } - - public ClientResult GetFirstPage() - => _operation.GetJobCheckpointsPage(_after, _limit, _options); - - public ClientResult GetNextPage(ClientResult result) - { - Argument.AssertNotNull(result, nameof(result)); - - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response?.Content); - - JsonElement data = doc.RootElement.GetProperty("data"); - JsonElement lastItem = data.EnumerateArray().LastOrDefault(); - string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? - idElement.GetString() : null; - - return _operation.GetJobCheckpointsPage(lastId, _limit, _options); - } - - public static bool HasNextPage(ClientResult result) - { - Argument.AssertNotNull(result, nameof(result)); - - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response.Content); - bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); - - return hasMore; - } -} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCollectionPageToken.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCollectionPageToken.cs deleted file mode 100644 index 0edfcfa00..000000000 --- a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCollectionPageToken.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Diagnostics; -using System.Text.Json; - -#nullable enable - -namespace OpenAI.FineTuning; - -internal class FineTuningJobCollectionPageToken : ContinuationToken -{ - protected FineTuningJobCollectionPageToken(int? limit, string? after) - { - Limit = limit; - After = after; - } - - public int? Limit { get; } - - public string? After { get; } - - public static FineTuningJobCollectionPageToken FromToken(ContinuationToken pageToken) - { - if (pageToken is FineTuningJobCollectionPageToken token) - { - return token; - } - - BinaryData data = pageToken.ToBytes(); - - if (data.ToMemory().Length == 0) - { - throw new ArgumentException("Failed to create FineTuningJobCollectionPageToken from provided pageToken.", nameof(pageToken)); - } - - Utf8JsonReader reader = new(data); - - int? limit = null; - string? after = null; - - reader.Read(); - - Debug.Assert(reader.TokenType == JsonTokenType.StartObject); - - while (reader.Read()) - { - if (reader.TokenType == JsonTokenType.EndObject) - { - break; - } - - Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); - - string propertyName = reader.GetString()!; - - switch (propertyName) - { - case "limit": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.Number); - limit = reader.GetInt32(); - break; - case "after": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.String); - after = reader.GetString(); - break; - default: - throw new JsonException($"Unrecognized property '{propertyName}'."); - } - } - - return new(limit, after); - } - - public static FineTuningJobCollectionPageToken FromOptions(int? limit, string? after) - => new(limit, after); - - public static FineTuningJobCollectionPageToken? FromResponse(ClientResult result, int? limit) - { - PipelineResponse response = result.GetRawResponse(); - using JsonDocument doc = JsonDocument.Parse(response.Content); - string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; - bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); - - if (!hasMore || lastId is null) - { - return null; - } - - return new(limit, lastId); - } -} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCollectionResult.cs index 9e8a50d38..c05e4ec5e 100644 --- a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCollectionResult.cs +++ b/src/Custom/FineTuning/Internal/Pagination/FineTuningJobCollectionResult.cs @@ -1,6 +1,7 @@ using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text.Json; @@ -8,7 +9,8 @@ namespace OpenAI.FineTuning; -internal class FineTuningJobCollectionResult : CollectionResult +[Experimental("OPENAI001")] +internal class FineTuningJobCollectionResult : CollectionResult { private readonly FineTuningClient _fineTuningClient; private readonly ClientPipeline _pipeline; @@ -46,7 +48,7 @@ public override IEnumerable GetRawPages() { Argument.AssertNotNull(page, nameof(page)); - return FineTuningJobCollectionPageToken.FromResponse(page, _limit); + return FineTuningCollectionPageToken.FromResponse(page, _limit); } public ClientResult GetFirstPage() @@ -82,7 +84,15 @@ public static bool HasNextPage(ClientResult result) internal virtual ClientResult GetJobs(string? after, int? limit, RequestOptions? options) { - using PipelineMessage message = _fineTuningClient.CreateGetPaginatedFineTuningJobsRequest(after, limit, options); + using PipelineMessage message = _fineTuningClient.GetJobsPipelineMessage(after, limit, options); return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); } + + protected override IEnumerable GetValuesFromPage(ClientResult page) + { + Argument.AssertNotNull(page, nameof(page)); + + PipelineResponse response = page.GetRawResponse(); + return _fineTuningClient.CreateJobsFromPageResponse(response); + } } diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobEventCollectionPageToken.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningJobEventCollectionPageToken.cs deleted file mode 100644 index edff39903..000000000 --- a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobEventCollectionPageToken.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Diagnostics; -using System.IO; -using System.Text.Json; - -#nullable enable - -namespace OpenAI.FineTuning; - -internal class FineTuningJobEventCollectionPageToken : ContinuationToken -{ - protected FineTuningJobEventCollectionPageToken(string jobId, int? limit, string? after) - { - JobId = jobId; - Limit = limit; - After = after; - } - - public string JobId { get; } - - public int? Limit { get; } - - public string? After { get; } - - public override BinaryData ToBytes() - { - using MemoryStream stream = new(); - using Utf8JsonWriter writer = new(stream); - - writer.WriteStartObject(); - writer.WriteString("jobId", JobId); - - if (Limit.HasValue) - { - writer.WriteNumber("limit", Limit.Value); - } - - if (After is not null) - { - writer.WriteString("after", After); - } - - writer.WriteEndObject(); - - writer.Flush(); - stream.Position = 0; - - return BinaryData.FromStream(stream); - } - - public static FineTuningJobEventCollectionPageToken FromToken(ContinuationToken pageToken) - { - if (pageToken is FineTuningJobEventCollectionPageToken token) - { - return token; - } - - BinaryData data = pageToken.ToBytes(); - - if (data.ToMemory().Length == 0) - { - throw new ArgumentException("Failed to create FineTuningJobEventCollectionPageToken from provided pageToken.", nameof(pageToken)); - } - - Utf8JsonReader reader = new(data); - - string jobId = null!; - int? limit = null; - string? after = null; - - reader.Read(); - - Debug.Assert(reader.TokenType == JsonTokenType.StartObject); - - while (reader.Read()) - { - if (reader.TokenType == JsonTokenType.EndObject) - { - break; - } - - Debug.Assert(reader.TokenType == JsonTokenType.PropertyName); - - string propertyName = reader.GetString()!; - - switch (propertyName) - { - case "jobId": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.String); - jobId = reader.GetString()!; - break; - case "limit": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.Number); - limit = reader.GetInt32(); - break; - case "after": - reader.Read(); - Debug.Assert(reader.TokenType == JsonTokenType.String); - after = reader.GetString(); - break; - default: - throw new JsonException($"Unrecognized property '{propertyName}'."); - } - } - - if (jobId is null) - { - throw new ArgumentException("Failed to create FineTuningJobEventCollectionPageToken from provided pageToken.", nameof(pageToken)); - } - - return new(jobId, limit, after); - } - - public static FineTuningJobEventCollectionPageToken FromOptions(string jobId, int? limit, string? after) - => new(jobId, limit, after); - - public static FineTuningJobEventCollectionPageToken? FromResponse(ClientResult result, string jobId, int? limit) - { - PipelineResponse response = result.GetRawResponse(); - using JsonDocument doc = JsonDocument.Parse(response.Content); - string lastId = doc.RootElement.GetProperty("last_id"u8).GetString()!; - bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); - - if (!hasMore || lastId is null) - { - return null; - } - - return new(jobId, limit, lastId); - } -} diff --git a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobEventCollectionResult.cs b/src/Custom/FineTuning/Internal/Pagination/FineTuningJobEventCollectionResult.cs deleted file mode 100644 index 06c56d9aa..000000000 --- a/src/Custom/FineTuning/Internal/Pagination/FineTuningJobEventCollectionResult.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; - -#nullable enable - -namespace OpenAI.FineTuning; - -internal class FineTuningJobEventCollectionResult : CollectionResult -{ - private readonly FineTuningJobOperation _operation; - private readonly RequestOptions? _options; - - // Initial values - private readonly int? _limit; - private readonly string? _after; - - public FineTuningJobEventCollectionResult( - FineTuningJobOperation fineTuningJobOperation, - RequestOptions? options, - int? limit, string? after) - { - _operation = fineTuningJobOperation; - _options = options; - - _limit = limit; - _after = after; - } - - public override IEnumerable GetRawPages() - { - ClientResult page = GetFirstPage(); - yield return page; - - while (HasNextPage(page)) - { - page = GetNextPage(page); - yield return page; - } - } - - public override ContinuationToken? GetContinuationToken(ClientResult page) - { - Argument.AssertNotNull(page, nameof(page)); - - return FineTuningJobEventCollectionPageToken.FromResponse(page, _operation.JobId, _limit); - } - - public ClientResult GetFirstPage() - => _operation.GetJobEventsPage(_after, _limit, _options); - - public ClientResult GetNextPage(ClientResult result) - { - Argument.AssertNotNull(result, nameof(result)); - - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response?.Content); - - JsonElement data = doc.RootElement.GetProperty("data"); - JsonElement lastItem = data.EnumerateArray().LastOrDefault(); - string? lastId = lastItem.TryGetProperty("id", out JsonElement idElement) ? - idElement.GetString() : null; - - return _operation.GetJobEventsPage(lastId, _limit, _options); - } - - public static bool HasNextPage(ClientResult result) - { - Argument.AssertNotNull(result, nameof(result)); - - PipelineResponse response = result.GetRawResponse(); - - using JsonDocument doc = JsonDocument.Parse(response.Content); - bool hasMore = doc.RootElement.GetProperty("has_more"u8).GetBoolean(); - - return hasMore; - } -} diff --git a/src/Custom/FineTuning/Internal/Pagination/InternalFineTuningJobsPageToken.cs b/src/Custom/FineTuning/Internal/Pagination/InternalFineTuningJobsPageToken.cs new file mode 100644 index 000000000..f68d78ebe --- /dev/null +++ b/src/Custom/FineTuning/Internal/Pagination/InternalFineTuningJobsPageToken.cs @@ -0,0 +1,21 @@ +#nullable enable + +using System.ClientModel; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +[CodeGenType("FineTuningJobsPageToken")] +internal partial class InternalFineTuningJobsPageToken : ContinuationToken +{ + public InternalFineTuningJobsPageToken? GetNextPageToken(bool hasMore, string? after) + { + if (!hasMore || after is null) + { + return null; + } + + return new InternalFineTuningJobsPageToken(Limit, After, null); + } +} diff --git a/src/Custom/FineTuning/MethodHyperparameters.cs b/src/Custom/FineTuning/MethodHyperparameters.cs new file mode 100644 index 000000000..c40f56ee3 --- /dev/null +++ b/src/Custom/FineTuning/MethodHyperparameters.cs @@ -0,0 +1,32 @@ +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +[Experimental("OPENAI001")] +public partial class MethodHyperparameters +{ + private static readonly BinaryData Auto = new("\"auto\""); + internal float HandleDefaults(BinaryData data) + { + if (data is null) + { + throw new ArgumentNullException("This hyperparameter is not set. Values for BatchSize and LearningRateMultiplier are not available in responses."); + } + + if (data.ToString() == Auto.ToString()) + { + return 0; + } + + try + { + return float.Parse(data.ToString()); + } + catch (FormatException) + { + throw new FormatException($"Hyperparameter expected a number or \"auto\" string. Got {data}"); + } + } +} \ No newline at end of file diff --git a/src/Custom/FineTuning/WeightsAndBiasesIntegration.cs b/src/Custom/FineTuning/WeightsAndBiasesIntegration.cs new file mode 100644 index 000000000..b0b1161d8 --- /dev/null +++ b/src/Custom/FineTuning/WeightsAndBiasesIntegration.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.FineTuning; + +/// +/// Settings for fine tuning integration with Weights and Biases (https://wandb.ai). +/// +[Experimental("OPENAI001")] +[CodeGenType("CreateFineTuningJobRequestWandbIntegration")] +[CodeGenSuppress(nameof(WeightsAndBiasesIntegration), typeof(InternalCreateFineTuningJobRequestWandbIntegrationWandb))] +[CodeGenSuppress(nameof(WeightsAndBiasesIntegration), typeof(string), typeof(IDictionary), typeof(InternalCreateFineTuningJobRequestWandbIntegrationWandb))] +public partial class WeightsAndBiasesIntegration +{ + [CodeGenMember("Wandb")] + private InternalCreateFineTuningJobRequestWandbIntegrationWandb _innerWandb { get; } + + /// + /// The Weights & Biases project name that the run will be created under. + /// + public string ProjectName + { + get => _innerWandb.Project; + set => _innerWandb.Project = value; + } + + /// + /// The friendly name to associate with the run. If not specified, the job ID will be used. + /// + public string DisplayName + { + get => _innerWandb.Name; + set => _innerWandb.Name = value; + } + + /// + /// The Weights & Biases entity to associate with the run, specified as a team or user name. + /// + public string EntityName + { + get => _innerWandb.Entity; + set => _innerWandb.Entity = value; + } + + public IList Tags + { + get => _innerWandb.Tags; + } + + public WeightsAndBiasesIntegration(string projectName) + : base("wandb", null) + { + _innerWandb = new(projectName); + } + + internal WeightsAndBiasesIntegration(string type, IDictionary serializedAdditionalRawData, InternalCreateFineTuningJobRequestWandbIntegrationWandb wandb) + : base(type, serializedAdditionalRawData) + { + _innerWandb = wandb; + } +} diff --git a/src/Custom/Graders/GraderClient.cs b/src/Custom/Graders/GraderClient.cs new file mode 100644 index 000000000..7378fce20 --- /dev/null +++ b/src/Custom/Graders/GraderClient.cs @@ -0,0 +1,12 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Threading; + +namespace OpenAI.Graders; + +[CodeGenType("Graders")] +internal partial class GraderClient +{ + +} diff --git a/src/Custom/Graders/Internal/GeneratorStubs.cs b/src/Custom/Graders/Internal/GeneratorStubs.cs new file mode 100644 index 000000000..2c6d63908 --- /dev/null +++ b/src/Custom/Graders/Internal/GeneratorStubs.cs @@ -0,0 +1,80 @@ +using OpenAI.Containers; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.Graders; + +[Experimental("OPENAI002")][CodeGenType("GraderStringCheckOperation")] internal readonly partial struct InternalGraderStringCheckOperation {} +[Experimental("OPENAI002")][CodeGenType("GraderType")] internal readonly partial struct InternalGraderType {} +[Experimental("OPENAI002")][CodeGenType("EvalGraderTextSimilarityResourceEvaluationMetric")] internal readonly partial struct InternalEvalGraderTextSimilarityResourceEvaluationMetric {} +[CodeGenType("GraderStringCheck")] internal partial class InternalGraderStringCheck {} +[CodeGenType("Grader")] internal partial class InternalGrader {} +[CodeGenType("UnknownGrader")] internal partial class InternalUnknownGrader {} +[CodeGenType("GraderLabelModel")] internal partial class InternalGraderLabelModel {} +[CodeGenType("GraderTextSimilarity")] internal partial class InternalGraderTextSimilarity {} +[CodeGenType("GraderPython")] internal partial class InternalGraderPython {} +[CodeGenType("GraderScoreModel")] internal partial class InternalGraderScoreModel {} +[CodeGenType("GraderMulti")] internal partial class InternalGraderMulti {} +[CodeGenType("FineTuneReinforcementHyperparameters")] internal partial class InternalFineTuneReinforcementHyperparameters {} +[CodeGenType("RunGraderRequest")] +internal partial class InternalRunGraderRequest +{ + public static implicit operator BinaryContent(InternalRunGraderRequest internalRunGraderRequest) + { + if (internalRunGraderRequest == null) + { + return null; + } + return BinaryContent.Create(internalRunGraderRequest, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalRunGraderRequest(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalRunGraderRequest(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("RunGraderResponse")] +internal partial class InternalRunGraderResponse +{ + public static explicit operator InternalRunGraderResponse(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalRunGraderResponse(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("RunGraderResponseMetadata")] internal partial class InternalRunGraderResponseMetadata {} +[CodeGenType("RunGraderResponseMetadataErrors")] internal partial class InternalRunGraderResponseMetadataErrors {} +[CodeGenType("ValidateGraderRequest")] +internal partial class InternalValidateGraderRequest +{ + public static implicit operator BinaryContent(InternalValidateGraderRequest internalValidateGraderRequest) + { + if (internalValidateGraderRequest == null) + { + return null; + } + return BinaryContent.Create(internalValidateGraderRequest, ModelSerializationExtensions.WireOptions); + } + + public static explicit operator InternalValidateGraderRequest(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalValidateGraderRequest(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("ValidateGraderResponse")] +internal partial class InternalValidateGraderResponse +{ + public static explicit operator InternalValidateGraderResponse(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalValidateGraderResponse(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} diff --git a/src/Custom/Images/GeneratedImageBackground.cs b/src/Custom/Images/GeneratedImageBackground.cs new file mode 100644 index 000000000..89d68465c --- /dev/null +++ b/src/Custom/Images/GeneratedImageBackground.cs @@ -0,0 +1,13 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Images; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] + +[CodeGenType("CreateImageRequestBackground")] +public readonly partial struct GeneratedImageBackground +{ +} \ No newline at end of file diff --git a/src/Custom/Images/GeneratedImageCollection.Serialization.cs b/src/Custom/Images/GeneratedImageCollection.Serialization.cs deleted file mode 100644 index 8dbfc48e8..000000000 --- a/src/Custom/Images/GeneratedImageCollection.Serialization.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; - -namespace OpenAI.Images; - -[CodeGenSuppress("global::System.ClientModel.Primitives.IJsonModel.Write", typeof(Utf8JsonWriter), typeof(ModelReaderWriterOptions))] -public partial class GeneratedImageCollection : IJsonModel -{ - // CUSTOM: - // - Serialized the Items property. - // - Recovered the serialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeGeneratedImageCollection, writer, options); - - internal static void SerializeGeneratedImageCollection(GeneratedImageCollection instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - writer.WritePropertyName("created"u8); - writer.WriteNumberValue(instance.CreatedAt, "U"); - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (var item in instance.Items) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - writer.WriteSerializedAdditionalRawData(instance.SerializedAdditionalRawData, options); - writer.WriteEndObject(); - } - - // CUSTOM: Recovered the deserialization of SerializedAdditionalRawData. See https://github.com/Azure/autorest.csharp/issues/4636. - internal static GeneratedImageCollection DeserializeGeneratedImageCollection(JsonElement element, ModelReaderWriterOptions options = null) - { - options ??= ModelSerializationExtensions.WireOptions; - - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - DateTimeOffset created = default; - IReadOnlyList data = default; - IDictionary serializedAdditionalRawData = default; - Dictionary rawDataDictionary = new Dictionary(); - foreach (var property in element.EnumerateObject()) - { - if (property.NameEquals("created"u8)) - { - created = DateTimeOffset.FromUnixTimeSeconds(property.Value.GetInt64()); - continue; - } - if (property.NameEquals("data"u8)) - { - List array = new List(); - foreach (var item in property.Value.EnumerateArray()) - { - array.Add(GeneratedImage.DeserializeGeneratedImage(item, options)); - } - data = array; - continue; - } - if (true) - { - rawDataDictionary.Add(property.Name, BinaryData.FromString(property.Value.GetRawText())); - } - } - serializedAdditionalRawData = rawDataDictionary; - return new GeneratedImageCollection(created, data, serializedAdditionalRawData); - } -} diff --git a/src/Custom/Images/GeneratedImageCollection.cs b/src/Custom/Images/GeneratedImageCollection.cs index e4932d3ef..a90756946 100644 --- a/src/Custom/Images/GeneratedImageCollection.cs +++ b/src/Custom/Images/GeneratedImageCollection.cs @@ -1,6 +1,9 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Text.Json; namespace OpenAI.Images; @@ -8,49 +11,41 @@ namespace OpenAI.Images; /// Represents an image generation response payload that contains information for multiple generated images. /// [CodeGenType("ImagesResponse")] -[CodeGenSuppress("Data")] -[CodeGenSuppress("Created")] -[CodeGenSuppress(nameof(GeneratedImageCollection))] [CodeGenSuppress(nameof(GeneratedImageCollection), typeof(DateTimeOffset))] -[CodeGenSuppress(nameof(GeneratedImageCollection), typeof(DateTimeOffset), typeof(IDictionary))] +[CodeGenVisibility(nameof(Data), CodeGenVisibility.Internal)] public partial class GeneratedImageCollection : ReadOnlyCollection { - // CUSTOM: Set the inherited Items property via the base constructor in favor of the suppressed Data property. + // CUSTOM: Set the inherited Items property via the base constructor in favor of the intercepted Data property. /// Initializes a new instance of . - /// /// - /// is null. - internal GeneratedImageCollection(DateTimeOffset created, IEnumerable data) + /// + /// + /// Keeps track of any properties unknown to the library. + internal GeneratedImageCollection(IList data, ImageTokenUsage usage, DateTimeOffset createdAt, IDictionary additionalBinaryDataProperties) : base([.. data]) { - Argument.AssertNotNull(data, nameof(data)); - - CreatedAt = created; - } - - // CUSTOM: Set the inherited Items property via the base constructor in favor of the suppressed Data property. - /// Initializes a new instance of . - /// - /// - /// Keeps track of any properties unknown to the library. - internal GeneratedImageCollection(DateTimeOffset created, IReadOnlyList data, IDictionary serializedAdditionalRawData) - : base([.. data]) - { - CreatedAt = created; - SerializedAdditionalRawData = serializedAdditionalRawData; + Usage = usage; + CreatedAt = createdAt; + SerializedAdditionalRawData = additionalBinaryDataProperties; } - // CUSTOM: Set the inherited Items property via the base constructor in favor of the suppressed Data property. + // CUSTOM: Set the inherited Items property via the base constructor in favor of the intercepted Data property. /// Initializes a new instance of for deserialization. - internal GeneratedImageCollection() - : base([]) + internal GeneratedImageCollection() : base([]) { } // CUSTOM: Renamed. /// - /// The timestamp at which the result image was generated. + /// The timestamp at which the result images were generated. /// [CodeGenMember("Created")] public DateTimeOffset CreatedAt { get; } + + internal static GeneratedImageCollection FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeGeneratedImageCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + } } \ No newline at end of file diff --git a/src/Custom/Images/GeneratedImageFileFormat.cs b/src/Custom/Images/GeneratedImageFileFormat.cs new file mode 100644 index 000000000..9b6ffb28a --- /dev/null +++ b/src/Custom/Images/GeneratedImageFileFormat.cs @@ -0,0 +1,13 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Images; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] + +[CodeGenType("CreateImageRequestOutputFormat")] +public readonly partial struct GeneratedImageFileFormat +{ +} \ No newline at end of file diff --git a/src/Custom/Images/GeneratedImageFormat.cs b/src/Custom/Images/GeneratedImageFormat.cs index 6c8355c25..0a45c3ed4 100644 --- a/src/Custom/Images/GeneratedImageFormat.cs +++ b/src/Custom/Images/GeneratedImageFormat.cs @@ -1,7 +1,7 @@ namespace OpenAI.Images; // CUSTOM: Renamed. -/// The format in which the generated images are returned by the service. +/// The response format in which the generated images are returned by the service. [CodeGenType("CreateImageRequestResponseFormat")] public readonly partial struct GeneratedImageFormat { diff --git a/src/Custom/Images/GeneratedImageModerationLevel.cs b/src/Custom/Images/GeneratedImageModerationLevel.cs new file mode 100644 index 000000000..2036aa329 --- /dev/null +++ b/src/Custom/Images/GeneratedImageModerationLevel.cs @@ -0,0 +1,13 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Images; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] + +[CodeGenType("CreateImageRequestModeration")] +public readonly partial struct GeneratedImageModerationLevel +{ +} \ No newline at end of file diff --git a/src/Custom/Images/GeneratedImageSize.cs b/src/Custom/Images/GeneratedImageSize.cs index ddf7b143d..6a956ab1f 100644 --- a/src/Custom/Images/GeneratedImageSize.cs +++ b/src/Custom/Images/GeneratedImageSize.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Images; @@ -75,4 +76,16 @@ public GeneratedImageSize(int width, int height) /// [CodeGenMember("_1024x1792")] public static readonly GeneratedImageSize W1792xH1024 = new(1792, 1024); + + // CUSTOM: + // - Added Experimental attribute. + [Experimental("OPENAI001")] + [CodeGenMember("_1024x1536")] + public static readonly GeneratedImageSize W1024xH1536 = new(1024, 1536); + + // CUSTOM: + // - Added Experimental attribute. + [Experimental("OPENAI001")] + [CodeGenMember("_1536x1024")] + public static readonly GeneratedImageSize W1536xH1024 = new(1536, 1024); } \ No newline at end of file diff --git a/src/Custom/Images/ImageClient.cs b/src/Custom/Images/ImageClient.cs index 15a623653..3815fc870 100644 --- a/src/Custom/Images/ImageClient.cs +++ b/src/Custom/Images/ImageClient.cs @@ -102,9 +102,9 @@ public virtual async Task> GenerateImageAsync(strin options ??= new(); CreateImageGenerationOptions(prompt, null, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await GenerateImagesAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Generates an image based on a prompt. @@ -120,9 +120,9 @@ public virtual ClientResult GenerateImage(string prompt, ImageGe options ??= new(); CreateImageGenerationOptions(prompt, null, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = GenerateImages(content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Generates images based on a prompt. @@ -139,9 +139,9 @@ public virtual async Task> GenerateImages options ??= new(); CreateImageGenerationOptions(prompt, imageCount, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await GenerateImagesAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result), result.GetRawResponse()); } /// Generates images based on a prompt. @@ -158,9 +158,9 @@ public virtual ClientResult GenerateImages(string prom options ??= new(); CreateImageGenerationOptions(prompt, imageCount, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = GenerateImages(content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result), result.GetRawResponse()); } #endregion @@ -193,7 +193,7 @@ public virtual async Task> GenerateImageEditAsync(S using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); ClientResult result = await GenerateImageEditsAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Generates an edited or extended image based on an original image and a prompt. @@ -222,7 +222,7 @@ public virtual ClientResult GenerateImageEdit(Stream image, stri using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); ClientResult result = GenerateImageEdits(content, content.ContentType, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Generates an edited or extended image based on an original image and a prompt. @@ -299,7 +299,7 @@ public virtual async Task> GenerateImageEditAsync(S using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); ClientResult result = await GenerateImageEditsAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Generates an edited or extended image based on an original image, a prompt, and a mask. @@ -336,7 +336,7 @@ public virtual ClientResult GenerateImageEdit(Stream image, stri using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); ClientResult result = GenerateImageEdits(content, content.ContentType, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Generates an edited or extended image based on an original image, a prompt, and a mask. @@ -422,7 +422,7 @@ public virtual async Task> GenerateImageE using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); ClientResult result = await GenerateImageEditsAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result), result.GetRawResponse()); } /// Generates edited or extended images based on an original image and a prompt. @@ -452,7 +452,7 @@ public virtual ClientResult GenerateImageEdits(Stream using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, null, null); ClientResult result = GenerateImageEdits(content, content.ContentType, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result), result.GetRawResponse()); } /// Generates edited or extended images based on an original image and a prompt. @@ -532,7 +532,7 @@ public virtual async Task> GenerateImageE using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); ClientResult result = await GenerateImageEditsAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result), result.GetRawResponse()); } /// Generates edited or extended images based on an original image, a prompt, and a mask. @@ -570,7 +570,7 @@ public virtual ClientResult GenerateImageEdits(Stream using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename, mask, maskFilename); ClientResult result = GenerateImageEdits(content, content.ContentType, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result), result.GetRawResponse()); } /// Generates edited or extended images based on an original image, a prompt, and a mask. @@ -656,7 +656,7 @@ public virtual async Task> GenerateImageVariationAs using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); ClientResult result = await GenerateImageVariationsAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Generates a variation of a given image. @@ -680,7 +680,7 @@ public virtual ClientResult GenerateImageVariation(Stream image, using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); ClientResult result = GenerateImageVariations(content, content.ContentType, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue(((GeneratedImageCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Generates a variation of a given image. @@ -741,7 +741,7 @@ public virtual async Task> GenerateImageV using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); ClientResult result = await GenerateImageVariationsAsync(content, content.ContentType, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result), result.GetRawResponse()); } /// Generates variations of a given image. @@ -766,7 +766,7 @@ public virtual ClientResult GenerateImageVariations(St using MultiPartFormDataBinaryContent content = options.ToMultipartContent(image, imageFilename); ClientResult result = GenerateImageVariations(content, content.ContentType, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((GeneratedImageCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(GeneratedImageCollection.FromClientResult(result), result.GetRawResponse()); } /// Generates variations of a given image. diff --git a/src/Custom/Images/ImageEditOptions.cs b/src/Custom/Images/ImageEditOptions.cs index 984d2a714..77ae13b9f 100644 --- a/src/Custom/Images/ImageEditOptions.cs +++ b/src/Custom/Images/ImageEditOptions.cs @@ -7,7 +7,8 @@ namespace OpenAI.Images; /// Represents additional options available to control the behavior of an image generation operation. /// [CodeGenType("CreateImageEditRequest")] -[CodeGenSuppress("ImageEditOptions", typeof(BinaryData), typeof(string))] +[CodeGenVisibility(nameof(ImageEditOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(ImageEditOptions), typeof(BinaryData), typeof(string))] public partial class ImageEditOptions { // CUSTOM: Made internal. The model is specified by the client. @@ -67,12 +68,6 @@ public partial class ImageEditOptions /// The number of images to generate. Must be between 1 and 10. internal long? N { get; set; } - // CUSTOM: Made public now that there are no required properties. - /// Initializes a new instance of . - public ImageEditOptions() - { - } - // CUSTOM: Changed property type. /// The size of the generated images. Must be one of `256x256`, `512x512`, or `1024x1024`. [CodeGenMember("Size")] diff --git a/src/Custom/Images/ImageGenerationOptions.cs b/src/Custom/Images/ImageGenerationOptions.cs index b53184561..bb7cfc6e0 100644 --- a/src/Custom/Images/ImageGenerationOptions.cs +++ b/src/Custom/Images/ImageGenerationOptions.cs @@ -1,10 +1,14 @@ +using System.ClientModel; +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Images; /// /// Represents additional options available to control the behavior of an image generation operation. /// [CodeGenType("CreateImageRequest")] -[CodeGenSuppress("ImageGenerationOptions", typeof(string))] +[CodeGenVisibility(nameof(ImageGenerationOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(ImageGenerationOptions), typeof(string))] public partial class ImageGenerationOptions { // CUSTOM: Made internal. The model is specified by the client. @@ -27,12 +31,6 @@ public partial class ImageGenerationOptions /// internal long? N { get; set; } - // CUSTOM: Made public now that there are no required properties. - /// Initializes a new instance of . - public ImageGenerationOptions() - { - } - // CUSTOM: Renamed. /// /// A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. @@ -40,4 +38,33 @@ public ImageGenerationOptions() /// [CodeGenMember("User")] public string EndUserId { get; set; } + + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + /// + /// The compression level (0-100%) for the generated images. + /// + [Experimental("OPENAI001")] + [CodeGenMember("OutputCompression")] + public int? OutputCompressionFactor { get; set; } + + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + /// + /// The format in which the generated images are returned. + /// + [Experimental("OPENAI001")] + [CodeGenMember("OutputFormat")] + public GeneratedImageFileFormat? OutputFileFormat { get; set; } + + // CUSTOM: + // - Added Experimental attribute. + // - Renamed. + [Experimental("OPENAI001")] + [CodeGenMember("Moderation")] + public GeneratedImageModerationLevel? ModerationLevel { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } \ No newline at end of file diff --git a/src/Custom/Images/ImageInputTokenUsageDetails.cs b/src/Custom/Images/ImageInputTokenUsageDetails.cs new file mode 100644 index 000000000..1fef1b37e --- /dev/null +++ b/src/Custom/Images/ImageInputTokenUsageDetails.cs @@ -0,0 +1,19 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Images; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ImagesResponseUsageInputTokensDetails")] +public partial class ImageInputTokenUsageDetails +{ + // CUSTOM: Renamed. + [CodeGenMember("TextTokens")] + public int TextTokenCount { get; } + + // CUSTOM: Renamed. + [CodeGenMember("ImageTokens")] + public int ImageTokenCount { get; } +} \ No newline at end of file diff --git a/src/Custom/Images/ImageTokenUsage.cs b/src/Custom/Images/ImageTokenUsage.cs new file mode 100644 index 000000000..deb7c802c --- /dev/null +++ b/src/Custom/Images/ImageTokenUsage.cs @@ -0,0 +1,27 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Images; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ImagesResponseUsage")] +public partial class ImageTokenUsage +{ + // CUSTOM: Renamed. + [CodeGenMember("InputTokens")] + public int InputTokenCount { get; } + + // CUSTOM: Renamed. + [CodeGenMember("OutputTokens")] + public int OutputTokenCount { get; } + + // CUSTOM: Renamed. + [CodeGenMember("TotalTokens")] + public int TotalTokenCount { get; } + + // CUSTOM: Renamed. + [CodeGenMember("InputTokensDetails")] + public ImageInputTokenUsageDetails InputTokenDetails { get; } +} \ No newline at end of file diff --git a/src/Custom/Images/ImageVariationOptions.cs b/src/Custom/Images/ImageVariationOptions.cs index fbab2bacf..0722fbda9 100644 --- a/src/Custom/Images/ImageVariationOptions.cs +++ b/src/Custom/Images/ImageVariationOptions.cs @@ -7,7 +7,8 @@ namespace OpenAI.Images; /// Represents additional options available to control the behavior of an image generation operation. /// [CodeGenType("CreateImageVariationRequest")] -[CodeGenSuppress("ImageVariationOptions", typeof(BinaryData))] +[CodeGenVisibility(nameof(ImageVariationOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(ImageVariationOptions), typeof(BinaryData))] public partial class ImageVariationOptions { // CUSTOM: Made internal. The model is specified by the client. @@ -40,12 +41,6 @@ public partial class ImageVariationOptions /// The number of images to generate. Must be between 1 and 10. internal long? N { get; set; } - // CUSTOM: Made public now that there are no required properties. - /// Initializes a new instance of . - public ImageVariationOptions() - { - } - // CUSTOM: Changed property type. /// The size of the generated images. Must be one of `256x256`, `512x512`, or `1024x1024`. [CodeGenMember("Size")] diff --git a/src/Custom/Images/Internal/GeneratorStubs.cs b/src/Custom/Images/Internal/GeneratorStubs.cs index d6d618deb..78dbceccf 100644 --- a/src/Custom/Images/Internal/GeneratorStubs.cs +++ b/src/Custom/Images/Internal/GeneratorStubs.cs @@ -22,3 +22,8 @@ internal readonly partial struct InternalCreateImageVariationRequestResponseForm [CodeGenType("CreateImageVariationRequestSize")] internal readonly partial struct InternalCreateImageVariationRequestSize { } + +[CodeGenType("CreateImageEditRequestQuality")] +internal readonly partial struct InternalCreateImageEditRequestQuality { } + +[CodeGenType("CreateImageEditRequestBackground")] internal readonly partial struct InternalCreateImageEditRequestBackground {} \ No newline at end of file diff --git a/src/Custom/Images/OpenAIImagesModelFactory.cs b/src/Custom/Images/OpenAIImagesModelFactory.cs index c84781c50..8affa16df 100644 --- a/src/Custom/Images/OpenAIImagesModelFactory.cs +++ b/src/Custom/Images/OpenAIImagesModelFactory.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace OpenAI.Images; @@ -20,13 +22,21 @@ public static GeneratedImage GeneratedImage(BinaryData imageBytes = null, Uri im /// Initializes a new instance of . /// A new instance for mocking. - public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt = default, IEnumerable items = null) + [EditorBrowsable(EditorBrowsableState.Never)] + public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt, IEnumerable items) + => GeneratedImageCollection(createdAt, items, usage: default); + + /// Initializes a new instance of . + /// A new instance for mocking. . + [Experimental("OPENAI001")] + public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset createdAt = default, IEnumerable items = null, ImageTokenUsage usage = default) { items ??= new List(); return new GeneratedImageCollection( - createdAt, items.ToList(), - serializedAdditionalRawData: null); + usage, + createdAt, + additionalBinaryDataProperties: null); } } diff --git a/src/Custom/Internal/AcceptHeaderValue.cs b/src/Custom/Internal/AcceptHeaderValue.cs index 4feb80dd5..b62d6f106 100644 --- a/src/Custom/Internal/AcceptHeaderValue.cs +++ b/src/Custom/Internal/AcceptHeaderValue.cs @@ -1,4 +1,4 @@ namespace OpenAI; -[CodeGenType("CreateResponseRequestAccept")] +[CodeGenType("CreateThreadAndRunRequestAccept")] internal readonly partial struct AcceptHeaderValue { } diff --git a/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs b/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs index 322153c56..aeaecf512 100644 --- a/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs +++ b/src/Custom/LegacyCompletions/Internal/GeneratorStubs.cs @@ -1,15 +1,38 @@ +using OpenAI.Files; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; + namespace OpenAI.LegacyCompletions; // CUSTOM: Made internal. [CodeGenType("CreateCompletionRequest")] -internal partial class InternalCreateCompletionRequest { } +internal partial class InternalCreateCompletionRequest +{ + public static implicit operator BinaryContent(InternalCreateCompletionRequest internalCreateCompletionRequest) + { + if (internalCreateCompletionRequest == null) + { + return null; + } + return BinaryContent.Create(internalCreateCompletionRequest, ModelSerializationExtensions.WireOptions); + } +} [CodeGenType("CreateCompletionRequestModel")] internal readonly partial struct InternalCreateCompletionRequestModel { } [CodeGenType("CreateCompletionResponse")] -internal partial class InternalCreateCompletionResponse { } +internal partial class InternalCreateCompletionResponse +{ + public static explicit operator InternalCreateCompletionResponse(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeInternalCreateCompletionResponse(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} [CodeGenType("CreateCompletionResponseChoice")] internal partial class InternalCreateCompletionResponseChoice { } diff --git a/src/Custom/Models/ModelDeletionResult.cs b/src/Custom/Models/ModelDeletionResult.cs index 928337931..e5366537c 100644 --- a/src/Custom/Models/ModelDeletionResult.cs +++ b/src/Custom/Models/ModelDeletionResult.cs @@ -1,4 +1,8 @@ -namespace OpenAI.Models; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Models; [CodeGenType("DeleteModelResponse")] public partial class ModelDeletionResult @@ -10,5 +14,12 @@ public partial class ModelDeletionResult // CUSTOM: Made internal. /// The object type, which is always `model`. [CodeGenMember("Object")] - internal InternalDeleteModelResponseObject Object { get; } = InternalDeleteModelResponseObject.Model; + internal string Object { get; } = "model"; + + internal static ModelDeletionResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeModelDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Models/OpenAIModel.cs b/src/Custom/Models/OpenAIModel.cs index 66526ee71..762843821 100644 --- a/src/Custom/Models/OpenAIModel.cs +++ b/src/Custom/Models/OpenAIModel.cs @@ -1,4 +1,7 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; namespace OpenAI.Models; @@ -10,10 +13,17 @@ public partial class OpenAIModel { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. /// The object type, which is always "model". - private InternalModelObject Object { get; } = InternalModelObject.Model; + private string Object { get; } = "model"; // CUSTOM: Renamed. /// The Unix timestamp (in seconds) when the model was created. [CodeGenMember("Created")] public DateTimeOffset CreatedAt { get; } + + internal static OpenAIModel FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeOpenAIModel(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Models/OpenAIModelClient.Protocol.cs b/src/Custom/Models/OpenAIModelClient.Protocol.cs index 476db90e3..648528fcd 100644 --- a/src/Custom/Models/OpenAIModelClient.Protocol.cs +++ b/src/Custom/Models/OpenAIModelClient.Protocol.cs @@ -24,7 +24,7 @@ public partial class OpenAIModelClient [EditorBrowsable(EditorBrowsableState.Never)] public virtual async Task GetModelsAsync(RequestOptions options) { - using PipelineMessage message = CreateListModelsRequest(options); + using PipelineMessage message = CreateGetModelsRequest(options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } @@ -38,7 +38,7 @@ public virtual async Task GetModelsAsync(RequestOptions options) [EditorBrowsable(EditorBrowsableState.Never)] public virtual ClientResult GetModels(RequestOptions options) { - using PipelineMessage message = CreateListModelsRequest(options); + using PipelineMessage message = CreateGetModelsRequest(options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } diff --git a/src/Custom/Models/OpenAIModelClient.cs b/src/Custom/Models/OpenAIModelClient.cs index ea808b072..b00a5fd1d 100644 --- a/src/Custom/Models/OpenAIModelClient.cs +++ b/src/Custom/Models/OpenAIModelClient.cs @@ -76,7 +76,7 @@ protected internal OpenAIModelClient(ClientPipeline pipeline, OpenAIClientOption public virtual async Task> GetModelsAsync(CancellationToken cancellationToken = default) { ClientResult result = await GetModelsAsync(cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((OpenAIModelCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIModelCollection.FromClientResult(result), result.GetRawResponse()); } /// Gets basic information about each of the models that are currently available, such as their corresponding owner and availability. @@ -84,7 +84,7 @@ public virtual async Task> GetModelsAsync(Ca public virtual ClientResult GetModels(CancellationToken cancellationToken = default) { ClientResult result = GetModels(cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((OpenAIModelCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIModelCollection.FromClientResult(result), result.GetRawResponse()); } /// Gets basic information about the specified model, such as its owner and availability. @@ -97,7 +97,7 @@ public virtual async Task> GetModelAsync(string model, Argument.AssertNotNullOrEmpty(model, nameof(model)); ClientResult result = await GetModelAsync(model, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((OpenAIModel)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIModel.FromClientResult(result), result.GetRawResponse()); } /// Gets basic information about the specified model, such as its owner and availability. @@ -110,7 +110,7 @@ public virtual ClientResult GetModel(string model, CancellationToke Argument.AssertNotNullOrEmpty(model, nameof(model)); ClientResult result = GetModel(model, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((OpenAIModel)result, result.GetRawResponse()); + return ClientResult.FromValue(OpenAIModel.FromClientResult(result), result.GetRawResponse()); } /// Deletes the specified fine-tuned model. @@ -124,7 +124,7 @@ public virtual async Task> DeleteModelAsync(st Argument.AssertNotNullOrEmpty(model, nameof(model)); ClientResult result = await DeleteModelAsync(model, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((ModelDeletionResult)result, result.GetRawResponse()); + return ClientResult.FromValue(ModelDeletionResult.FromClientResult(result), result.GetRawResponse()); } /// Deletes the specified fine-tuned model. @@ -138,6 +138,6 @@ public virtual ClientResult DeleteModel(string model, Cance Argument.AssertNotNullOrEmpty(model, nameof(model)); ClientResult result = DeleteModel(model, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ModelDeletionResult)result, result.GetRawResponse()); + return ClientResult.FromValue(ModelDeletionResult.FromClientResult(result), result.GetRawResponse()); } } diff --git a/src/Custom/Models/OpenAIModelCollection.Serialization.cs b/src/Custom/Models/OpenAIModelCollection.Serialization.cs index 0c0a0800c..ac4a82752 100644 --- a/src/Custom/Models/OpenAIModelCollection.Serialization.cs +++ b/src/Custom/Models/OpenAIModelCollection.Serialization.cs @@ -42,7 +42,7 @@ internal static OpenAIModelCollection DeserializeOpenAIModelCollection(JsonEleme { return null; } - InternalListModelsResponseObject @object = default; + string @object = default; IReadOnlyList data = default; IDictionary serializedAdditionalRawData = default; Dictionary rawDataDictionary = new Dictionary(); @@ -50,7 +50,7 @@ internal static OpenAIModelCollection DeserializeOpenAIModelCollection(JsonEleme { if (property.NameEquals("object"u8)) { - @object = new InternalListModelsResponseObject(property.Value.GetString()); + @object = property.Value.GetString(); continue; } if (property.NameEquals("data"u8)) diff --git a/src/Custom/Models/OpenAIModelCollection.cs b/src/Custom/Models/OpenAIModelCollection.cs index 8203ee07c..a2582823d 100644 --- a/src/Custom/Models/OpenAIModelCollection.cs +++ b/src/Custom/Models/OpenAIModelCollection.cs @@ -1,7 +1,10 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Reflection; +using System.Text.Json; namespace OpenAI.Models; @@ -11,12 +14,12 @@ namespace OpenAI.Models; [CodeGenType("ListModelsResponse")] [CodeGenSuppress("Data")] [CodeGenSuppress(nameof(OpenAIModelCollection))] -[CodeGenSuppress(nameof(OpenAIModelCollection), typeof(InternalListModelsResponseObject), typeof(IDictionary))] +[CodeGenSuppress(nameof(OpenAIModelCollection), typeof(string), typeof(IDictionary))] public partial class OpenAIModelCollection : ReadOnlyCollection { // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. /// Gets the object. - private InternalListModelsResponseObject Object { get; } = InternalListModelsResponseObject.List; + private string Object { get; } = "list"; /// Initializes a new instance of . /// @@ -31,7 +34,7 @@ internal OpenAIModelCollection(IEnumerable data) /// /// /// Keeps track of any properties unknown to the library. - internal OpenAIModelCollection(InternalListModelsResponseObject @object, IReadOnlyList data, IDictionary serializedAdditionalRawData) + internal OpenAIModelCollection(string @object, IReadOnlyList data, IDictionary serializedAdditionalRawData) : base([.. data]) { Object = @object; @@ -43,4 +46,11 @@ internal OpenAIModelCollection() : base([]) { } + + internal static OpenAIModelCollection FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeOpenAIModelCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Models/OpenAIModelsModelFactory.cs b/src/Custom/Models/OpenAIModelsModelFactory.cs index 61c75e6fb..a9cf4b0d9 100644 --- a/src/Custom/Models/OpenAIModelsModelFactory.cs +++ b/src/Custom/Models/OpenAIModelsModelFactory.cs @@ -14,7 +14,7 @@ public static ModelDeletionResult ModelDeletionResult(string modelId = null, boo return new ModelDeletionResult( deleted, modelId, - InternalDeleteModelResponseObject.Model, + "model", additionalBinaryDataProperties: null); } @@ -25,7 +25,7 @@ public static OpenAIModel OpenAIModel(string id = null, DateTimeOffset createdAt return new OpenAIModel( id, ownedBy, - InternalModelObject.Model, + "model", createdAt, additionalBinaryDataProperties: null); } @@ -37,7 +37,7 @@ public static OpenAIModelCollection OpenAIModelCollection(IEnumerable(); return new OpenAIModelCollection( - InternalListModelsResponseObject.List, + "list", items.ToList(), serializedAdditionalRawData: null); } diff --git a/src/Custom/Moderations/ModerationClient.cs b/src/Custom/Moderations/ModerationClient.cs index 586217329..76cdf34f5 100644 --- a/src/Custom/Moderations/ModerationClient.cs +++ b/src/Custom/Moderations/ModerationClient.cs @@ -101,9 +101,9 @@ public virtual async Task> ClassifyTextAsync(stri ModerationOptions options = new(); CreateModerationOptions(input, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await ClassifyTextAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue(((ModerationResultCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(ModerationResultCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Classifies if the text input is potentially harmful across several categories. @@ -118,9 +118,9 @@ public virtual ClientResult ClassifyText(string input, Cancell ModerationOptions options = new(); CreateModerationOptions(input, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = ClassifyText(content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue(((ModerationResultCollection)result).FirstOrDefault(), result.GetRawResponse()); + return ClientResult.FromValue(ModerationResultCollection.FromClientResult(result).FirstOrDefault(), result.GetRawResponse()); } /// Classifies if the text inputs are potentially harmful across several categories. @@ -135,9 +135,9 @@ public virtual async Task> ClassifyText ModerationOptions options = new(); CreateModerationOptions(inputs, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = await ClassifyTextAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((ModerationResultCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(ModerationResultCollection.FromClientResult(result), result.GetRawResponse()); } /// Classifies if the text inputs are potentially harmful across several categories. @@ -152,9 +152,9 @@ public virtual ClientResult ClassifyText(IEnumerable ModerationOptions options = new(); CreateModerationOptions(inputs, ref options); - using BinaryContent content = options; + using BinaryContent content = options.ToBinaryContent(); ClientResult result = ClassifyText(content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((ModerationResultCollection)result, result.GetRawResponse()); + return ClientResult.FromValue(ModerationResultCollection.FromClientResult(result), result.GetRawResponse()); } private void CreateModerationOptions(string input, ref ModerationOptions options) diff --git a/src/Custom/Moderations/ModerationOptions.cs b/src/Custom/Moderations/ModerationOptions.cs index f503da981..21bfc5b96 100644 --- a/src/Custom/Moderations/ModerationOptions.cs +++ b/src/Custom/Moderations/ModerationOptions.cs @@ -1,4 +1,5 @@ using System; +using System.ClientModel; using System.Collections.Generic; namespace OpenAI.Moderations; @@ -22,4 +23,6 @@ internal partial class ModerationOptions public ModerationOptions() { } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Moderations/ModerationResultCollection.cs b/src/Custom/Moderations/ModerationResultCollection.cs index bc01cfcc2..de7963c8c 100644 --- a/src/Custom/Moderations/ModerationResultCollection.cs +++ b/src/Custom/Moderations/ModerationResultCollection.cs @@ -1,6 +1,9 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Text.Json; namespace OpenAI.Moderations; @@ -45,4 +48,11 @@ internal ModerationResultCollection() : base([]) { } + + internal static ModerationResultCollection FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeModerationResultCollection(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Moderations/OpenAIModerationsModelFactory.cs b/src/Custom/Moderations/OpenAIModerationsModelFactory.cs index ab8d7f431..95780c201 100644 --- a/src/Custom/Moderations/OpenAIModerationsModelFactory.cs +++ b/src/Custom/Moderations/OpenAIModerationsModelFactory.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace OpenAI.Moderations; @@ -49,6 +50,7 @@ public static ModerationResult ModerationResult(bool flagged, ModerationCategory /// Initializes a new instance of . /// A new instance for mocking. + [Experimental("OPENAI001")] public static ModerationResult ModerationResult(bool flagged = default, ModerationCategory hate = default, ModerationCategory hateThreatening = default, ModerationCategory harassment = default, ModerationCategory harassmentThreatening = default, ModerationCategory selfHarm = default, ModerationCategory selfHarmIntent = default, ModerationCategory selfHarmInstructions = default, ModerationCategory sexual = default, ModerationCategory sexualMinors = default, ModerationCategory violence = default, ModerationCategory violenceGraphic = default, ModerationCategory illicit = default, ModerationCategory illicitViolent = default) { return new ModerationResult( diff --git a/src/Custom/OpenAIClient.cs b/src/Custom/OpenAIClient.cs index 2e7e0498d..d28d728e3 100644 --- a/src/Custom/OpenAIClient.cs +++ b/src/Custom/OpenAIClient.cs @@ -1,311 +1,341 @@ -using OpenAI.Assistants; -using OpenAI.Audio; -using OpenAI.Batch; -using OpenAI.Chat; -using OpenAI.Embeddings; -using OpenAI.Files; -using OpenAI.FineTuning; -using OpenAI.Images; -using OpenAI.Models; -using OpenAI.Moderations; -using OpenAI.RealtimeConversation; -using OpenAI.Responses; -using OpenAI.VectorStores; -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI; - -// CUSTOM: -// - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. -// - Suppressed cached clients. Clients are not singletons, and users can create multiple clients of the same type -// if needed (e.g., to target different OpenAI models). The Get*Client methods return new client instances. -/// -/// A top-level client factory that enables convenient creation of scenario-specific sub-clients while reusing shared -/// configuration details like endpoint, authentication, and pipeline customization. -/// -[CodeGenType("OpenAIClient")] -[CodeGenSuppress("OpenAIClient", typeof(ApiKeyCredential))] -[CodeGenSuppress("OpenAIClient", typeof(Uri), typeof(ApiKeyCredential), typeof(OpenAIClientOptions))] -[CodeGenSuppress("_cachedAssistantClient")] -[CodeGenSuppress("_cachedAudioClient")] -[CodeGenSuppress("_cachedBatchClient")] -[CodeGenSuppress("_cachedChatClient")] -[CodeGenSuppress("_cachedEmbeddingClient")] -[CodeGenSuppress("_cachedOpenAIFileClient")] -[CodeGenSuppress("_cachedFineTuningClient")] -[CodeGenSuppress("_cachedImageClient")] -[CodeGenSuppress("_cachedInternalAssistantMessageClient")] -[CodeGenSuppress("_cachedInternalAssistantRunClient")] -[CodeGenSuppress("_cachedInternalAssistantThreadClient")] -[CodeGenSuppress("_cachedInternalUploadsClient")] -[CodeGenSuppress("_cachedLegacyCompletionClient")] -[CodeGenSuppress("_cachedOpenAIModelClient")] -[CodeGenSuppress("_cachedModerationClient")] -[CodeGenSuppress("_cachedRealtimeConversationClient")] -[CodeGenSuppress("_cachedResponsesClient")] -[CodeGenSuppress("_cachedVectorStoreClient")] -[CodeGenSuppress("GetAssistantClient")] -[CodeGenSuppress("GetAudioClient")] -[CodeGenSuppress("GetBatchClient")] -[CodeGenSuppress("GetChatClient")] -[CodeGenSuppress("GetEmbeddingClient")] -[CodeGenSuppress("GetFileClient")] -[CodeGenSuppress("GetFineTuningClient")] -[CodeGenSuppress("GetImageClient")] -[CodeGenSuppress("GetInternalAssistantMessageClient")] -[CodeGenSuppress("GetInternalAssistantRunClient")] -[CodeGenSuppress("GetInternalAssistantThreadClient")] -[CodeGenSuppress("GetInternalUploadsClient")] -[CodeGenSuppress("GetLegacyCompletionClient")] -[CodeGenSuppress("GetModelClient")] -[CodeGenSuppress("GetModerationClient")] -[CodeGenSuppress("GetRealtimeConversationClient")] -[CodeGenSuppress("GetResponsesClient")] -[CodeGenSuppress("GetVectorStoreClient")] -public partial class OpenAIClient -{ - private const string OpenAIV1Endpoint = "https://api.openai.com/v1"; - - private static class KnownHeaderNames - { - public const string OpenAIOrganization = "OpenAI-Organization"; - public const string OpenAIProject = "OpenAI-Project"; - public const string UserAgent = "User-Agent"; - } - - private readonly OpenAIClientOptions _options; - - // CUSTOM: Added as a convenience. - /// Initializes a new instance of . - /// The API key to authenticate with the service. - /// is null. - public OpenAIClient(string apiKey) : this(new ApiKeyCredential(apiKey), new OpenAIClientOptions()) - { - } - - // CUSTOM: - // - Used a custom pipeline. - // - Demoted the endpoint parameter to be a property in the options class. - /// Initializes a new instance of . - /// The API key to authenticate with the service. - /// is null. - public OpenAIClient(ApiKeyCredential credential) : this(credential, new OpenAIClientOptions()) - { - } - - // CUSTOM: - // - Used a custom pipeline. - // - Demoted the endpoint parameter to be a property in the options class. - /// Initializes a new instance of . - /// The API key to authenticate with the service. - /// The options to configure the client. - /// is null. - public OpenAIClient(ApiKeyCredential credential, OpenAIClientOptions options) - { - Argument.AssertNotNull(credential, nameof(credential)); - options ??= new OpenAIClientOptions(); - - _keyCredential = credential; - Pipeline = OpenAIClient.CreatePipeline(credential, options); - _endpoint = OpenAIClient.GetEndpoint(options); - _options = options; - } - - // CUSTOM: Added protected internal constructor that takes a ClientPipeline. - /// Initializes a new instance of . - /// The HTTP pipeline to send and receive REST requests and responses. - /// The options to configure the client. - /// is null. - protected internal OpenAIClient(ClientPipeline pipeline, OpenAIClientOptions options) - { - Argument.AssertNotNull(pipeline, nameof(pipeline)); - options ??= new OpenAIClientOptions(); - - Pipeline = pipeline; - _endpoint = OpenAIClient.GetEndpoint(options); - _options = options; - } - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - [Experimental("OPENAI001")] - public virtual AssistantClient GetAssistantClient() => new(Pipeline, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - public virtual AudioClient GetAudioClient(string model) => new(Pipeline, model, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - [Experimental("OPENAI001")] - public virtual BatchClient GetBatchClient() => new(Pipeline, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - public virtual ChatClient GetChatClient(string model) => new(Pipeline, model, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - public virtual EmbeddingClient GetEmbeddingClient(string model) => new(Pipeline, model, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - public virtual OpenAIFileClient GetOpenAIFileClient() => new(Pipeline, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - [Experimental("OPENAI001")] - public virtual FineTuningClient GetFineTuningClient() => new(Pipeline, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - public virtual ImageClient GetImageClient(string model) => new(Pipeline, model, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - public virtual OpenAIModelClient GetOpenAIModelClient() => new(Pipeline, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - public virtual ModerationClient GetModerationClient(string model) => new(Pipeline, model, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - public virtual OpenAIResponseClient GetOpenAIResponseClient(string model) => new(Pipeline, model, _options); - - /// - /// Gets a new instance of that reuses the client configuration details provided to - /// the instance. - /// - /// - /// This method is functionally equivalent to using the constructor directly with - /// the same configuration details. - /// - /// A new . - [Experimental("OPENAI001")] - public virtual VectorStoreClient GetVectorStoreClient() => new(Pipeline, _options); - - [Experimental("OPENAI002")] - public virtual RealtimeConversationClient GetRealtimeConversationClient(string model) => new(model, _keyCredential, _options); - - internal static ClientPipeline CreatePipeline(ApiKeyCredential credential, OpenAIClientOptions options) - { - return ClientPipeline.Create( - options, - perCallPolicies: [ - CreateAddCustomHeadersPolicy(options), - ], - perTryPolicies: [ - ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(credential, AuthorizationHeader, AuthorizationApiKeyPrefix) - ], - beforeTransportPolicies: [ - ]); - } - - internal static Uri GetEndpoint(OpenAIClientOptions options = null) - { - return options?.Endpoint ?? new(OpenAIV1Endpoint); - } - - private static PipelinePolicy CreateAddCustomHeadersPolicy(OpenAIClientOptions options = null) - { - TelemetryDetails telemetryDetails = new(typeof(OpenAIClientOptions).Assembly, options?.UserAgentApplicationId); - return new GenericActionPipelinePolicy((message) => - { - if (message?.Request?.Headers?.TryGetValue(KnownHeaderNames.UserAgent, out string _) == false) - { - message.Request.Headers.Set(KnownHeaderNames.UserAgent, telemetryDetails.ToString()); - } - - if (!string.IsNullOrEmpty(options?.OrganizationId)) - { - message.Request.Headers.Set(KnownHeaderNames.OpenAIOrganization, options.OrganizationId); - } - - if (!string.IsNullOrEmpty(options?.ProjectId)) - { - message.Request.Headers.Set(KnownHeaderNames.OpenAIProject, options.ProjectId); - } - }); - } -} +using OpenAI.Assistants; +using OpenAI.Audio; +using OpenAI.Batch; +using OpenAI.Chat; +using OpenAI.Embeddings; +using OpenAI.Evals; +using OpenAI.Files; +using OpenAI.FineTuning; +using OpenAI.Images; +using OpenAI.Models; +using OpenAI.Moderations; +using OpenAI.Realtime; +using OpenAI.Responses; +using OpenAI.VectorStores; +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI; + +// CUSTOM: +// - Suppressed constructor that takes endpoint parameter; endpoint is now a property in the options class. +// - Suppressed cached clients. Clients are not singletons, and users can create multiple clients of the same type +// if needed (e.g., to target different OpenAI models). The Get*Client methods return new client instances. +/// +/// A top-level client factory that enables convenient creation of scenario-specific sub-clients while reusing shared +/// configuration details like endpoint, authentication, and pipeline customization. +/// +[CodeGenType("OpenAIClient")] +[CodeGenSuppress("OpenAIClient", typeof(ApiKeyCredential))] +[CodeGenSuppress("OpenAIClient", typeof(Uri), typeof(ApiKeyCredential), typeof(OpenAIClientOptions))] +[CodeGenSuppress("_cachedAssistantClient")] +[CodeGenSuppress("_cachedAudioClient")] +[CodeGenSuppress("_cachedBatchClient")] +[CodeGenSuppress("_cachedChatClient")] +[CodeGenSuppress("_cachedLegacyCompletionClient")] +[CodeGenSuppress("_cachedContainerClient")] +[CodeGenSuppress("_cachedEmbeddingClient")] +[CodeGenSuppress("_cachedEvaluationClient")] +[CodeGenSuppress("_cachedOpenAIFileClient")] +[CodeGenSuppress("_cachedFineTuningClient")] +[CodeGenSuppress("_cachedGraderClient")] +[CodeGenSuppress("_cachedImageClient")] +[CodeGenSuppress("_cachedOpenAIModelClient")] +[CodeGenSuppress("_cachedModerationClient")] +[CodeGenSuppress("_cachedRealtimeClient")] +[CodeGenSuppress("_cachedOpenAIResponseClient")] +[CodeGenSuppress("_cachedVectorStoreClient")] +[CodeGenSuppress("_cachedInternalAssistantMessageClient")] +[CodeGenSuppress("_cachedInternalAssistantRunClient")] +[CodeGenSuppress("_cachedInternalAssistantThreadClient")] +[CodeGenSuppress("_cachedInternalUploadsClient")] +[CodeGenSuppress("GetAssistantClient")] +[CodeGenSuppress("GetAudioClient")] +[CodeGenSuppress("GetBatchClient")] +[CodeGenSuppress("GetChatClient")] +[CodeGenSuppress("GetLegacyCompletionClient")] +[CodeGenSuppress("GetContainerClient")] +[CodeGenSuppress("GetEmbeddingClient")] +[CodeGenSuppress("GetEvaluationClient")] +[CodeGenSuppress("GetOpenAIFileClient")] +[CodeGenSuppress("GetFineTuningClient")] +[CodeGenSuppress("GetGraderClient")] +[CodeGenSuppress("GetImageClient")] +[CodeGenSuppress("GetOpenAIModelClient")] +[CodeGenSuppress("GetModerationClient")] +[CodeGenSuppress("GetRealtimeClient")] +[CodeGenSuppress("GetOpenAIResponseClient")] +[CodeGenSuppress("GetVectorStoreClient")] +[CodeGenSuppress("GetInternalAssistantMessageClient")] +[CodeGenSuppress("GetInternalAssistantRunClient")] +[CodeGenSuppress("GetInternalAssistantThreadClient")] +[CodeGenSuppress("GetInternalUploadsClient")] +public partial class OpenAIClient +{ + private const string OpenAIV1Endpoint = "https://api.openai.com/v1"; + + private static class KnownHeaderNames + { + public const string OpenAIOrganization = "OpenAI-Organization"; + public const string OpenAIProject = "OpenAI-Project"; + public const string UserAgent = "User-Agent"; + } + + private readonly OpenAIClientOptions _options; + + // CUSTOM: Added as a convenience. + /// Initializes a new instance of . + /// The API key to authenticate with the service. + /// is null. + public OpenAIClient(string apiKey) : this(new ApiKeyCredential(apiKey), new OpenAIClientOptions()) + { + } + + // CUSTOM: + // - Used a custom pipeline. + // - Demoted the endpoint parameter to be a property in the options class. + /// Initializes a new instance of . + /// The API key to authenticate with the service. + /// is null. + public OpenAIClient(ApiKeyCredential credential) : this(credential, new OpenAIClientOptions()) + { + } + + // CUSTOM: + // - Used a custom pipeline. + // - Demoted the endpoint parameter to be a property in the options class. + /// Initializes a new instance of . + /// The API key to authenticate with the service. + /// The options to configure the client. + /// is null. + public OpenAIClient(ApiKeyCredential credential, OpenAIClientOptions options) + { + Argument.AssertNotNull(credential, nameof(credential)); + options ??= new OpenAIClientOptions(); + + _keyCredential = credential; + Pipeline = OpenAIClient.CreatePipeline(credential, options); + _endpoint = OpenAIClient.GetEndpoint(options); + _options = options; + } + + // CUSTOM: Added protected internal constructor that takes a ClientPipeline. + /// Initializes a new instance of . + /// The HTTP pipeline to send and receive REST requests and responses. + /// The options to configure the client. + /// is null. + protected internal OpenAIClient(ClientPipeline pipeline, OpenAIClientOptions options) + { + Argument.AssertNotNull(pipeline, nameof(pipeline)); + options ??= new OpenAIClientOptions(); + + Pipeline = pipeline; + _endpoint = OpenAIClient.GetEndpoint(options); + _options = options; + } + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + [Experimental("OPENAI001")] + public virtual AssistantClient GetAssistantClient() => new(Pipeline, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + public virtual AudioClient GetAudioClient(string model) => new(Pipeline, model, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + [Experimental("OPENAI001")] + public virtual BatchClient GetBatchClient() => new(Pipeline, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + public virtual ChatClient GetChatClient(string model) => new(Pipeline, model, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + public virtual EmbeddingClient GetEmbeddingClient(string model) => new(Pipeline, model, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + [Experimental("OPENAI001")] + public virtual EvaluationClient GetEvaluationClient() => new(Pipeline, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + public virtual OpenAIFileClient GetOpenAIFileClient() => new(Pipeline, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + [Experimental("OPENAI001")] + public virtual FineTuningClient GetFineTuningClient() => new(Pipeline, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + public virtual ImageClient GetImageClient(string model) => new(Pipeline, model, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + public virtual OpenAIModelClient GetOpenAIModelClient() => new(Pipeline, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + public virtual ModerationClient GetModerationClient(string model) => new(Pipeline, model, _options); + + /// + /// Gets a new instance of , used to initiate conversation and transcription sessions. + /// + /// + /// + /// In contrast to other clients, does not manage input/output operations directly, + /// instead delegating stateful interaction to a child session object. + /// + /// Create instances of using methods like + /// and + /// + /// to access full /realtime functionality. + /// + /// + [Experimental("OPENAI002")] + public virtual RealtimeClient GetRealtimeClient() => new(_keyCredential, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + [Experimental("OPENAI001")] + public virtual OpenAIResponseClient GetOpenAIResponseClient(string model) => new(Pipeline, model, _options); + + /// + /// Gets a new instance of that reuses the client configuration details provided to + /// the instance. + /// + /// + /// This method is functionally equivalent to using the constructor directly with + /// the same configuration details. + /// + /// A new . + [Experimental("OPENAI001")] + public virtual VectorStoreClient GetVectorStoreClient() => new(Pipeline, _options); + + internal static ClientPipeline CreatePipeline(ApiKeyCredential credential, OpenAIClientOptions options) + { + return ClientPipeline.Create( + options, + perCallPolicies: [ + CreateAddCustomHeadersPolicy(options), + ], + perTryPolicies: [ + ApiKeyAuthenticationPolicy.CreateHeaderApiKeyPolicy(credential, AuthorizationHeader, AuthorizationApiKeyPrefix) + ], + beforeTransportPolicies: [ + ]); + } + + internal static Uri GetEndpoint(OpenAIClientOptions options = null) + { + return options?.Endpoint ?? new(OpenAIV1Endpoint); + } + + private static PipelinePolicy CreateAddCustomHeadersPolicy(OpenAIClientOptions options = null) + { + TelemetryDetails telemetryDetails = new(typeof(OpenAIClientOptions).Assembly, options?.UserAgentApplicationId); + return new GenericActionPipelinePolicy((message) => + { + if (message?.Request?.Headers?.TryGetValue(KnownHeaderNames.UserAgent, out string _) == false) + { + message.Request.Headers.Set(KnownHeaderNames.UserAgent, telemetryDetails.ToString()); + } + + if (!string.IsNullOrEmpty(options?.OrganizationId)) + { + message.Request.Headers.Set(KnownHeaderNames.OpenAIOrganization, options.OrganizationId); + } + + if (!string.IsNullOrEmpty(options?.ProjectId)) + { + message.Request.Headers.Set(KnownHeaderNames.OpenAIProject, options.ProjectId); + } + }); + } +} diff --git a/src/Custom/OpenAIContext.cs b/src/Custom/OpenAIContext.cs new file mode 100644 index 000000000..23493fda3 --- /dev/null +++ b/src/Custom/OpenAIContext.cs @@ -0,0 +1,12 @@ +#nullable disable + +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI +{ + [Experimental("OPENAI001")] + public partial class OpenAIContext + { + } +} diff --git a/src/Custom/OpenAIError.cs b/src/Custom/OpenAIError.cs index 7bdc7c596..08ee3030a 100644 --- a/src/Custom/OpenAIError.cs +++ b/src/Custom/OpenAIError.cs @@ -35,7 +35,7 @@ OpenAIErrorResponse errorResponse public string ToExceptionMessage(int httpStatus) { StringBuilder messageBuilder = new(); - messageBuilder.Append("HTTP ").Append(httpStatus).Append(" (").Append(Type).Append(": ").Append(Code).AppendLine(")"); + messageBuilder.Append("HTTP ").Append(httpStatus).Append(" (").Append(Kind).Append(": ").Append(Code).AppendLine(")"); if (!string.IsNullOrEmpty(Param)) { messageBuilder.Append("Parameter: ").AppendLine(Param); diff --git a/src/Custom/RealtimeConversation/ConversationContentPart.cs b/src/Custom/Realtime/ConversationContentPart.cs similarity index 97% rename from src/Custom/RealtimeConversation/ConversationContentPart.cs rename to src/Custom/Realtime/ConversationContentPart.cs index 1c8934fba..c9c233109 100644 --- a/src/Custom/RealtimeConversation/ConversationContentPart.cs +++ b/src/Custom/Realtime/ConversationContentPart.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeContentPart")] diff --git a/src/Custom/RealtimeConversation/ConversationContentPartKind.cs b/src/Custom/Realtime/ConversationContentPartKind.cs similarity index 91% rename from src/Custom/RealtimeConversation/ConversationContentPartKind.cs rename to src/Custom/Realtime/ConversationContentPartKind.cs index c87462431..b211c3331 100644 --- a/src/Custom/RealtimeConversation/ConversationContentPartKind.cs +++ b/src/Custom/Realtime/ConversationContentPartKind.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeContentPartType")] diff --git a/src/Custom/RealtimeConversation/ConversationFunctionTool.cs b/src/Custom/Realtime/ConversationFunctionTool.cs similarity index 94% rename from src/Custom/RealtimeConversation/ConversationFunctionTool.cs rename to src/Custom/Realtime/ConversationFunctionTool.cs index c8b6fc155..e1aa5e78b 100644 --- a/src/Custom/RealtimeConversation/ConversationFunctionTool.cs +++ b/src/Custom/Realtime/ConversationFunctionTool.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeFunctionTool")] diff --git a/src/Custom/RealtimeConversation/ConversationIncompleteReason.cs b/src/Custom/Realtime/ConversationIncompleteReason.cs similarity index 85% rename from src/Custom/RealtimeConversation/ConversationIncompleteReason.cs rename to src/Custom/Realtime/ConversationIncompleteReason.cs index 3913ca477..b36db8ed5 100644 --- a/src/Custom/RealtimeConversation/ConversationIncompleteReason.cs +++ b/src/Custom/Realtime/ConversationIncompleteReason.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeResponseStatusDetailsReason")] diff --git a/src/Custom/RealtimeConversation/ConversationInputTokenUsageDetails.cs b/src/Custom/Realtime/ConversationInputTokenUsageDetails.cs similarity index 93% rename from src/Custom/RealtimeConversation/ConversationInputTokenUsageDetails.cs rename to src/Custom/Realtime/ConversationInputTokenUsageDetails.cs index a3c38f534..c0e4ebc49 100644 --- a/src/Custom/RealtimeConversation/ConversationInputTokenUsageDetails.cs +++ b/src/Custom/Realtime/ConversationInputTokenUsageDetails.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeResponseUsageInputTokenDetails")] diff --git a/src/Custom/RealtimeConversation/ConversationMaxTokensChoice.Serialization.cs b/src/Custom/Realtime/ConversationMaxTokensChoice.Serialization.cs similarity index 98% rename from src/Custom/RealtimeConversation/ConversationMaxTokensChoice.Serialization.cs rename to src/Custom/Realtime/ConversationMaxTokensChoice.Serialization.cs index 699d2020b..3a1c48176 100644 --- a/src/Custom/RealtimeConversation/ConversationMaxTokensChoice.Serialization.cs +++ b/src/Custom/Realtime/ConversationMaxTokensChoice.Serialization.cs @@ -3,7 +3,7 @@ using System.Diagnostics.CodeAnalysis; using System.Text.Json; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; public partial class ConversationMaxTokensChoice : IJsonModel { diff --git a/src/Custom/RealtimeConversation/ConversationMaxTokensChoice.cs b/src/Custom/Realtime/ConversationMaxTokensChoice.cs similarity index 93% rename from src/Custom/RealtimeConversation/ConversationMaxTokensChoice.cs rename to src/Custom/Realtime/ConversationMaxTokensChoice.cs index 5bc007139..401e8063a 100644 --- a/src/Custom/RealtimeConversation/ConversationMaxTokensChoice.cs +++ b/src/Custom/Realtime/ConversationMaxTokensChoice.cs @@ -3,7 +3,7 @@ using System.ClientModel.Primitives; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] public partial class ConversationMaxTokensChoice @@ -34,6 +34,8 @@ internal ConversationMaxTokensChoice(bool isDefaultNullValue) _isDefaultNullValue = true; } + internal ConversationMaxTokensChoice() { } + public static implicit operator ConversationMaxTokensChoice(int maxTokens) => CreateNumericMaxTokensChoice(maxTokens); } \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationOutputTokenUsageDetails.cs b/src/Custom/Realtime/ConversationOutputTokenUsageDetails.cs similarity index 92% rename from src/Custom/RealtimeConversation/ConversationOutputTokenUsageDetails.cs rename to src/Custom/Realtime/ConversationOutputTokenUsageDetails.cs index fb346e199..f6f2cd4f4 100644 --- a/src/Custom/RealtimeConversation/ConversationOutputTokenUsageDetails.cs +++ b/src/Custom/Realtime/ConversationOutputTokenUsageDetails.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeResponseUsageOutputTokenDetails")] diff --git a/src/Custom/RealtimeConversation/ConversationRateLimitDetailsItem.cs b/src/Custom/Realtime/ConversationRateLimitDetailsItem.cs similarity index 92% rename from src/Custom/RealtimeConversation/ConversationRateLimitDetailsItem.cs rename to src/Custom/Realtime/ConversationRateLimitDetailsItem.cs index dd4f1786b..8d1aa149d 100644 --- a/src/Custom/RealtimeConversation/ConversationRateLimitDetailsItem.cs +++ b/src/Custom/Realtime/ConversationRateLimitDetailsItem.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeServerEventRateLimitsUpdatedRateLimitsItem")] diff --git a/src/Custom/RealtimeConversation/ConversationResponseOptions.cs b/src/Custom/Realtime/ConversationResponseOptions.cs similarity index 78% rename from src/Custom/RealtimeConversation/ConversationResponseOptions.cs rename to src/Custom/Realtime/ConversationResponseOptions.cs index 5c25f651b..e75b90d64 100644 --- a/src/Custom/RealtimeConversation/ConversationResponseOptions.cs +++ b/src/Custom/Realtime/ConversationResponseOptions.cs @@ -5,7 +5,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeResponseCreateParams")] @@ -14,12 +14,16 @@ public partial class ConversationResponseOptions [CodeGenMember("Conversation")] public ResponseConversationSelection? ConversationSelection { get; set; } + // CUSTOM: Use a scenario-specific copy of the voice ID collection. + [CodeGenMember("Voice")] + public ConversationVoice? Voice; + [CodeGenMember("Modalities")] private IList _internalModalities; - public ConversationContentModalities ContentModalities + public RealtimeContentModalities ContentModalities { - get => ConversationContentModalitiesExtensions.FromInternalModalities(_internalModalities); + get => RealtimeContentModalitiesExtensions.FromInternalModalities(_internalModalities); set => _internalModalities = value.ToInternalModalities(); } @@ -50,5 +54,5 @@ public ConversationMaxTokensChoice MaxOutputTokens } [CodeGenMember("Input")] - public IList OverrideItems { get; } + public IList OverrideItems { get; } } diff --git a/src/Custom/Realtime/ConversationSessionOptions.cs b/src/Custom/Realtime/ConversationSessionOptions.cs new file mode 100644 index 000000000..6f4438b60 --- /dev/null +++ b/src/Custom/Realtime/ConversationSessionOptions.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using OpenAI.Internal; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeRequestSession")] +public partial class ConversationSessionOptions +{ + // CUSTOM: Use a scenario-specific copy of the shared voice ID collection + public ConversationVoice? Voice { get; set; } + + [CodeGenMember("Model")] + internal InternalRealtimeRequestSessionModel? Model { get; set; } + + [CodeGenMember("Modalities")] + private IList _internalModalities; + + public RealtimeContentModalities ContentModalities + { + get => RealtimeContentModalitiesExtensions.FromInternalModalities(_internalModalities); + set => _internalModalities = value.ToInternalModalities(); + } + + [CodeGenMember("ToolChoice")] + private BinaryData _internalToolChoice; + + public ConversationToolChoice ToolChoice + { + get => ConversationToolChoice.FromBinaryData(_internalToolChoice); + set + { + _internalToolChoice = value is not null + ? ModelReaderWriter.Write(value) + : null; + } + } + + [CodeGenMember("MaxResponseOutputTokens")] + private BinaryData _maxResponseOutputTokens; + + public ConversationMaxTokensChoice MaxOutputTokens + { + get => ConversationMaxTokensChoice.FromBinaryData(_maxResponseOutputTokens); + set + { + _maxResponseOutputTokens = value == null ? null : ModelReaderWriter.Write(value); + } + } + + [CodeGenMember("TurnDetection")] + public TurnDetectionOptions TurnDetectionOptions { get; set; } + + [CodeGenMember("InputAudioTranscription")] + public InputTranscriptionOptions InputTranscriptionOptions { get; set; } + + [CodeGenMember("InputAudioNoiseReduction")] + public InputNoiseReductionOptions InputNoiseReductionOptions { get; set; } +} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationStatusDetails.cs b/src/Custom/Realtime/ConversationStatusDetails.cs similarity index 84% rename from src/Custom/RealtimeConversation/ConversationStatusDetails.cs rename to src/Custom/Realtime/ConversationStatusDetails.cs index 7198a07df..1b9166f47 100644 --- a/src/Custom/RealtimeConversation/ConversationStatusDetails.cs +++ b/src/Custom/Realtime/ConversationStatusDetails.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeResponseStatusDetails")] @@ -14,7 +14,7 @@ public partial class ConversationStatusDetails [CodeGenMember("Reason")] public ConversationIncompleteReason? IncompleteReason { get; } - public string ErrorKind => Error?.Type ?? string.Empty; + public string ErrorKind => Error?.Kind ?? string.Empty; public string ErrorCode => Error?.Code ?? string.Empty; diff --git a/src/Custom/RealtimeConversation/ConversationTokenUsage.cs b/src/Custom/Realtime/ConversationTokenUsage.cs similarity index 92% rename from src/Custom/RealtimeConversation/ConversationTokenUsage.cs rename to src/Custom/Realtime/ConversationTokenUsage.cs index 1842c2b14..5ddec86a4 100644 --- a/src/Custom/RealtimeConversation/ConversationTokenUsage.cs +++ b/src/Custom/Realtime/ConversationTokenUsage.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; public partial class ConversationTokenUsage { diff --git a/src/Custom/RealtimeConversation/ConversationTool.cs b/src/Custom/Realtime/ConversationTool.cs similarity index 82% rename from src/Custom/RealtimeConversation/ConversationTool.cs rename to src/Custom/Realtime/ConversationTool.cs index 59e5e4a41..6165f8c0a 100644 --- a/src/Custom/RealtimeConversation/ConversationTool.cs +++ b/src/Custom/Realtime/ConversationTool.cs @@ -1,12 +1,13 @@ using System; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeTool")] -public abstract partial class ConversationTool +public partial class ConversationTool { + // CUSTOM: Remove setter. [CodeGenMember("Type")] public ConversationToolKind Kind { get; } diff --git a/src/Custom/RealtimeConversation/ConversationToolChoice.Serialization.cs b/src/Custom/Realtime/ConversationToolChoice.Serialization.cs similarity index 98% rename from src/Custom/RealtimeConversation/ConversationToolChoice.Serialization.cs rename to src/Custom/Realtime/ConversationToolChoice.Serialization.cs index d0367f25a..012ed957d 100644 --- a/src/Custom/RealtimeConversation/ConversationToolChoice.Serialization.cs +++ b/src/Custom/Realtime/ConversationToolChoice.Serialization.cs @@ -3,7 +3,7 @@ using System.Diagnostics.CodeAnalysis; using System.Text.Json; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; public partial class ConversationToolChoice : IJsonModel { diff --git a/src/Custom/RealtimeConversation/ConversationToolChoice.cs b/src/Custom/Realtime/ConversationToolChoice.cs similarity index 87% rename from src/Custom/RealtimeConversation/ConversationToolChoice.cs rename to src/Custom/Realtime/ConversationToolChoice.cs index 108486547..b6e39b0c7 100644 --- a/src/Custom/RealtimeConversation/ConversationToolChoice.cs +++ b/src/Custom/Realtime/ConversationToolChoice.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] public partial class ConversationToolChoice @@ -19,7 +19,7 @@ public string FunctionName public static ConversationToolChoice CreateRequiredToolChoice() => new(ConversationToolChoiceKind.Required, null); public static ConversationToolChoice CreateFunctionToolChoice(string functionName) - => new(ConversationToolChoiceKind.Function, new InternalRealtimeToolChoiceFunctionObject(new InternalRealtimeToolChoiceFunctionObjectFunction(functionName))); + => new(ConversationToolChoiceKind.Function, new InternalRealtimeToolChoiceFunctionObject(ConversationToolKind.Function, null, new InternalRealtimeToolChoiceFunctionObjectFunction(functionName))); internal ConversationToolChoice(ConversationToolChoiceKind choiceKind, InternalRealtimeToolChoiceObject objectToolChoice) { diff --git a/src/Custom/RealtimeConversation/ConversationToolChoiceKind.cs b/src/Custom/Realtime/ConversationToolChoiceKind.cs similarity index 90% rename from src/Custom/RealtimeConversation/ConversationToolChoiceKind.cs rename to src/Custom/Realtime/ConversationToolChoiceKind.cs index 1a82a3f4f..9ac30e131 100644 --- a/src/Custom/RealtimeConversation/ConversationToolChoiceKind.cs +++ b/src/Custom/Realtime/ConversationToolChoiceKind.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeToolChoiceLiteral")] diff --git a/src/Custom/Realtime/GeneratorStubs.cs b/src/Custom/Realtime/GeneratorStubs.cs new file mode 100644 index 000000000..72c06de65 --- /dev/null +++ b/src/Custom/Realtime/GeneratorStubs.cs @@ -0,0 +1,13 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")][CodeGenType("RealtimeAudioFormat")] public readonly partial struct RealtimeAudioFormat { } +[Experimental("OPENAI002")][CodeGenType("RealtimeAudioInputTranscriptionModel")] public readonly partial struct InputTranscriptionModel { } +[Experimental("OPENAI002")][CodeGenType("RealtimeAudioInputTranscriptionSettings")] public partial class InputTranscriptionOptions { } +[Experimental("OPENAI002")][CodeGenType("RealtimeItemStatus")] public readonly partial struct ConversationItemStatus { } +[Experimental("OPENAI002")][CodeGenType("RealtimeMessageRole")] public readonly partial struct ConversationMessageRole { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseStatus")] public readonly partial struct ConversationStatus { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseUsage")] public partial class ConversationTokenUsage { } +[Experimental("OPENAI002")][CodeGenType("RealtimeToolType")] public readonly partial struct ConversationToolKind { } +[Experimental("OPENAI002")][CodeGenType("DotNetRealtimeVoiceIds")] public readonly partial struct ConversationVoice { } diff --git a/src/Custom/Realtime/InputNoiseReductionKind.cs b/src/Custom/Realtime/InputNoiseReductionKind.cs new file mode 100644 index 000000000..85ff7a096 --- /dev/null +++ b/src/Custom/Realtime/InputNoiseReductionKind.cs @@ -0,0 +1,16 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeAudioNoiseReductionType")] +public enum InputNoiseReductionKind +{ + Unknown, + [CodeGenMember("NearField")] + NearField, + [CodeGenMember("SemanticVad")] + FarField, + Disabled, +} \ No newline at end of file diff --git a/src/Custom/Realtime/InputNoiseReductionOptions.Serialization.cs b/src/Custom/Realtime/InputNoiseReductionOptions.Serialization.cs new file mode 100644 index 000000000..042adb1aa --- /dev/null +++ b/src/Custom/Realtime/InputNoiseReductionOptions.Serialization.cs @@ -0,0 +1,29 @@ +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Realtime; + +[CodeGenSuppress(nameof(DeserializeInputNoiseReductionOptions), typeof(JsonElement), typeof(ModelReaderWriterOptions))] +public partial class InputNoiseReductionOptions +{ + internal static InputNoiseReductionOptions DeserializeInputNoiseReductionOptions(JsonElement element, ModelReaderWriterOptions options = null) + { + options ??= ModelSerializationExtensions.WireOptions; + + if (element.ValueKind == JsonValueKind.Null) + { + return InternalRealtimeAudioDisabledNoiseReduction + .DeserializeInternalRealtimeAudioDisabledNoiseReduction(element, options); + } + if (element.TryGetProperty("type", out JsonElement discriminator)) + { + return discriminator.GetString() switch + { + "near_field" => (InputNoiseReductionOptions)InternalRealtimeAudioNearFieldNoiseReduction.DeserializeInternalRealtimeAudioNearFieldNoiseReduction(element, options), + "far_field" => (InputNoiseReductionOptions)InternalRealtimeAudioFarFieldNoiseReduction.DeserializeInternalRealtimeAudioFarFieldNoiseReduction(element, options), + _ => (InputNoiseReductionOptions)InternalUnknownRealtimeAudioNoiseReduction.DeserializeInternalUnknownRealtimeAudioNoiseReduction(element, options), + }; + } + return InternalUnknownRealtimeAudioNoiseReduction.DeserializeInternalUnknownRealtimeAudioNoiseReduction(element, options); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/InputNoiseReductionOptions.cs b/src/Custom/Realtime/InputNoiseReductionOptions.cs new file mode 100644 index 000000000..2fab494da --- /dev/null +++ b/src/Custom/Realtime/InputNoiseReductionOptions.cs @@ -0,0 +1,22 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeAudioNoiseReduction")] +public partial class InputNoiseReductionOptions +{ + // CUSTOM: Rename to "Kind" and make public. + [CodeGenMember("Type")] + public InputNoiseReductionKind Kind { get; set; } + + public static InputNoiseReductionOptions CreateNearFieldOptions() + => new InternalRealtimeAudioNearFieldNoiseReduction(); + + public static InputNoiseReductionOptions CreateFarFieldOptions() + => new InternalRealtimeAudioFarFieldNoiseReduction(); + + public static InputNoiseReductionOptions CreateDisabledOptions() + => new InternalRealtimeAudioDisabledNoiseReduction(); +} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageCollectionResult.cs b/src/Custom/Realtime/Internal/AsyncWebsocketMessageCollectionResult.cs similarity index 97% rename from src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageCollectionResult.cs rename to src/Custom/Realtime/Internal/AsyncWebsocketMessageCollectionResult.cs index 270d5d501..76f174d65 100644 --- a/src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageCollectionResult.cs +++ b/src/Custom/Realtime/Internal/AsyncWebsocketMessageCollectionResult.cs @@ -4,7 +4,7 @@ using System.Threading; using System.Threading.Tasks; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; internal partial class AsyncWebsocketMessageCollectionResult : AsyncCollectionResult { diff --git a/src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageEnumerator.cs b/src/Custom/Realtime/Internal/AsyncWebsocketMessageEnumerator.cs similarity index 88% rename from src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageEnumerator.cs rename to src/Custom/Realtime/Internal/AsyncWebsocketMessageEnumerator.cs index e89d9a910..4e581dc31 100644 --- a/src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageEnumerator.cs +++ b/src/Custom/Realtime/Internal/AsyncWebsocketMessageEnumerator.cs @@ -6,14 +6,14 @@ using System.Threading; using System.Threading.Tasks; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; internal partial class AsyncWebsocketMessageResultEnumerator : IAsyncEnumerator { public ClientResult Current { get; private set; } private readonly CancellationToken _cancellationToken; private readonly WebSocket _webSocket; - private byte[] _receiveBuffer; + private readonly byte[] _receiveBuffer; public AsyncWebsocketMessageResultEnumerator(WebSocket webSocket, CancellationToken cancellationToken) { @@ -26,12 +26,12 @@ public AsyncWebsocketMessageResultEnumerator(WebSocket webSocket, CancellationTo public ValueTask DisposeAsync() { - if (Interlocked.Exchange(ref _receiveBuffer, null) is byte[] toReturn) + _webSocket?.Dispose(); + if (_receiveBuffer is not null) { - ArrayPool.Shared.Return(toReturn); + ArrayPool.Shared.Return(_receiveBuffer); } - _webSocket?.Dispose(); - return default; + return new ValueTask(Task.CompletedTask); } public async ValueTask MoveNextAsync() @@ -54,4 +54,4 @@ public async ValueTask MoveNextAsync() Current = ClientResult.FromResponse(websocketPipelineResponse); return true; } -} +} \ No newline at end of file diff --git a/src/Custom/Realtime/Internal/GeneratorStubs.cs b/src/Custom/Realtime/Internal/GeneratorStubs.cs new file mode 100644 index 000000000..31aba6bc0 --- /dev/null +++ b/src/Custom/Realtime/Internal/GeneratorStubs.cs @@ -0,0 +1,97 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")][CodeGenType("DotNetRealtimeLogProbsProperties")] internal partial class InternalDotNetRealtimeLogProbProperties { } +[Experimental("OPENAI002")][CodeGenType("RealtimeAudioFarFieldNoiseReduction")] internal partial class InternalRealtimeAudioFarFieldNoiseReduction { } +[Experimental("OPENAI002")][CodeGenType("RealtimeAudioNearFieldNoiseReduction")] internal partial class InternalRealtimeAudioNearFieldNoiseReduction { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEvent")] internal partial class InternalRealtimeClientEvent { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventConversationItemCreate")] internal partial class InternalRealtimeClientEventConversationItemCreate { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventConversationItemDelete")] internal partial class InternalRealtimeClientEventConversationItemDelete { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventConversationItemRetrieve")] internal partial class InternalRealtimeClientEventConversationItemRetrieve {} +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventConversationItemTruncate")] internal partial class InternalRealtimeClientEventConversationItemTruncate { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventInputAudioBufferAppend")] internal partial class InternalRealtimeClientEventInputAudioBufferAppend { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventInputAudioBufferClear")] internal partial class InternalRealtimeClientEventInputAudioBufferClear { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventInputAudioBufferCommit")] internal partial class InternalRealtimeClientEventInputAudioBufferCommit { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventResponseCancel")] internal partial class InternalRealtimeClientEventResponseCancel { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventSessionUpdate")] internal partial class InternalRealtimeClientEventSessionUpdate { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventTranscriptionSessionUpdate")] internal partial class InternalRealtimeClientEventTranscriptionSessionUpdate {} +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventType")] internal readonly partial struct InternalRealtimeClientEventType { } +[Experimental("OPENAI002")][CodeGenType("RealtimeConversationResponseItemObject")] internal readonly partial struct InternalRealtimeConversationResponseItemObject { } +[Experimental("OPENAI002")][CodeGenType("RealtimeItemType")] internal readonly partial struct InternalRealtimeItemType { } +[Experimental("OPENAI002")][CodeGenType("RealtimeModality")] internal readonly partial struct InternalRealtimeRequestSessionModality { } +[Experimental("OPENAI002")][CodeGenType("RealtimeRequestFunctionCallItem")] internal partial class InternalRealtimeRequestFunctionCallItem { } +[Experimental("OPENAI002")][CodeGenType("RealtimeRequestFunctionCallOutputItem")] internal partial class InternalRealtimeRequestFunctionCallOutputItem { } +[Experimental("OPENAI002")][CodeGenType("RealtimeRequestMessageItem")] internal partial class InternalRealtimeRequestMessageItem { } +[Experimental("OPENAI002")][CodeGenType("RealtimeRequestSessionModel")] internal readonly partial struct InternalRealtimeRequestSessionModel { } +[Experimental("OPENAI002")][CodeGenType("RealtimeRequestTextContentPart")] internal partial class InternalRealtimeRequestTextContentPart { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseFunctionCallItem")] internal partial class InternalRealtimeResponseFunctionCallItem { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseFunctionCallOutputItem")] internal partial class InternalRealtimeResponseFunctionCallOutputItem { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseModality")] internal readonly partial struct InternalRealtimeResponseModality { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseObject")] internal readonly partial struct InternalRealtimeResponseObject { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseOutputAudioFormat")] internal readonly partial struct InternalRealtimeResponseOutputAudioFormat { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseSessionObject")] internal readonly partial struct InternalRealtimeResponseSessionObject { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseStatusDetailsError")] internal partial class InternalRealtimeResponseStatusDetailsError { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseStatusDetailsType")] internal readonly partial struct InternalRealtimeResponseStatusDetailsType { } +[Experimental("OPENAI002")][CodeGenType("RealtimeResponseVoice")] internal readonly partial struct InternalRealtimeResponseVoice { } +[Experimental("OPENAI002")][CodeGenType("RealtimeSemanticVadTurnDetection")] internal partial class InternalRealtimeSemanticVadTurnDetection { } +[Experimental("OPENAI002")][CodeGenType("RealtimeSemanticVadTurnDetectionEagerness")] internal readonly partial struct InternalRealtimeSemanticVadTurnDetectionEagerness { } +[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventConversationCreated")] internal partial class InternalRealtimeServerEventConversationCreated { } +[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventConversationCreatedConversation")] internal partial class InternalRealtimeServerEventConversationCreatedConversation { } +[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionFailedError")] internal partial class InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError { } +[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventErrorError")] internal partial class InternalRealtimeServerEventErrorError { } +[Experimental("OPENAI002")][CodeGenType("RealtimeToolChoiceFunctionObject")] internal partial class InternalRealtimeToolChoiceFunctionObject { } +[Experimental("OPENAI002")][CodeGenType("RealtimeToolChoiceFunctionObjectFunction")] internal partial class InternalRealtimeToolChoiceFunctionObjectFunction { } +[Experimental("OPENAI002")][CodeGenType("RealtimeToolChoiceObject")] internal partial class InternalRealtimeToolChoiceObject { } +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestInputAudioFormat")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1")] internal partial class InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1 {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestInputAudioTranscription")] internal partial class InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestModality")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestModality {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestTurnDetection")] internal partial class InternalRealtimeTranscriptionSessionCreateRequestTurnDetection {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestTurnDetectionType")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateResponseClientSecret")] internal partial class InternalRealtimeTranscriptionSessionCreateResponseClientSecret {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateResponseInputAudioTranscription")] internal partial class InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateResponseModality")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateResponseModality {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateResponseTurnDetection")] internal partial class InternalRealtimeTranscriptionSessionCreateResponseTurnDetection {} +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeAudioNoiseReduction")] internal partial class InternalUnknownRealtimeAudioNoiseReduction { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeClientEvent")] internal partial class UnknownRealtimeClientEvent { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeContentPart")] internal partial class UnknownRealtimeContentPart { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeConversationRequestItem")] internal partial class UnknownRealtimeRequestItem { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeConversationResponseItem")] internal partial class UnknownRealtimeResponseItem { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeRequestMessageItem")] internal partial class UnknownRealtimeRequestMessageItem { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeServerEvent")] internal partial class UnknownRealtimeServerEvent { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeTool")] internal partial class UnknownRealtimeTool { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeToolChoiceObject")] internal partial class UnknownRealtimeToolChoiceObject { } +[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeTurnDetection")] internal partial class UnknownRealtimeTurnDetection { } +[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventOutputAudioBufferClear")] internal partial class InternalRealtimeClientEventOutputAudioBufferClear { } +[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventOutputAudioBufferCleared")] internal partial class InternalRealtimeServerEventOutputAudioBufferCleared { } +[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventOutputAudioBufferStarted")] internal partial class InternalRealtimeServerEventOutputAudioBufferStarted { } +[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventOutputAudioBufferStopped")] internal partial class InternalRealtimeServerEventOutputAudioBufferStopped { } +[Experimental("OPENAI002")][CodeGenType("TranscriptTextDeltaEventLogprob")] internal partial class InternalTranscriptTextDeltaEventLogprob { } +[Experimental("OPENAI002")][CodeGenType("TranscriptTextDoneEventLogprob")] internal partial class InternalTranscriptTextDoneEventLogprob { } +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestClientSecretExpiresAtAnchor")] internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAtAnchor {} +[Experimental("OPENAI002")][CodeGenType("VadConfigType")] internal readonly partial struct InternalVadConfigType {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestClientSecret")] internal partial class InternalRealtimeTranscriptionSessionCreateRequestClientSecret {} +[Experimental("OPENAI002")][CodeGenType("RealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt")] internal partial class InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt {} +[CodeGenType("VadConfig")] internal partial class InternalVadConfig {} +[CodeGenType("RealtimeSessionCreateRequestModel")] internal readonly partial struct InternalRealtimeSessionCreateRequestModel {} +[CodeGenType("RealtimeSessionCreateRequestTurnDetectionType")] internal readonly partial struct InternalRealtimeSessionCreateRequestTurnDetectionType {} +[CodeGenType("RealtimeSessionCreateRequestTurnDetectionEagerness")] internal readonly partial struct InternalRealtimeSessionCreateRequestTurnDetectionEagerness {} +[CodeGenType("RealtimeSessionCreateRequestInputAudioNoiseReductionType")] internal readonly partial struct InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType {} +[CodeGenType("RealtimeSessionCreateRequestClientSecretExpiresAtAnchor")] internal readonly partial struct InternalRealtimeSessionCreateRequestClientSecretExpiresAtAnchor {} +[CodeGenType("RealtimeSessionCreateRequestInputAudioTranscription")] internal partial class InternalRealtimeSessionCreateRequestInputAudioTranscription {} +[CodeGenType("RealtimeSessionCreateRequestTurnDetection")] internal partial class InternalRealtimeSessionCreateRequestTurnDetection {} +[CodeGenType("RealtimeSessionCreateRequestInputAudioNoiseReduction1")] internal partial class InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 {} +[CodeGenType("RealtimeSessionCreateRequestTracing1")] internal partial class InternalRealtimeSessionCreateRequestTracing1 {} +[CodeGenType("RealtimeSessionCreateRequestClientSecret")] internal partial class InternalRealtimeSessionCreateRequestClientSecret {} +[CodeGenType("RealtimeSessionCreateRequestClientSecretExpiresAt")] internal partial class InternalRealtimeSessionCreateRequestClientSecretExpiresAt {} +[CodeGenType("RealtimeSessionCreateRequest")] internal partial class InternalRealtimeSessionCreateRequest {} +[CodeGenType("RealtimeSessionCreateResponse")] internal partial class InternalRealtimeSessionCreateResponse {} +[CodeGenType("RealtimeSessionCreateResponseClientSecret")] internal partial class InternalRealtimeSessionCreateResponseClientSecret {} +[CodeGenType("RealtimeSessionCreateResponseInputAudioTranscription")] internal partial class InternalRealtimeSessionCreateResponseInputAudioTranscription {} +[CodeGenType("RealtimeSessionCreateResponseTracing1")] internal partial class InternalRealtimeSessionCreateResponseTracing1 {} +[CodeGenType("RealtimeSessionCreateResponseTurnDetection")] internal partial class InternalRealtimeSessionCreateResponseTurnDetection {} \ No newline at end of file diff --git a/src/Custom/Realtime/Internal/InternalRealtimeAudioDisabledNoiseReduction.Serialization.cs b/src/Custom/Realtime/Internal/InternalRealtimeAudioDisabledNoiseReduction.Serialization.cs new file mode 100644 index 000000000..ff18cfe53 --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeAudioDisabledNoiseReduction.Serialization.cs @@ -0,0 +1,37 @@ +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.Realtime; + +internal partial class InternalRealtimeAudioDisabledNoiseReduction : IJsonModel +{ + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, SerializeInternalRealtimeAudioDisabledNoiseReduction, writer, options); + + InternalRealtimeAudioDisabledNoiseReduction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeInternalRealtimeAudioDisabledNoiseReduction, ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + InternalRealtimeAudioDisabledNoiseReduction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeInternalRealtimeAudioDisabledNoiseReduction, data, options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + internal static void SerializeInternalRealtimeAudioDisabledNoiseReduction(InternalRealtimeAudioDisabledNoiseReduction instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteNullValue(); + } + + internal static InternalRealtimeAudioDisabledNoiseReduction DeserializeInternalRealtimeAudioDisabledNoiseReduction(JsonElement element, ModelReaderWriterOptions options = null) + { + if (element.ValueKind != JsonValueKind.Null) + { + throw new ArgumentException($"Unexpected deserialization of disabled input_audio_noise_reduction with non-null element kind: {element.ValueKind}"); + } + return new(); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/Internal/InternalRealtimeAudioDisabledNoiseReduction.cs b/src/Custom/Realtime/Internal/InternalRealtimeAudioDisabledNoiseReduction.cs new file mode 100644 index 000000000..350f905e1 --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeAudioDisabledNoiseReduction.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime; + +internal partial class InternalRealtimeAudioDisabledNoiseReduction: InputNoiseReductionOptions +{ + public InternalRealtimeAudioDisabledNoiseReduction() + : base(InputNoiseReductionKind.Disabled) + { } +} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeClientEventResponseCreate.cs b/src/Custom/Realtime/Internal/InternalRealtimeClientEventResponseCreate.cs similarity index 88% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeClientEventResponseCreate.cs rename to src/Custom/Realtime/Internal/InternalRealtimeClientEventResponseCreate.cs index 78b63893a..148876dd8 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeClientEventResponseCreate.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeClientEventResponseCreate.cs @@ -4,7 +4,7 @@ using System.Text.Json; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeClientEventResponseCreate")] diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeNoTurnDetection.Serialization.cs b/src/Custom/Realtime/Internal/InternalRealtimeNoTurnDetection.Serialization.cs similarity index 97% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeNoTurnDetection.Serialization.cs rename to src/Custom/Realtime/Internal/InternalRealtimeNoTurnDetection.Serialization.cs index d5e6f7793..0643cd8d6 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeNoTurnDetection.Serialization.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeNoTurnDetection.Serialization.cs @@ -3,7 +3,7 @@ using System.Diagnostics.CodeAnalysis; using System.Text.Json; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; internal partial class InternalRealtimeNoTurnDetection : IJsonModel { diff --git a/src/Custom/Realtime/Internal/InternalRealtimeNoTurnDetection.cs b/src/Custom/Realtime/Internal/InternalRealtimeNoTurnDetection.cs new file mode 100644 index 000000000..248bb0975 --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeNoTurnDetection.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime; + +internal partial class InternalRealtimeNoTurnDetection : TurnDetectionOptions +{ + public InternalRealtimeNoTurnDetection() + : this(TurnDetectionKind.Disabled, null) + { } + + internal InternalRealtimeNoTurnDetection(TurnDetectionKind kind, IDictionary serializedAdditionalRawData) + : base(kind) + { } +} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAssistantMessageItem.cs b/src/Custom/Realtime/Internal/InternalRealtimeRequestAssistantMessageItem.cs similarity index 90% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAssistantMessageItem.cs rename to src/Custom/Realtime/Internal/InternalRealtimeRequestAssistantMessageItem.cs index 575e0b567..79ac6e02a 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAssistantMessageItem.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeRequestAssistantMessageItem.cs @@ -2,7 +2,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [CodeGenType("RealtimeRequestAssistantMessageItem")] [Experimental("OPENAI002")] @@ -16,7 +16,7 @@ public InternalRealtimeRequestAssistantMessageItem(IEnumerable Output { get; } + + [CodeGenMember("Modalities")] + internal IReadOnlyList Modalities { get; } + + [CodeGenMember("Voice")] + public ConversationVoice? Voice { get; } + + [CodeGenMember("OutputAudioFormat")] + public RealtimeAudioFormat? OutputAudioFormat { get; } +} diff --git a/src/Custom/Realtime/Internal/InternalRealtimeResponseAudioContentPart.cs b/src/Custom/Realtime/Internal/InternalRealtimeResponseAudioContentPart.cs new file mode 100644 index 000000000..76a79b208 --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeResponseAudioContentPart.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime; + +[CodeGenType("RealtimeResponseAudioContentPart")] +internal partial class InternalRealtimeResponseAudioContentPart : ConversationContentPart +{ + [CodeGenMember("Transcript")] + public string InternalTranscriptValue { get; } +} diff --git a/src/Custom/Realtime/Internal/InternalRealtimeResponseItem.cs b/src/Custom/Realtime/Internal/InternalRealtimeResponseItem.cs new file mode 100644 index 000000000..de48eb045 --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeResponseItem.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeConversationResponseItem")] +internal partial class InternalRealtimeResponseItem +{ + public string ResponseId + => (this as InternalRealtimeResponseMessageItem)?.ResponseId + ?? (this as InternalRealtimeResponseFunctionCallItem)?.ResponseId + ?? (this as InternalRealtimeResponseFunctionCallOutputItem)?.ResponseId; + + public ConversationMessageRole? MessageRole => + (this as InternalRealtimeResponseMessageItem)?.Role; + + public IReadOnlyList MessageContentParts => + (this as InternalRealtimeResponseMessageItem)?.Content; + + public string FunctionName + => (this as InternalRealtimeResponseFunctionCallItem)?.Name; + + public string FunctionCallId => + (this as InternalRealtimeResponseFunctionCallItem)?.CallId + ?? (this as InternalRealtimeResponseFunctionCallOutputItem)?.CallId; + + public string FunctionCallArguments => + (this as InternalRealtimeResponseFunctionCallItem)?.Arguments; + + public string FunctionCallOutput => + (this as InternalRealtimeResponseFunctionCallOutputItem)?.Output; +} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseMessageItem.cs b/src/Custom/Realtime/Internal/InternalRealtimeResponseMessageItem.cs similarity index 92% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseMessageItem.cs rename to src/Custom/Realtime/Internal/InternalRealtimeResponseMessageItem.cs index bdbf5c3e2..9437456ec 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseMessageItem.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeResponseMessageItem.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeResponseMessageItem")] diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseSession.cs b/src/Custom/Realtime/Internal/InternalRealtimeResponseSession.cs similarity index 78% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseSession.cs rename to src/Custom/Realtime/Internal/InternalRealtimeResponseSession.cs index 47ed82615..f1aa3169c 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseSession.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeResponseSession.cs @@ -4,12 +4,16 @@ using System.Text.Json; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeResponseSession")] internal partial class InternalRealtimeResponseSession { + // CUSTOM: Use a scenario-specific copy of the voice ID collection. + [CodeGenMember("Voice")] + internal ConversationVoice Voice { get; set; } + [CodeGenMember("MaxResponseOutputTokens")] private BinaryData _maxResponseOutputTokens; diff --git a/src/Custom/Realtime/Internal/InternalRealtimeResponseTextContentPart.cs b/src/Custom/Realtime/Internal/InternalRealtimeResponseTextContentPart.cs new file mode 100644 index 000000000..13d18528f --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeResponseTextContentPart.cs @@ -0,0 +1,11 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeResponseTextContentPart")] +internal partial class InternalRealtimeResponseTextContentPart +{ + [CodeGenMember("Text")] + public string InternalTextValue { get; } +} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioDelta.cs b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseAudioDelta.cs similarity index 75% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioDelta.cs rename to src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseAudioDelta.cs index 55a39446d..4da3b9798 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioDelta.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseAudioDelta.cs @@ -4,12 +4,12 @@ using System.Text.Json; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; /// /// The update (response command) of type response.audio.delta, which is received after correlated -/// (response.output_item.added), -/// (conversation.item.created), and +/// (response.output_item.added), +/// (conversation.item.created), and /// (response.content_part.added) commands that initialize /// an audio content part. This and other related delta events append audio data into the associated content part. /// diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs similarity index 93% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs rename to src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs index 161de4e31..95d0c5179 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs @@ -4,7 +4,7 @@ using System.Text.Json; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; /// /// The update (response command) of type response.audio_transcript.delta, which is received while populating diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs similarity index 97% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs rename to src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs index 863014fe3..f7d22934c 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseContentPartAdded.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; /// /// The update (response command) of type response.content_part.added, which is received when a response turn diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartDone.cs b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseContentPartDone.cs similarity index 97% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartDone.cs rename to src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseContentPartDone.cs index a453a2096..a7187c701 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseContentPartDone.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseContentPartDone.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; /// /// The update (response command) of type response.content_part.done, which is received when a response turn diff --git a/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs new file mode 100644 index 000000000..4d58bc910 --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.function_call_arguments.delta, which is received after correlated +/// (response.output_item.added) and +/// (conversation.item.created) commands that initialize +/// a conversation function call item. This and other related delta events append function arguments to the item as +/// incremental JSON. +/// +/// +/// Each delta payload only contains a small, incremental portion of the overall function call argument payload +/// and is not a valid JSON document on its own. For the complete JSON arguments, refer to +/// commands or +/// . Using this incremental JSON deltas requires the +/// use of a compatible, incremental parser. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventResponseFunctionCallArgumentsDelta")] +internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDelta +{ } diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs similarity index 95% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs rename to src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs index 886b38a3c..8469f7b72 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs @@ -4,7 +4,7 @@ using System.Text.Json; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; /// /// The update (response command) of type response.function_call_arguments.done, which is received after all diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseTextDelta.cs b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseTextDelta.cs similarity index 75% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseTextDelta.cs rename to src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseTextDelta.cs index 81f4225b9..2e8848c53 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseTextDelta.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeServerEventResponseTextDelta.cs @@ -4,12 +4,12 @@ using System.Text.Json; using System.Diagnostics.CodeAnalysis; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; /// /// The update (response command) of type response.text.delta, which is received after correlated -/// (response.output_item.added), -/// (conversation.item.created), and +/// (response.output_item.added), +/// (conversation.item.created), and /// (response.content_part.added) commands that initialize /// a text content part. This and other related delta events append text data into the associated content part. /// diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs b/src/Custom/Realtime/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs similarity index 97% rename from src/Custom/RealtimeConversation/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs rename to src/Custom/Realtime/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs index f80db65eb..b2d5895b9 100644 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs +++ b/src/Custom/Realtime/Internal/InternalRealtimeServerVadTurnDetection.Serialization.cs @@ -4,7 +4,7 @@ using System.Diagnostics.CodeAnalysis; using System.Text.Json; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeServerVadTurnDetection")] diff --git a/src/Custom/Realtime/Internal/InternalRealtimeTranscriptionSessionCreateResponse.Serialization.cs b/src/Custom/Realtime/Internal/InternalRealtimeTranscriptionSessionCreateResponse.Serialization.cs new file mode 100644 index 000000000..1135de903 --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeTranscriptionSessionCreateResponse.Serialization.cs @@ -0,0 +1,19 @@ +using System.ClientModel.Primitives; +using System.Runtime.CompilerServices; +using System.Text.Json; + +namespace OpenAI.Realtime; + +[CodeGenSerialization(nameof(InputAudioFormat), DeserializationValueHook = nameof(DeserializeInputAudioFormatValue), SerializationValueHook = nameof(SerializeInputAudioFormatValue))] +internal partial class InternalRealtimeTranscriptionSessionCreateResponse +{ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void SerializeInputAudioFormatValue(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => writer.WriteStringValue(InputAudioFormat.ToString()); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void DeserializeInputAudioFormatValue(JsonProperty property, ref RealtimeAudioFormat inputAudioFormat, ModelReaderWriterOptions options = null) + { + inputAudioFormat = new(property.Value.GetString()); + } +} diff --git a/src/Custom/Realtime/Internal/InternalRealtimeTranscriptionSessionCreateResponse.cs b/src/Custom/Realtime/Internal/InternalRealtimeTranscriptionSessionCreateResponse.cs new file mode 100644 index 000000000..e8e033686 --- /dev/null +++ b/src/Custom/Realtime/Internal/InternalRealtimeTranscriptionSessionCreateResponse.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.audio.delta, which is received after correlated +/// (response.output_item.added), +/// (conversation.item.created), and +/// (response.content_part.added) commands that initialize +/// an audio content part. This and other related delta events append audio data into the associated content part. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeTranscriptionSessionCreateResponse")] +internal partial class InternalRealtimeTranscriptionSessionCreateResponse +{ + public InternalRealtimeTranscriptionSessionCreateResponseClientSecret ClientSecret { get; } + + [CodeGenMember("Modalities")] + public IList Modalities { get; } + + public RealtimeAudioFormat InputAudioFormat { get; } + + public InputTranscriptionOptions InputAudioTranscription { get; } + + public TurnDetectionOptions TurnDetection { get; } +} diff --git a/src/Custom/RealtimeConversation/Internal/WebsocketPipelineResponse.cs b/src/Custom/Realtime/Internal/WebsocketPipelineResponse.cs similarity index 98% rename from src/Custom/RealtimeConversation/Internal/WebsocketPipelineResponse.cs rename to src/Custom/Realtime/Internal/WebsocketPipelineResponse.cs index 31935f243..e1b1119bd 100644 --- a/src/Custom/RealtimeConversation/Internal/WebsocketPipelineResponse.cs +++ b/src/Custom/Realtime/Internal/WebsocketPipelineResponse.cs @@ -6,7 +6,7 @@ using System.Threading; using System.Threading.Tasks; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; /// /// Represents a encapsulating the data from a WebSocket response message. diff --git a/src/Custom/Realtime/RealtimeClient.Protocol.cs b/src/Custom/Realtime/RealtimeClient.Protocol.cs new file mode 100644 index 000000000..087f1ede1 --- /dev/null +++ b/src/Custom/Realtime/RealtimeClient.Protocol.cs @@ -0,0 +1,78 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.ComponentModel; +using System.Threading.Tasks; + +namespace OpenAI.Realtime; + +[CodeGenSuppress("StartRealtimeSessionAsync", typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("StartRealtimeSession", typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("CreateStartRealtimeSessionRequest", typeof(BinaryContent), typeof(RequestOptions))] +public partial class RealtimeClient +{ + /// + /// [Protocol Method] + /// Creates a new realtime conversation operation instance, establishing a connection to the /realtime endpoint. + /// + /// + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task StartConversationSessionAsync(string model, RequestOptions options) + { + Argument.AssertNotNull(model, nameof(model)); + return await StartSessionAsync(model, intent: null, options).ConfigureAwait(false); + } + + /// + /// [Protocol Method] + /// Creates a new realtime transcription operation instance, establishing a connection to the /realtime endpoint. + /// + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual Task StartTranscriptionSessionAsync(RequestOptions options) + => StartSessionAsync(model: null, intent: "transcription", options); + + /// + /// [Protocol Method] + /// Creates a new realtime operation instance, establishing a connection to the /realtime endpoint. + /// + /// + /// + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task StartSessionAsync(string model, string intent, RequestOptions options) + { + Uri fullEndpoint = BuildSessionEndpoint(_baseEndpoint, model, intent); + RealtimeSession provisionalSession = new(this, fullEndpoint, _credential); + try + { + await provisionalSession.ConnectAsync(options).ConfigureAwait(false); + RealtimeSession result = provisionalSession; + provisionalSession = null; + return result; + } + finally + { + provisionalSession?.Dispose(); + } + } + + private static Uri BuildSessionEndpoint(Uri baseEndpoint, string model, string intent) + { + ClientUriBuilder builder = new(); + builder.Reset(baseEndpoint); + if (!string.IsNullOrEmpty(model)) + { + builder.AppendQuery("model", model, escape: true); + } + if (!string.IsNullOrEmpty(intent)) + { + builder.AppendQuery("intent", intent, escape: true); + } + return builder.ToUri(); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/RealtimeClient.cs b/src/Custom/Realtime/RealtimeClient.cs new file mode 100644 index 000000000..3d0174097 --- /dev/null +++ b/src/Custom/Realtime/RealtimeClient.cs @@ -0,0 +1,150 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Threading; +using System.Threading.Tasks; + +namespace OpenAI.Realtime; + +[CodeGenType("Realtime")] +[CodeGenSuppress("CreateEphemeralToken", typeof(InternalRealtimeSessionCreateRequest), typeof(CancellationToken))] +[CodeGenSuppress("CreateEphemeralTokenAsync", typeof(InternalRealtimeSessionCreateRequest), typeof(CancellationToken))] +[CodeGenSuppress("CreateEphemeralTranscriptionToken", typeof(TranscriptionSessionOptions), typeof(CancellationToken))] +[CodeGenSuppress("CreateEphemeralTranscriptionTokenAsync", typeof(TranscriptionSessionOptions), typeof(CancellationToken))] +[CodeGenSuppress("StartRealtimeSession", typeof(IEnumerable), typeof(CancellationToken))] +[CodeGenSuppress("StartRealtimeSessionAsync", typeof(IEnumerable), typeof(CancellationToken))] +[Experimental("OPENAI002")] +public partial class RealtimeClient +{ + public event EventHandler OnSendingCommand; + public event EventHandler OnReceivingCommand; + + private readonly ApiKeyCredential _credential; + private readonly Uri _baseEndpoint; + + /// + /// Creates a new instance of using an API key for authentication. + /// + /// The API key to use for authentication. + public RealtimeClient(ApiKeyCredential credential) : this(credential, new OpenAIClientOptions()) + { + } + + /// + /// Creates a new instance of using an API key for authentication. + /// + /// The API key to use for authentication. + /// Additional options for configuring the client. + public RealtimeClient(ApiKeyCredential credential, OpenAIClientOptions options) + { + Argument.AssertNotNull(credential, nameof(credential)); + Argument.AssertNotNull(options, nameof(options)); + + _credential = credential; + _baseEndpoint = GetBaseEndpoint(options); + } + + protected internal RealtimeClient(ClientPipeline pipeline, OpenAIClientOptions options) + { + throw new NotImplementedException("Pipeline-based initialization of WS-based client not available"); + } + + /// + /// Starts a new for multimodal conversation. + /// + /// + /// The abstracts bidirectional communication between the caller and service, + /// simultaneously sending and receiving WebSocket messages. + /// + /// + /// The model that the session should use for new conversation items. + /// + /// + /// A new, connected instance of with default configuration. + public virtual async Task StartConversationSessionAsync( + string model, + CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(model, nameof(model)); + + RequestOptions cancellationOptions = cancellationToken.ToRequestOptions(); + RealtimeSession newOperation = await StartConversationSessionAsync(model, cancellationOptions).ConfigureAwait(false); + return newOperation; + } + + /// + /// Starts a new for multimodal conversation. + /// + /// + /// The abstracts bidirectional communication between the caller and service, + /// simultaneously sending and receiving WebSocket messages. + /// + /// + /// The model that the session should use for new conversation items. + /// + /// + /// A new, connected instance of with default configuration. + public RealtimeSession StartConversationSession(string model, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(model, nameof(model)); + + return StartConversationSessionAsync(model, cancellationToken).ConfigureAwait(false).GetAwaiter().GetResult(); + } + + /// + /// Starts a new for audio transcription. + /// + /// + /// The abstracts bidirectional communication between the caller and service, + /// simultaneously sending and receiving WebSocket messages. + /// + /// + /// A new, connected instance of with default configuration. + public virtual async Task StartTranscriptionSessionAsync( + CancellationToken cancellationToken = default) + { + RequestOptions cancellationOptions = cancellationToken.ToRequestOptions(); + RealtimeSession newOperation = await StartTranscriptionSessionAsync(cancellationOptions).ConfigureAwait(false); + return newOperation; + } + + /// + /// Starts a new for audio transcription. + /// + /// + /// The abstracts bidirectional communication between the caller and service, + /// simultaneously sending and receiving WebSocket messages. + /// + /// + /// A new, connected instance of with default configuration. + public RealtimeSession StartTranscriptionSession(CancellationToken cancellationToken = default) + { + return StartTranscriptionSessionAsync(cancellationToken).ConfigureAwait(false).GetAwaiter().GetResult(); + } + + private static Uri GetBaseEndpoint(OpenAIClientOptions options) + { + UriBuilder uriBuilder = new(options?.Endpoint ?? new("https://api.openai.com/v1")); + uriBuilder.Scheme = uriBuilder.Scheme.ToLowerInvariant() switch + { + "http" => "ws", + "https" => "wss", + _ => uriBuilder.Scheme + }; + uriBuilder.Query = ""; + if (!uriBuilder.Path.EndsWith("/realtime")) + { + uriBuilder.Path += uriBuilder.Path[uriBuilder.Path.Length - 1] == '/' ? "realtime" : "/realtime"; + } + + return uriBuilder.Uri; + } + + internal void RaiseOnSendingCommand(T session, BinaryData data) + => OnSendingCommand?.Invoke(session, data); + + internal void RaiseOnReceivingCommand(T session, BinaryData data) + => OnReceivingCommand?.Invoke(session, data); +} \ No newline at end of file diff --git a/src/Custom/Realtime/RealtimeContentModalities.Serialization.cs b/src/Custom/Realtime/RealtimeContentModalities.Serialization.cs new file mode 100644 index 000000000..55507e232 --- /dev/null +++ b/src/Custom/Realtime/RealtimeContentModalities.Serialization.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +internal static partial class RealtimeContentModalitiesExtensions +{ + internal static IList ToInternalModalities(this RealtimeContentModalities modalities) + { + ChangeTrackingList internalModalities = new(); + if (modalities.HasFlag(RealtimeContentModalities.Text)) + { + internalModalities.Add(InternalRealtimeRequestSessionModality.Text); + } + if (modalities.HasFlag(RealtimeContentModalities.Audio)) + { + internalModalities.Add(InternalRealtimeRequestSessionModality.Audio); + } + return internalModalities; + } + + internal static RealtimeContentModalities FromInternalModalities(IEnumerable internalModalities) + { + RealtimeContentModalities result = 0; + foreach (InternalRealtimeRequestSessionModality internalModality in internalModalities ?? []) + { + if (internalModality == InternalRealtimeRequestSessionModality.Text) + { + result |= RealtimeContentModalities.Text; + } + else if (internalModality == InternalRealtimeRequestSessionModality.Audio) + { + result |= RealtimeContentModalities.Audio; + } + } + return result; + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/RealtimeContentModalities.cs b/src/Custom/Realtime/RealtimeContentModalities.cs new file mode 100644 index 000000000..8794c897c --- /dev/null +++ b/src/Custom/Realtime/RealtimeContentModalities.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[Flags] +public enum RealtimeContentModalities : int +{ + Default = 0, + Text = 1 << 0, + Audio = 1 << 1, +} \ No newline at end of file diff --git a/src/Custom/Realtime/RealtimeItem.cs b/src/Custom/Realtime/RealtimeItem.cs new file mode 100644 index 000000000..c3a8bc663 --- /dev/null +++ b/src/Custom/Realtime/RealtimeItem.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeConversationRequestItem")] +public partial class RealtimeItem +{ + public string FunctionCallId => (this as InternalRealtimeRequestFunctionCallItem)?.CallId; + public string FunctionName => (this as InternalRealtimeRequestFunctionCallItem)?.Name; + public string FunctionArguments => (this as InternalRealtimeRequestFunctionCallItem)?.Arguments; + + public IReadOnlyList MessageContentParts + => (this as InternalRealtimeRequestAssistantMessageItem)?.Content.ToList().AsReadOnly() + ?? (this as InternalRealtimeRequestSystemMessageItem)?.Content?.ToList().AsReadOnly() + ?? (this as InternalRealtimeRequestUserMessageItem)?.Content?.ToList().AsReadOnly(); + public ConversationMessageRole? MessageRole + => (this as InternalRealtimeRequestMessageItem)?.Role; + + public static RealtimeItem CreateUserMessage(IEnumerable contentItems) + { + return new InternalRealtimeRequestUserMessageItem(contentItems); + } + + public static RealtimeItem CreateSystemMessage(IEnumerable contentItems) + { + return new InternalRealtimeRequestSystemMessageItem(contentItems); + } + + public static RealtimeItem CreateAssistantMessage(IEnumerable contentItems) + { + return new InternalRealtimeRequestAssistantMessageItem(contentItems); + } + + public static RealtimeItem CreateFunctionCall(string name, string callId, string arguments) + { + return new InternalRealtimeRequestFunctionCallItem(name, callId, arguments); + } + + public static RealtimeItem CreateFunctionCallOutput(string callId, string output) + { + return new InternalRealtimeRequestFunctionCallOutputItem(callId, output); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/RealtimeSession.Protocol.cs b/src/Custom/Realtime/RealtimeSession.Protocol.cs new file mode 100644 index 000000000..c53fd6237 --- /dev/null +++ b/src/Custom/Realtime/RealtimeSession.Protocol.cs @@ -0,0 +1,103 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.ComponentModel; +using System.Net.WebSockets; +using System.Threading; +using System.Threading.Tasks; + +namespace OpenAI.Realtime; + +public partial class RealtimeSession +{ + private readonly SemaphoreSlim _clientSendSemaphore = new(initialCount: 1, maxCount: 1); + private readonly object _singleReceiveLock = new(); + private AsyncWebsocketMessageCollectionResult _receiveCollectionResult; + + /// + /// Initializes an underlying instance for communication with the /realtime endpoint and + /// then connects to the service using this socket. + /// + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + protected internal virtual async Task ConnectAsync(RequestOptions options) + { + WebSocket?.Dispose(); + _credential.Deconstruct(out string dangerousCredential); + ClientWebSocket clientWebSocket = new(); + clientWebSocket.Options.AddSubProtocol("realtime"); + clientWebSocket.Options.SetRequestHeader("openai-beta", $"realtime=v1"); + clientWebSocket.Options.SetRequestHeader("Authorization", $"Bearer {dangerousCredential}"); + + await clientWebSocket.ConnectAsync(_endpoint, options?.CancellationToken ?? default) + .ConfigureAwait(false); + + WebSocket = clientWebSocket; + } + + [EditorBrowsable(EditorBrowsableState.Never)] + protected internal virtual void Connect(RequestOptions options) + { + ConnectAsync(options).Wait(); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async Task SendCommandAsync(BinaryData data, RequestOptions options) + { + Argument.AssertNotNull(data, nameof(data)); + + _parentClient?.RaiseOnSendingCommand(this, data); + + ArraySegment messageBytes = new(data.ToArray()); + + CancellationToken cancellationToken = options?.CancellationToken ?? default; + + await _clientSendSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); + try + { + await WebSocket.SendAsync( + messageBytes, + WebSocketMessageType.Text, // TODO: extensibility for binary messages -- via "content"? + endOfMessage: true, + cancellationToken) + .ConfigureAwait(false); + } + finally + { + _clientSendSemaphore.Release(); + } + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual void SendCommand(BinaryData data, RequestOptions options) + { + // ClientWebSocket does **not** include a synchronous Send() + SendCommandAsync(data, options).ConfigureAwait(false).GetAwaiter().GetResult(); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual async IAsyncEnumerable ReceiveUpdatesAsync(RequestOptions options) + { + lock (_singleReceiveLock) + { + _receiveCollectionResult ??= new(WebSocket, options?.CancellationToken ?? default); + } + await foreach (ClientResult result in _receiveCollectionResult) + { + BinaryData incomingMessage = result?.GetRawResponse()?.Content; + if (incomingMessage is not null) + { + _parentClient?.RaiseOnReceivingCommand(this, incomingMessage); + } + yield return result; + } + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual IEnumerable ReceiveUpdates(RequestOptions options) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/RealtimeSession.cs b/src/Custom/Realtime/RealtimeSession.cs new file mode 100644 index 000000000..e2a1e9eff --- /dev/null +++ b/src/Custom/Realtime/RealtimeSession.cs @@ -0,0 +1,393 @@ +using System; +using System.Buffers; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Net.WebSockets; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +public partial class RealtimeSession : IDisposable +{ + public WebSocket WebSocket { get; protected set; } + + private readonly RealtimeClient _parentClient; + private readonly Uri _endpoint; + private readonly ApiKeyCredential _credential; + private readonly SemaphoreSlim _audioSendSemaphore = new(1, 1); + private bool _isSendingAudioStream = false; + + internal bool ShouldBufferTurnResponseData { get; set; } + + protected internal RealtimeSession( + RealtimeClient parentClient, + Uri endpoint, + ApiKeyCredential credential) + { + Argument.AssertNotNull(endpoint, nameof(endpoint)); + Argument.AssertNotNull(credential, nameof(credential)); + + _parentClient = parentClient; + _endpoint = endpoint; + _credential = credential; + } + + /// + /// Transmits audio data from a stream, ending the client turn once the stream is complete. + /// + /// The audio stream to transmit. + /// An optional cancellation token. + /// + public virtual async Task SendInputAudioAsync(Stream audio, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(audio, nameof(audio)); + using (await _audioSendSemaphore.AutoReleaseWaitAsync(cancellationToken).ConfigureAwait(false)) + { + if (_isSendingAudioStream) + { + throw new InvalidOperationException($"Only one stream of audio may be sent at once."); + } + _isSendingAudioStream = true; + } + + byte[] buffer = null; + try + { + buffer = ArrayPool.Shared.Rent(1024 * 16); + while (true) + { + int bytesRead = await audio.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false); + if (bytesRead == 0) + { + break; + } + + ReadOnlyMemory audioMemory = buffer.AsMemory(0, bytesRead); + BinaryData audioData = BinaryData.FromBytes(audioMemory); + InternalRealtimeClientEventInputAudioBufferAppend internalCommand = new(audioData); + BinaryData requestData = ModelReaderWriter.Write(internalCommand); + await SendCommandAsync(requestData, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + } + } + finally + { + if (buffer is not null) + { + ArrayPool.Shared.Return(buffer); + } + using (await _audioSendSemaphore.AutoReleaseWaitAsync(cancellationToken).ConfigureAwait(false)) + { + _isSendingAudioStream = false; + } + } + } + + public virtual void SendInputAudio(Stream audio, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(audio, nameof(audio)); + using (_audioSendSemaphore.AutoReleaseWait(cancellationToken)) + { + if (_isSendingAudioStream) + { + throw new InvalidOperationException($"Only one stream of audio may be sent at once."); + } + _isSendingAudioStream = true; + } + + byte[] buffer = null; + try + { + buffer = ArrayPool.Shared.Rent(1024 * 16); + while (true) + { + int bytesRead = audio.Read(buffer, 0, buffer.Length); + if (bytesRead == 0) + { + break; + } + + ReadOnlyMemory audioMemory = buffer.AsMemory(0, bytesRead); + BinaryData audioData = BinaryData.FromBytes(audioMemory); + InternalRealtimeClientEventInputAudioBufferAppend internalCommand = new(audioData); + BinaryData requestData = ModelReaderWriter.Write(internalCommand); + SendCommand(requestData, cancellationToken.ToRequestOptions()); + } + } + finally + { + if (buffer is not null) + { + ArrayPool.Shared.Return(buffer); + } + using (_audioSendSemaphore.AutoReleaseWait(cancellationToken)) + { + _isSendingAudioStream = false; + } + } + } + + /// + /// Transmits a single chunk of audio. + /// + /// + /// + /// + /// + public virtual async Task SendInputAudioAsync(BinaryData audio, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(audio, nameof(audio)); + using (await _audioSendSemaphore.AutoReleaseWaitAsync(cancellationToken).ConfigureAwait(false)) + { + if (_isSendingAudioStream) + { + throw new InvalidOperationException($"Cannot send a standalone audio chunk while a stream is already in progress."); + } + // TODO: consider automatically limiting/breaking size of chunk (as with streaming) + InternalRealtimeClientEventInputAudioBufferAppend internalCommand = new(audio); + BinaryData requestData = ModelReaderWriter.Write(internalCommand); + await SendCommandAsync(requestData, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + } + } + + /// + /// Transmits a single chunk of audio. + /// + /// + /// + /// + /// + public virtual void SendInputAudio(BinaryData audio, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(audio, nameof(audio)); + using (_audioSendSemaphore.AutoReleaseWait(cancellationToken)) + { + if (_isSendingAudioStream) + { + throw new InvalidOperationException($"Cannot send a standalone audio chunk while a stream is already in progress."); + } + // TODO: consider automatically limiting/breaking size of chunk (as with streaming) + InternalRealtimeClientEventInputAudioBufferAppend internalCommand = new(audio); + BinaryData requestData = ModelReaderWriter.Write(internalCommand); + SendCommand(requestData, cancellationToken.ToRequestOptions()); + } + } + + public virtual async Task ClearInputAudioAsync(CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventInputAudioBufferClear internalCommand = new(); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void ClearInputAudio(CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventInputAudioBufferClear internalCommand = new(); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task ConfigureConversationSessionAsync(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(sessionOptions, nameof(sessionOptions)); + InternalRealtimeClientEventSessionUpdate internalCommand = new(sessionOptions); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void ConfigureSession(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(sessionOptions, nameof(sessionOptions)); + InternalRealtimeClientEventSessionUpdate internalCommand = new(sessionOptions); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task ConfigureTranscriptionSessionAsync(TranscriptionSessionOptions sessionOptions, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(sessionOptions, nameof(sessionOptions)); + InternalRealtimeClientEventTranscriptionSessionUpdate internalCommand = new(sessionOptions); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void ConfigureTranscriptionSession(TranscriptionSessionOptions sessionOptions, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(sessionOptions, nameof(sessionOptions)); + InternalRealtimeClientEventTranscriptionSessionUpdate internalCommand = new(sessionOptions); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task AddItemAsync(RealtimeItem item, CancellationToken cancellationToken = default) + => await AddItemAsync(item, previousItemId: null, cancellationToken).ConfigureAwait(false); + + public virtual void AddItem(RealtimeItem item, CancellationToken cancellationToken = default) + => AddItem(item, previousItemId: null, cancellationToken); + + public virtual async Task AddItemAsync(RealtimeItem item, string previousItemId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(item, nameof(item)); + InternalRealtimeClientEventConversationItemCreate internalCommand = new(item) + { + PreviousItemId = previousItemId, + }; + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void AddItem(RealtimeItem item, string previousItemId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(item, nameof(item)); + InternalRealtimeClientEventConversationItemCreate internalCommand = new(item) + { + PreviousItemId = previousItemId, + }; + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task RequestItemRetrievalAsync(string itemId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(itemId, nameof(itemId)); + InternalRealtimeClientEventConversationItemRetrieve internalCommand = new(itemId); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void RequestItemRetrieval(string itemId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(itemId, nameof(itemId)); + InternalRealtimeClientEventConversationItemRetrieve internalCommand = new(itemId); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task DeleteItemAsync(string itemId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(itemId, nameof(itemId)); + InternalRealtimeClientEventConversationItemDelete internalCommand = new(itemId); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void DeleteItem(string itemId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(itemId, nameof(itemId)); + InternalRealtimeClientEventConversationItemDelete internalCommand = new(itemId); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task TruncateItemAsync(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(itemId, nameof(itemId)); + InternalRealtimeClientEventConversationItemTruncate internalCommand = new( + itemId: itemId, + contentIndex: contentPartIndex, + audioEndMs: (int)audioDuration.TotalMilliseconds); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void TruncateItem(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(itemId, nameof(itemId)); + InternalRealtimeClientEventConversationItemTruncate internalCommand = new( + itemId: itemId, + contentIndex: contentPartIndex, + audioEndMs: (int)audioDuration.TotalMilliseconds); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task CommitPendingAudioAsync(CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventInputAudioBufferCommit internalCommand = new(); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void CommitPendingAudio(CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventInputAudioBufferCommit internalCommand = new(); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task InterruptResponseAsync(CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventResponseCancel internalCommand = new(); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void InterruptResponse(CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventResponseCancel internalCommand = new(); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async Task StartResponseAsync(ConversationResponseOptions options, CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventResponseCreate internalCommand = new( + kind: InternalRealtimeClientEventType.ResponseCreate, + eventId: null, + additionalBinaryDataProperties: null, + response: options); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + public virtual async Task StartResponseAsync(CancellationToken cancellationToken = default) + { + await StartResponseAsync(new ConversationResponseOptions(), cancellationToken).ConfigureAwait(false); + } + + public virtual void StartResponse(ConversationResponseOptions options, CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventResponseCreate internalCommand = new( + kind: InternalRealtimeClientEventType.ResponseCreate, + eventId: null, + additionalBinaryDataProperties: null, + response: options); + SendCommand(internalCommand, cancellationToken); + } + + public void StartResponse(CancellationToken cancellationToken = default) + { + StartResponse(new ConversationResponseOptions(), cancellationToken); + } + + public virtual async Task CancelResponseAsync(CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventResponseCancel internalCommand = new(); + await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); + } + + public virtual void CancelResponse(CancellationToken cancellationToken = default) + { + InternalRealtimeClientEventResponseCancel internalCommand = new(); + SendCommand(internalCommand, cancellationToken); + } + + public virtual async IAsyncEnumerable ReceiveUpdatesAsync([EnumeratorCancellation] CancellationToken cancellationToken = default) + { + await foreach (ClientResult protocolEvent in ReceiveUpdatesAsync(cancellationToken.ToRequestOptions())) + { + using PipelineResponse response = protocolEvent.GetRawResponse(); + RealtimeUpdate nextUpdate = ModelReaderWriter.Read(response.Content); + yield return nextUpdate; + } + } + + public virtual IEnumerable ReceiveUpdates(CancellationToken cancellationToken = default) + { + throw new NotImplementedException(); + } + + internal virtual async Task SendCommandAsync(InternalRealtimeClientEvent command, CancellationToken cancellationToken = default) + { + BinaryData requestData = ModelReaderWriter.Write(command); + RequestOptions cancellationOptions = cancellationToken.ToRequestOptions(); + await SendCommandAsync(requestData, cancellationOptions).ConfigureAwait(false); + } + + internal virtual void SendCommand(InternalRealtimeClientEvent command, CancellationToken cancellationToken = default) + { + BinaryData requestData = ModelReaderWriter.Write(command); + RequestOptions cancellationOptions = cancellationToken.ToRequestOptions(); + SendCommand(requestData, cancellationOptions); + } + + public void Dispose() + { + WebSocket?.Dispose(); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/RealtimeUpdate.Serialization.cs b/src/Custom/Realtime/RealtimeUpdate.Serialization.cs new file mode 100644 index 000000000..a92286d0e --- /dev/null +++ b/src/Custom/Realtime/RealtimeUpdate.Serialization.cs @@ -0,0 +1,22 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class RealtimeUpdate : IJsonModel + { + public static explicit operator RealtimeUpdate(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeRealtimeUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); + } + } +} diff --git a/src/Custom/RealtimeConversation/ResponseConversationSelection.cs b/src/Custom/Realtime/ResponseConversationSelection.cs similarity index 89% rename from src/Custom/RealtimeConversation/ResponseConversationSelection.cs rename to src/Custom/Realtime/ResponseConversationSelection.cs index 1f0c306bc..c2afbd7a6 100644 --- a/src/Custom/RealtimeConversation/ResponseConversationSelection.cs +++ b/src/Custom/Realtime/ResponseConversationSelection.cs @@ -5,7 +5,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; -namespace OpenAI.RealtimeConversation; +namespace OpenAI.Realtime; [Experimental("OPENAI002")] [CodeGenType("RealtimeResponseCreateParamsConversation")] diff --git a/src/Custom/Realtime/Streaming/ConversationSessionConfiguredUpdate.cs b/src/Custom/Realtime/Streaming/ConversationSessionConfiguredUpdate.cs new file mode 100644 index 000000000..abe5d4181 --- /dev/null +++ b/src/Custom/Realtime/Streaming/ConversationSessionConfiguredUpdate.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type session.updated, which is received when a preceding +/// session.update request command +/// () +/// has been applied to the session. New session configuration related to response generation will not take effect +/// until the next response; shared session configuration, such as input audio format, will apply immediately. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventSessionUpdated")] +public partial class ConversationSessionConfiguredUpdate +{ + [CodeGenMember("Session")] + internal readonly InternalRealtimeResponseSession _internalSession; + + public string SessionId => _internalSession.Id; + + public string Model => _internalSession.Model; + + public RealtimeContentModalities ContentModalities + => RealtimeContentModalitiesExtensions.FromInternalModalities(_internalSession.Modalities); + + public string Instructions => _internalSession.Instructions; + + public ConversationVoice Voice => _internalSession.Voice; + + public RealtimeAudioFormat InputAudioFormat => _internalSession.InputAudioFormat; + public RealtimeAudioFormat OutputAudioFormat => _internalSession.OutputAudioFormat; + + public InputTranscriptionOptions InputTranscriptionOptions => _internalSession.InputAudioTranscription; + public TurnDetectionOptions TurnDetectionOptions => _internalSession.TurnDetection; + public IReadOnlyList Tools => [ .. _internalSession.Tools ]; + public ConversationToolChoice ToolChoice => ConversationToolChoice.FromBinaryData(_internalSession.ToolChoice); + public float Temperature => _internalSession.Temperature; + public ConversationMaxTokensChoice MaxOutputTokens => _internalSession.MaxResponseOutputTokens; +} diff --git a/src/Custom/Realtime/Streaming/ConversationSessionStartedUpdate.cs b/src/Custom/Realtime/Streaming/ConversationSessionStartedUpdate.cs new file mode 100644 index 000000000..a1a3beff0 --- /dev/null +++ b/src/Custom/Realtime/Streaming/ConversationSessionStartedUpdate.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type session.created, which is received when a new session has been +/// established. This is typically received immediately following connection and the session properties reflect +/// the initial, default state of the session. Configuration changes can be made via the session.update request +/// command +/// (). +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventSessionCreated")] +public partial class ConversationSessionStartedUpdate +{ + [CodeGenMember("Session")] + internal readonly InternalRealtimeResponseSession _internalSession; + + public string SessionId => _internalSession.Id; + + public string Model => _internalSession.Model; + + public RealtimeContentModalities ContentModalities + => RealtimeContentModalitiesExtensions.FromInternalModalities(_internalSession.Modalities); + + public string Instructions => _internalSession.Instructions; + + public ConversationVoice Voice => _internalSession.Voice; + + public RealtimeAudioFormat InputAudioFormat => _internalSession.InputAudioFormat; + public RealtimeAudioFormat OutputAudioFormat => _internalSession.OutputAudioFormat; + + public InputTranscriptionOptions InputTranscriptionOptions => _internalSession.InputAudioTranscription; + public TurnDetectionOptions TurnDetectionOptions => _internalSession.TurnDetection; + public IReadOnlyList Tools => [ .. _internalSession.Tools ]; + public ConversationToolChoice ToolChoice => ConversationToolChoice.FromBinaryData(_internalSession.ToolChoice); + public float Temperature => _internalSession.Temperature; + public ConversationMaxTokensChoice MaxOutputTokens => _internalSession.MaxResponseOutputTokens; +} diff --git a/src/Custom/Realtime/Streaming/InputAudioClearedUpdate.cs b/src/Custom/Realtime/Streaming/InputAudioClearedUpdate.cs new file mode 100644 index 000000000..ffedaf2fa --- /dev/null +++ b/src/Custom/Realtime/Streaming/InputAudioClearedUpdate.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type input_audio_buffer.cleared, which is received when a preceding +/// input_audio_buffer.clear command +/// ( has completed +/// purging the user audio input buffer. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventInputAudioBufferCleared")] +public partial class InputAudioClearedUpdate +{ } diff --git a/src/Custom/Realtime/Streaming/InputAudioCommittedUpdate.cs b/src/Custom/Realtime/Streaming/InputAudioCommittedUpdate.cs new file mode 100644 index 000000000..b278a6378 --- /dev/null +++ b/src/Custom/Realtime/Streaming/InputAudioCommittedUpdate.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type input_audio_buffer.committed, which is received when a preceding +/// input_audio_buffer.commit command +/// ( has +/// completed submission of the user audio input buffer. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventInputAudioBufferCommitted")] +public partial class InputAudioCommittedUpdate +{ } diff --git a/src/Custom/Realtime/Streaming/InputAudioSpeechFinishedUpdate.cs b/src/Custom/Realtime/Streaming/InputAudioSpeechFinishedUpdate.cs new file mode 100644 index 000000000..c8429c8b1 --- /dev/null +++ b/src/Custom/Realtime/Streaming/InputAudioSpeechFinishedUpdate.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type input_audio_buffer.speech_stopped, which is received when a configured +/// server_vad turn_detection (including the default) detects the end of evaluated human speech +/// within the input audio buffer. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventInputAudioBufferSpeechStopped")] +public partial class InputAudioSpeechFinishedUpdate +{ + [CodeGenMember("AudioEndMs")] + private readonly int _audioEndMs; + + public TimeSpan AudioEndTime => _audioEndTime ??= TimeSpan.FromMilliseconds(_audioEndMs); + private TimeSpan? _audioEndTime; +} diff --git a/src/Custom/Realtime/Streaming/InputAudioSpeechStartedUpdate.cs b/src/Custom/Realtime/Streaming/InputAudioSpeechStartedUpdate.cs new file mode 100644 index 000000000..99a882a07 --- /dev/null +++ b/src/Custom/Realtime/Streaming/InputAudioSpeechStartedUpdate.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type input_audio_buffer.speech_started, which is received when a configured +/// server_vad turn_detection (including the default) processes the end of evaluated human speech +/// within the input audio buffer. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventInputAudioBufferSpeechStarted")] +public partial class InputAudioSpeechStartedUpdate +{ + [CodeGenMember("AudioStartMs")] + private readonly int _audioStartMs; + + public TimeSpan AudioStartTime => _audioStartTime ??= TimeSpan.FromMilliseconds(_audioStartMs); + private TimeSpan? _audioStartTime; +} diff --git a/src/Custom/Realtime/Streaming/InputAudioTranscriptionDeltaUpdate.cs b/src/Custom/Realtime/Streaming/InputAudioTranscriptionDeltaUpdate.cs new file mode 100644 index 000000000..a2e0b2feb --- /dev/null +++ b/src/Custom/Realtime/Streaming/InputAudioTranscriptionDeltaUpdate.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; +using OpenAI.Internal; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type conversation.item.input_audio_transcription.delta, which is received +/// when a problem is encountered while processing transcription of the user audio input buffer via configured +/// (input_audio_transcription in session.update) +/// settings. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionDelta")] +public partial class InputAudioTranscriptionDeltaUpdate +{ + private IList Logprobs { get; } +} \ No newline at end of file diff --git a/src/Custom/Realtime/Streaming/InputAudioTranscriptionFailedUpdate.cs b/src/Custom/Realtime/Streaming/InputAudioTranscriptionFailedUpdate.cs new file mode 100644 index 000000000..5061a4a8e --- /dev/null +++ b/src/Custom/Realtime/Streaming/InputAudioTranscriptionFailedUpdate.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type conversation.item.input_audio_transcription.failed, which is received +/// when a problem is encountered while processing transcription of the user audio input buffer via configured +/// (input_audio_transcription in session.update) +/// settings. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionFailed")] +public partial class InputAudioTranscriptionFailedUpdate +{ + [CodeGenMember("Error")] + private readonly InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError _error; + + public string ErrorCode => _error?.Code; + public string ErrorMessage => _error?.Message; + public string ErrorParameterName => _error?.Param; +} \ No newline at end of file diff --git a/src/Custom/Realtime/Streaming/InputAudioTranscriptionFinishedUpdate.cs b/src/Custom/Realtime/Streaming/InputAudioTranscriptionFinishedUpdate.cs new file mode 100644 index 000000000..b0dc99c18 --- /dev/null +++ b/src/Custom/Realtime/Streaming/InputAudioTranscriptionFinishedUpdate.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; +using OpenAI.Internal; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type conversation.item.input_audio_transcription.completed, which is +/// received when a configured input_audio_transcription has completed its parallel processing of the user +/// audio input buffer. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionCompleted")] +public partial class InputAudioTranscriptionFinishedUpdate +{ + // CUSTOM: Internal pending projeted exposure + internal IList Logprobs { get; } +} diff --git a/src/Custom/Realtime/Streaming/ItemCreatedUpdate.cs b/src/Custom/Realtime/Streaming/ItemCreatedUpdate.cs new file mode 100644 index 000000000..62d882d1a --- /dev/null +++ b/src/Custom/Realtime/Streaming/ItemCreatedUpdate.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type conversation.item.created, which is received when a new item has +/// been emplaced into the conversation. In the case of model-generated items, this may be preceded by a +/// (response.output_item.added) command, in which case the newly- +/// created item associated with this update will not yet have content associated with it and will instead have +/// content streamed via *delta commands before finalization via a +/// (response.output_item.done). +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventConversationItemCreated")] +public partial class ItemCreatedUpdate +{ + [CodeGenMember("Item")] + private readonly InternalRealtimeResponseItem _internalItem; + + public string ItemId => _internalItem.Id; + + public ConversationMessageRole? MessageRole => _internalItem.MessageRole; + + public IReadOnlyList MessageContentParts => _internalItem.MessageContentParts; + + public string FunctionName => _internalItem.FunctionName; + + public string FunctionCallId => _internalItem.FunctionCallId; + + public string FunctionCallArguments => _internalItem.FunctionCallArguments; + + public string FunctionCallOutput => _internalItem.FunctionCallOutput; +} diff --git a/src/Custom/Realtime/Streaming/ItemDeletedUpdate.cs b/src/Custom/Realtime/Streaming/ItemDeletedUpdate.cs new file mode 100644 index 000000000..ae5e52160 --- /dev/null +++ b/src/Custom/Realtime/Streaming/ItemDeletedUpdate.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type conversation.item.deleted, which is received in response to a +/// conversation.item.delete request command +/// (). +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventConversationItemDeleted")] +public partial class ItemDeletedUpdate +{ } diff --git a/src/Custom/Realtime/Streaming/ItemRetrievedUpdate.cs b/src/Custom/Realtime/Streaming/ItemRetrievedUpdate.cs new file mode 100644 index 000000000..61b33310e --- /dev/null +++ b/src/Custom/Realtime/Streaming/ItemRetrievedUpdate.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type conversation.item.retrieved, which is received in response to a +/// conversation.item.retrieve client command sent via +/// . +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventConversationItemRetrieved")] +public partial class ItemRetrievedUpdate +{ + [CodeGenMember("Item")] + public RealtimeItem Item { get; } +} diff --git a/src/Custom/Realtime/Streaming/ItemTruncatedUpdate.cs b/src/Custom/Realtime/Streaming/ItemTruncatedUpdate.cs new file mode 100644 index 000000000..6983980af --- /dev/null +++ b/src/Custom/Realtime/Streaming/ItemTruncatedUpdate.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type conversation.item.truncated, which is received in response to a +/// conversation.item.truncate request command +/// (). +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventConversationItemTruncated")] +public partial class ItemTruncatedUpdate +{ } diff --git a/src/Custom/Realtime/Streaming/OutputAudioFinishedUpdate.cs b/src/Custom/Realtime/Streaming/OutputAudioFinishedUpdate.cs new file mode 100644 index 000000000..b10f1bbd9 --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputAudioFinishedUpdate.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.audio.done, which is received after correlated +/// (response.output_item.added) and +/// (conversation.item.created) commands. +/// This update indicates that all streamed delta content has completed and the associated content part will soon be completed. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventResponseAudioDone")] +public partial class OutputAudioFinishedUpdate +{ } diff --git a/src/Custom/Realtime/Streaming/OutputAudioTranscriptionFinishedUpdate.cs b/src/Custom/Realtime/Streaming/OutputAudioTranscriptionFinishedUpdate.cs new file mode 100644 index 000000000..7be03203b --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputAudioTranscriptionFinishedUpdate.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.audio_transcript.done, which is received after all +/// commands for an output audio content part have been +/// received. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventResponseAudioTranscriptDone")] +public partial class OutputAudioTranscriptionFinishedUpdate +{ } diff --git a/src/Custom/Realtime/Streaming/OutputDeltaUpdate.Serialization.cs b/src/Custom/Realtime/Streaming/OutputDeltaUpdate.Serialization.cs new file mode 100644 index 000000000..e59d4eb13 --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputDeltaUpdate.Serialization.cs @@ -0,0 +1,76 @@ +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.Realtime; + +public partial class OutputDeltaUpdate : IJsonModel +{ + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, SerializeOutputDeltaUpdate, writer, options); + + OutputDeltaUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeOutputDeltaUpdate, ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + OutputDeltaUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeOutputDeltaUpdate, data, options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + internal static void SerializeOutputDeltaUpdate(OutputDeltaUpdate instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + List possibleUnionVariants = + [ + instance._contentPartAdded, + instance._audioDelta, + instance._outputTranscriptionDelta, + instance._textDelta, + instance._functionArgumentsDelta + ]; + + foreach (RealtimeUpdate unionVariant in possibleUnionVariants) + { + if (unionVariant is not null) + { + writer.WriteObjectValue(unionVariant, options); + break; + } + } + } + + internal static OutputDeltaUpdate DeserializeOutputDeltaUpdate(JsonElement element, ModelReaderWriterOptions options = null) + { + if (element.ValueKind != JsonValueKind.Object) + { + return null; + } + foreach (JsonProperty elementProperty in element.EnumerateObject()) + { + if (elementProperty.NameEquals("type"u8)) + { + string updateType = elementProperty.Value.ToString(); + + RealtimeUpdate baseUpdate = + StringComparer.OrdinalIgnoreCase.Equals(updateType, RealtimeUpdateKind.ItemContentPartStarted.ToSerialString()) + ? InternalRealtimeServerEventResponseContentPartAdded.DeserializeInternalRealtimeServerEventResponseContentPartAdded(element, options) + : StringComparer.OrdinalIgnoreCase.Equals(updateType, RealtimeUpdateKind.ItemStreamingPartAudioDelta.ToSerialString()) + ? InternalRealtimeServerEventResponseAudioDelta.DeserializeInternalRealtimeServerEventResponseAudioDelta(element, options) + : StringComparer.OrdinalIgnoreCase.Equals(updateType, RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionDelta.ToSerialString()) + ? InternalRealtimeServerEventResponseAudioTranscriptDelta.DeserializeInternalRealtimeServerEventResponseAudioTranscriptDelta(element, options) + : StringComparer.OrdinalIgnoreCase.Equals(updateType, RealtimeUpdateKind.ItemStreamingPartTextDelta.ToSerialString()) + ? InternalRealtimeServerEventResponseTextDelta.DeserializeInternalRealtimeServerEventResponseTextDelta(element, options) + : StringComparer.OrdinalIgnoreCase.Equals(updateType, RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsDelta.ToSerialString()) + ? InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.DeserializeInternalRealtimeServerEventResponseFunctionCallArgumentsDelta(element, options) + : null; + + return new OutputDeltaUpdate(baseUpdate); + } + } + return null; + } +} diff --git a/src/Custom/Realtime/Streaming/OutputDeltaUpdate.cs b/src/Custom/Realtime/Streaming/OutputDeltaUpdate.cs new file mode 100644 index 000000000..dc6c22a8d --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputDeltaUpdate.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// +/// +/// This type is a shared representation of the following response command types: +/// +/// response.content_part.added +/// response.audio.delta +/// response.text.delta +/// response.audio_transcript.delta +/// response.function_call_arguments.delta +/// +/// +[Experimental("OPENAI002")] +public partial class OutputDeltaUpdate : RealtimeUpdate +{ + private readonly InternalRealtimeServerEventResponseContentPartAdded _contentPartAdded; + private readonly InternalRealtimeServerEventResponseAudioDelta _audioDelta; + private readonly InternalRealtimeServerEventResponseAudioTranscriptDelta _outputTranscriptionDelta; + private readonly InternalRealtimeServerEventResponseTextDelta _textDelta; + private readonly InternalRealtimeServerEventResponseFunctionCallArgumentsDelta _functionArgumentsDelta; + + public string ResponseId + => _contentPartAdded?.ResponseId + ?? _audioDelta?.ResponseId + ?? _outputTranscriptionDelta?.ResponseId + ?? _textDelta?.ResponseId + ?? _functionArgumentsDelta?.ResponseId; + + public string ItemId + => _contentPartAdded?.ItemId + ?? _audioDelta?.ItemId + ?? _outputTranscriptionDelta?.ItemId + ?? _textDelta?.ItemId + ?? _functionArgumentsDelta?.ItemId; + + public int ItemIndex + => _contentPartAdded?.OutputIndex + ?? _audioDelta?.OutputIndex + ?? _outputTranscriptionDelta?.OutputIndex + ?? _textDelta?.OutputIndex + ?? _functionArgumentsDelta?.OutputIndex + ?? 0; + + public int ContentPartIndex + => _contentPartAdded?.ContentIndex + ?? _audioDelta?.ContentIndex + ?? _outputTranscriptionDelta?.ContentIndex + ?? _textDelta?.ContentIndex + ?? 0; + + public BinaryData AudioBytes + => _audioDelta?.Delta; + + public string AudioTranscript + => _contentPartAdded?.AudioTranscript + ?? _outputTranscriptionDelta?.Delta; + + public string Text + => _contentPartAdded?.Text + ?? _textDelta?.Delta; + + public string FunctionCallId + => _functionArgumentsDelta?.CallId; + + public string FunctionArguments + => _functionArgumentsDelta?.Delta; + + internal OutputDeltaUpdate() : base(RealtimeUpdateKind.Unknown) { } + + internal OutputDeltaUpdate(RealtimeUpdate baseUpdate) + : base(baseUpdate.Kind, baseUpdate.EventId, additionalBinaryDataProperties: null) + { + _contentPartAdded = baseUpdate as InternalRealtimeServerEventResponseContentPartAdded; + _audioDelta = baseUpdate as InternalRealtimeServerEventResponseAudioDelta; + _outputTranscriptionDelta = baseUpdate as InternalRealtimeServerEventResponseAudioTranscriptDelta; + _textDelta = baseUpdate as InternalRealtimeServerEventResponseTextDelta; + _functionArgumentsDelta = baseUpdate as InternalRealtimeServerEventResponseFunctionCallArgumentsDelta; + } +} diff --git a/src/Custom/Realtime/Streaming/OutputPartFinishedUpdate.Serialization.cs b/src/Custom/Realtime/Streaming/OutputPartFinishedUpdate.Serialization.cs new file mode 100644 index 000000000..3520bafeb --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputPartFinishedUpdate.Serialization.cs @@ -0,0 +1,67 @@ +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.Realtime; + +public partial class OutputPartFinishedUpdate : IJsonModel +{ + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, SerializeConversationContentPartDeltaUpdate, writer, options); + + OutputPartFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeOutputPartFinishedUpdate, ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) + => CustomSerializationHelpers.SerializeInstance(this, options); + + OutputPartFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) + => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeOutputPartFinishedUpdate, data, options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + internal static void SerializeConversationContentPartDeltaUpdate(OutputPartFinishedUpdate instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + List possibleUnionVariants = + [ + instance._contentPartDone, + instance._functionCallArgumentsDone, + ]; + + foreach (RealtimeUpdate unionVariant in possibleUnionVariants) + { + if (unionVariant is not null) + { + writer.WriteObjectValue(unionVariant, options); + break; + } + } + } + + internal static OutputPartFinishedUpdate DeserializeOutputPartFinishedUpdate(JsonElement element, ModelReaderWriterOptions options = null) + { + if (element.ValueKind != JsonValueKind.Object) + { + return null; + } + foreach (JsonProperty elementProperty in element.EnumerateObject()) + { + if (elementProperty.NameEquals("type"u8)) + { + string updateType = elementProperty.Value.ToString(); + + RealtimeUpdate baseUpdate = + StringComparer.OrdinalIgnoreCase.Equals(updateType, RealtimeUpdateKind.ItemContentPartFinished.ToSerialString()) + ? InternalRealtimeServerEventResponseContentPartDone.DeserializeInternalRealtimeServerEventResponseContentPartDone(element, options) + : StringComparer.OrdinalIgnoreCase.Equals(updateType, RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsFinished.ToSerialString()) + ? InternalRealtimeServerEventResponseFunctionCallArgumentsDone.DeserializeInternalRealtimeServerEventResponseFunctionCallArgumentsDone(element, options) + : null; + + return new OutputPartFinishedUpdate(baseUpdate); + } + } + return null; + } +} diff --git a/src/Custom/Realtime/Streaming/OutputPartFinishedUpdate.cs b/src/Custom/Realtime/Streaming/OutputPartFinishedUpdate.cs new file mode 100644 index 000000000..7ffa14c20 --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputPartFinishedUpdate.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// +/// +/// This type is a shared representation of the response.function_call_arguments.done and +/// response.content_part.done response commands. +/// +[Experimental("OPENAI002")] +public partial class OutputPartFinishedUpdate : RealtimeUpdate +{ + private readonly InternalRealtimeServerEventResponseContentPartDone _contentPartDone; + private readonly InternalRealtimeServerEventResponseFunctionCallArgumentsDone _functionCallArgumentsDone; + + public string ResponseId + => _contentPartDone?.ResponseId + ?? _functionCallArgumentsDone?.ResponseId; + + public string ItemId + => _contentPartDone?.ItemId + ?? _functionCallArgumentsDone?.ItemId; + + public int ItemIndex + => _contentPartDone?.OutputIndex + ?? _functionCallArgumentsDone?.OutputIndex + ?? 0; + + public int ContentPartIndex + => _contentPartDone?.ContentIndex + ?? 0; + + public string AudioTranscript => _contentPartDone?.AudioTranscript; + + public string Text => _contentPartDone?.Text; + + public string FunctionCallId => _functionCallArgumentsDone?.CallId; + + public string FunctionArguments => _functionCallArgumentsDone?.Arguments; + + internal OutputPartFinishedUpdate() : base(RealtimeUpdateKind.Unknown) { } + + internal OutputPartFinishedUpdate(RealtimeUpdate baseUpdate) + : base(baseUpdate.Kind, baseUpdate.EventId, additionalBinaryDataProperties: null) + { + _contentPartDone = baseUpdate as InternalRealtimeServerEventResponseContentPartDone; + _functionCallArgumentsDone = baseUpdate as InternalRealtimeServerEventResponseFunctionCallArgumentsDone; + } +} diff --git a/src/Custom/Realtime/Streaming/OutputStreamingFinishedUpdate.cs b/src/Custom/Realtime/Streaming/OutputStreamingFinishedUpdate.cs new file mode 100644 index 000000000..1962c7796 --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputStreamingFinishedUpdate.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.output_item.done, which is received when a new item that was +/// added to a conversation by the model has finished streaming all of its content parts and other data. This update +/// is preceded by a and some number of *delta commands as +/// represented by . +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventResponseOutputItemDone")] +public partial class OutputStreamingFinishedUpdate +{ + [CodeGenMember("Item")] + private readonly InternalRealtimeResponseItem _internalItem; + + public string ItemId => _internalItem.Id; + + public ConversationMessageRole? MessageRole => _internalItem.MessageRole; + + public IReadOnlyList MessageContentParts => _internalItem.MessageContentParts; + + public string FunctionName => _internalItem.FunctionName; + + public string FunctionCallId => _internalItem.FunctionCallId; + + public string FunctionCallArguments => _internalItem.FunctionCallArguments; + + public string FunctionCallOutput => _internalItem.FunctionCallOutput; +} \ No newline at end of file diff --git a/src/Custom/Realtime/Streaming/OutputStreamingStartedUpdate.cs b/src/Custom/Realtime/Streaming/OutputStreamingStartedUpdate.cs new file mode 100644 index 000000000..25ce58824 --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputStreamingStartedUpdate.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.output_item.added, which is received when a response turn +/// has begun generation of a new conversation item. This new item will have content streamed via *delta +/// commands and paired with an ending response.output_item.done update. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventResponseOutputItemAdded")] +public partial class OutputStreamingStartedUpdate +{ + [CodeGenMember("Item")] + private readonly InternalRealtimeResponseItem _internalItem; + + public string ItemId => _internalItem.Id; + + [CodeGenMember("OutputIndex")] + public int ItemIndex { get; } + + public ConversationMessageRole? MessageRole => _internalItem.MessageRole; + + public IReadOnlyList MessageContentParts => _internalItem.MessageContentParts; + + public string FunctionName => _internalItem.FunctionName; + + public string FunctionCallId => _internalItem.FunctionCallId; + + public string FunctionCallArguments => _internalItem.FunctionCallArguments; + + public string FunctionCallOutput => _internalItem.FunctionCallOutput; +} diff --git a/src/Custom/Realtime/Streaming/OutputTextFinishedUpdate.cs b/src/Custom/Realtime/Streaming/OutputTextFinishedUpdate.cs new file mode 100644 index 000000000..b23127f07 --- /dev/null +++ b/src/Custom/Realtime/Streaming/OutputTextFinishedUpdate.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.text.done, which is received after correlated +/// (response.output_item.added) and +/// (conversation.item.created) updates. +/// This update indicates that all streamed delta content has completed and the associated content part will soon be completed. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventResponseTextDone")] +public partial class OutputTextFinishedUpdate +{ } diff --git a/src/Custom/Realtime/Streaming/RateLimitsUpdate.cs b/src/Custom/Realtime/Streaming/RateLimitsUpdate.cs new file mode 100644 index 000000000..bc382331a --- /dev/null +++ b/src/Custom/Realtime/Streaming/RateLimitsUpdate.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type rate_limits_updated, which is received during a response and provides +/// the most recent information about configured rate limits. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventRateLimitsUpdated")] +public partial class RateLimitsUpdate +{ + public ConversationRateLimitDetailsItem TokenDetails + => _tokenDetails ??= AllDetails.FirstOrDefault(item => item.Name == "tokens"); + private ConversationRateLimitDetailsItem _tokenDetails; + public ConversationRateLimitDetailsItem RequestDetails + => _tokenDetails ??= AllDetails.FirstOrDefault(item => item.Name == "requests"); + + [CodeGenMember("RateLimits")] + public IReadOnlyList AllDetails { get; } +} \ No newline at end of file diff --git a/src/Custom/Realtime/Streaming/RealtimeErrorUpdate.cs b/src/Custom/Realtime/Streaming/RealtimeErrorUpdate.cs new file mode 100644 index 000000000..35deda9b0 --- /dev/null +++ b/src/Custom/Realtime/Streaming/RealtimeErrorUpdate.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Text.Json; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type error, which is received when a problem is encountered while +/// processing a request command or generating another response command. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventError")] +public partial class RealtimeErrorUpdate +{ + [CodeGenMember("Error")] + private readonly InternalRealtimeServerEventErrorError _error; + + public string ErrorCode => _error?.Code; + /// + /// Gets the identifier that correlates to a prior event associated with this error. + /// + public string ErrorEventId => _error?.EventId; + public string Message => _error?.Message; + public string ParameterName => _error?.Param; +} \ No newline at end of file diff --git a/src/Custom/Realtime/Streaming/RealtimeUpdate.Serialization.cs b/src/Custom/Realtime/Streaming/RealtimeUpdate.Serialization.cs new file mode 100644 index 000000000..7c87a7cc3 --- /dev/null +++ b/src/Custom/Realtime/Streaming/RealtimeUpdate.Serialization.cs @@ -0,0 +1,64 @@ +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.Realtime; + +public partial class RealtimeUpdate +{ + internal static RealtimeUpdate DeserializeRealtimeUpdate(JsonElement element, ModelReaderWriterOptions options = null) + { + options ??= ModelSerializationExtensions.WireOptions; + + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type", out JsonElement discriminator)) + { + return discriminator.GetString() switch + { + "conversation.created" => InternalRealtimeServerEventConversationCreated.DeserializeInternalRealtimeServerEventConversationCreated(element, options), + "conversation.item.created" => ItemCreatedUpdate.DeserializeItemCreatedUpdate(element, options), + "conversation.item.deleted" => ItemDeletedUpdate.DeserializeItemDeletedUpdate(element, options), + "conversation.item.input_audio_transcription.completed" => InputAudioTranscriptionFinishedUpdate.DeserializeInputAudioTranscriptionFinishedUpdate(element, options), + "conversation.item.input_audio_transcription.delta" => InputAudioTranscriptionDeltaUpdate.DeserializeInputAudioTranscriptionDeltaUpdate(element, options), + "conversation.item.input_audio_transcription.failed" => InputAudioTranscriptionFailedUpdate.DeserializeInputAudioTranscriptionFailedUpdate(element, options), + "conversation.item.truncated" => ItemTruncatedUpdate.DeserializeItemTruncatedUpdate(element, options), + "error" => RealtimeErrorUpdate.DeserializeRealtimeErrorUpdate(element, options), + "input_audio_buffer.cleared" => InputAudioClearedUpdate.DeserializeInputAudioClearedUpdate(element, options), + "input_audio_buffer.committed" => InputAudioCommittedUpdate.DeserializeInputAudioCommittedUpdate(element, options), + "input_audio_buffer.speech_started" => InputAudioSpeechStartedUpdate.DeserializeInputAudioSpeechStartedUpdate(element, options), + "input_audio_buffer.speech_stopped" => InputAudioSpeechFinishedUpdate.DeserializeInputAudioSpeechFinishedUpdate(element, options), + "rate_limits.updated" => RateLimitsUpdate.DeserializeRateLimitsUpdate(element, options), + "response.created" => ResponseStartedUpdate.DeserializeResponseStartedUpdate(element, options), + "response.done" => ResponseFinishedUpdate.DeserializeResponseFinishedUpdate(element, options), + "session.created" => ConversationSessionStartedUpdate.DeserializeConversationSessionStartedUpdate(element, options), + "session.updated" => ConversationSessionConfiguredUpdate.DeserializeConversationSessionConfiguredUpdate(element, options), + "transcription_session.updated" => TranscriptionSessionConfiguredUpdate.DeserializeTranscriptionSessionConfiguredUpdate(element, options), + + "response.output_item.added" => OutputStreamingStartedUpdate.DeserializeOutputStreamingStartedUpdate(element, options), + "response.output_item.done" => OutputStreamingFinishedUpdate.DeserializeOutputStreamingFinishedUpdate(element, options), + + "response.content_part.added" + or "response.audio_transcript.delta" + or "response.audio.delta" + or "response.text.delta" + or "response.function_call_arguments.delta" => OutputDeltaUpdate.DeserializeOutputDeltaUpdate(element, options), + + "response.text.done" => OutputTextFinishedUpdate.DeserializeOutputTextFinishedUpdate(element, options), + "response.audio_transcript.done" => OutputAudioTranscriptionFinishedUpdate.DeserializeOutputAudioTranscriptionFinishedUpdate(element, options), + "response.audio.done" => OutputAudioFinishedUpdate.DeserializeOutputAudioFinishedUpdate(element, options), + + "response.function_call_arguments.done" + or "response.content_part.done" => OutputPartFinishedUpdate.DeserializeOutputPartFinishedUpdate(element, options), + + _ => UnknownRealtimeServerEvent.DeserializeUnknownRealtimeServerEvent(element, options), + + }; + + } + return UnknownRealtimeServerEvent.DeserializeUnknownRealtimeServerEvent(element, options); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/Streaming/RealtimeUpdate.cs b/src/Custom/Realtime/Streaming/RealtimeUpdate.cs new file mode 100644 index 000000000..b652501d9 --- /dev/null +++ b/src/Custom/Realtime/Streaming/RealtimeUpdate.cs @@ -0,0 +1,22 @@ +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEvent")] +[CodeGenVisibility(nameof(Kind), CodeGenVisibility.Public)] +public partial class RealtimeUpdate +{ + public BinaryData GetRawContent() => ModelReaderWriter.Write(this); + + internal static RealtimeUpdate FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeRealtimeUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/Streaming/RealtimeUpdateKind.Serialization.cs b/src/Custom/Realtime/Streaming/RealtimeUpdateKind.Serialization.cs new file mode 100644 index 000000000..cbffcb78e --- /dev/null +++ b/src/Custom/Realtime/Streaming/RealtimeUpdateKind.Serialization.cs @@ -0,0 +1,78 @@ +using System; + +namespace OpenAI.Realtime; + +internal static partial class RealtimeUpdateKindExtensions +{ + public static string ToSerialString(this RealtimeUpdateKind value) => value switch + { + RealtimeUpdateKind.SessionStarted => "session.created", + RealtimeUpdateKind.SessionConfigured => "session.updated", + RealtimeUpdateKind.ConversationCreated => "conversation.created", + RealtimeUpdateKind.ItemCreated => "conversation.item.created", + RealtimeUpdateKind.ItemDeleted => "conversation.item.deleted", + RealtimeUpdateKind.ItemTruncated => "conversation.item.truncated", + RealtimeUpdateKind.ResponseStarted => "response.created", + RealtimeUpdateKind.ResponseFinished => "response.done", + RealtimeUpdateKind.RateLimitsUpdated => "rate_limits.updated", + RealtimeUpdateKind.ItemStreamingStarted => "response.output_item.added", + RealtimeUpdateKind.ItemStreamingFinished => "response.output_item.done", + RealtimeUpdateKind.ItemContentPartStarted => "response.content_part.added", + RealtimeUpdateKind.ItemContentPartFinished => "response.content_part.done", + RealtimeUpdateKind.ItemStreamingPartAudioDelta => "response.audio.delta", + RealtimeUpdateKind.ItemStreamingPartAudioFinished => "response.audio.done", + RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionDelta => "response.audio_transcript.delta", + RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionFinished => "response.audio_transcript.done", + RealtimeUpdateKind.ItemStreamingPartTextDelta => "response.text.delta", + RealtimeUpdateKind.ItemStreamingPartTextFinished => "response.text.done", + RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsDelta => "response.function_call_arguments.delta", + RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsFinished => "response.function_call_arguments.done", + RealtimeUpdateKind.InputSpeechStarted => "input_audio_buffer.speech_started", + RealtimeUpdateKind.InputSpeechStopped => "input_audio_buffer.speech_stopped", + RealtimeUpdateKind.InputTranscriptionFinished => "conversation.item.input_audio_transcription.completed", + RealtimeUpdateKind.InputTranscriptionDelta => "conversation.item.input_audio_transcription.delta", + RealtimeUpdateKind.InputTranscriptionFailed => "conversation.item.input_audio_transcription.failed", + RealtimeUpdateKind.InputAudioCommitted => "input_audio_buffer.committed", + RealtimeUpdateKind.InputAudioCleared => "input_audio_buffer.cleared", + RealtimeUpdateKind.TranscriptionSessionStarted => "transcription_session.created", + RealtimeUpdateKind.TranscriptionSessionConfigured => "transcription_session.updated", + RealtimeUpdateKind.Error => "error", + _ => null, + }; + + public static RealtimeUpdateKind ToRealtimeUpdateKind(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "session.created")) return RealtimeUpdateKind.SessionStarted; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "session.updated")) return RealtimeUpdateKind.SessionConfigured; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.created")) return RealtimeUpdateKind.ConversationCreated; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.created")) return RealtimeUpdateKind.ItemCreated; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.deleted")) return RealtimeUpdateKind.ItemDeleted; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.truncated")) return RealtimeUpdateKind.ItemTruncated; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.created")) return RealtimeUpdateKind.ResponseStarted; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.done")) return RealtimeUpdateKind.ResponseFinished; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "rate_limits.updated")) return RealtimeUpdateKind.RateLimitsUpdated; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.output_item.added")) return RealtimeUpdateKind.ItemStreamingStarted; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.output_item.done")) return RealtimeUpdateKind.ItemStreamingFinished; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.content_part.added")) return RealtimeUpdateKind.ItemContentPartStarted; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.content_part.done")) return RealtimeUpdateKind.ItemContentPartFinished; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.audio.delta")) return RealtimeUpdateKind.ItemStreamingPartAudioDelta; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.audio.done")) return RealtimeUpdateKind.ItemStreamingPartAudioFinished; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.audio_transcript.delta")) return RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionDelta; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.audio_transcript.done")) return RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionFinished; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.text.delta")) return RealtimeUpdateKind.ItemStreamingPartTextDelta; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.text.done")) return RealtimeUpdateKind.ItemStreamingPartTextFinished; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.function_call_arguments.delta")) return RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsDelta; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.function_call_arguments.done")) return RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsFinished; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_audio_buffer.speech_started")) return RealtimeUpdateKind.InputSpeechStarted; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_audio_buffer.speech_stopped")) return RealtimeUpdateKind.InputSpeechStopped; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.input_audio_transcription.completed")) return RealtimeUpdateKind.InputTranscriptionFinished; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.input_audio_transcription.delta")) return RealtimeUpdateKind.InputTranscriptionDelta; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.input_audio_transcription.failed")) return RealtimeUpdateKind.InputTranscriptionFailed; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_audio_buffer.committed")) return RealtimeUpdateKind.InputAudioCommitted; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_audio_buffer.cleared")) return RealtimeUpdateKind.InputAudioCleared; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "transcription_session.created")) return RealtimeUpdateKind.TranscriptionSessionStarted; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "transcription_session.updated")) return RealtimeUpdateKind.TranscriptionSessionConfigured; + if (StringComparer.OrdinalIgnoreCase.Equals(value, "error")) return RealtimeUpdateKind.Error; + return RealtimeUpdateKind.Unknown; + } +} diff --git a/src/Custom/Realtime/Streaming/RealtimeUpdateKind.cs b/src/Custom/Realtime/Streaming/RealtimeUpdateKind.cs new file mode 100644 index 000000000..886bc38ee --- /dev/null +++ b/src/Custom/Realtime/Streaming/RealtimeUpdateKind.cs @@ -0,0 +1,197 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventType")] +public enum RealtimeUpdateKind +{ + /// + /// A server event that does not map to a type currently handled by the library. + /// + Unknown, + /// + /// The session.created server event. + /// + [CodeGenMember("SessionCreated")] + SessionStarted, + /// + /// The session.updated server event. + /// + [CodeGenMember("SessionUpdated")] + SessionConfigured, + /// + /// The conversation.item.created server event. + /// + [CodeGenMember("ConversationItemCreated")] + ItemCreated, + /// + /// The conversation.created server event. + /// + [CodeGenMember("ConversationCreated")] + ConversationCreated, + /// + /// The conversation.item.retrieved server event. + /// + [CodeGenMember("ConversationItemRetrieved")] + ItemRetrieved, + /// + /// The conversation.item.deleted server event. + /// + [CodeGenMember("ConversationItemDeleted")] + ItemDeleted, + /// + /// The conversation.item.truncated server event. + /// + [CodeGenMember("ConversationItemTruncated")] + ItemTruncated, + /// + /// The response.created server event. + /// + [CodeGenMember("ResponseCreated")] + ResponseStarted, + /// + /// The response.done server event. + /// + [CodeGenMember("ResponseDone")] + ResponseFinished, + /// + /// The rate_limits.updated server event. + /// + [CodeGenMember("RateLimitsUpdated")] + RateLimitsUpdated, + /// + /// The response.output_item.added server event. + /// + [CodeGenMember("ResponseOutputItemAdded")] + ItemStreamingStarted, + /// + /// The response.output_item.done server event. + /// + [CodeGenMember("ResponseOutputItemDone")] + ItemStreamingFinished, + /// + /// The response.content_part.added server event. + /// + [CodeGenMember("ResponseContentPartAdded")] + ItemContentPartStarted, + /// + /// The response.content_part.done server event. + /// + [CodeGenMember("ResponseContentPartDone")] + ItemContentPartFinished, + /// + /// The response.audio.delta server event. + /// + [CodeGenMember("ResponseAudioDelta")] + ItemStreamingPartAudioDelta, + /// + /// The response.audio.done server event. + /// + [CodeGenMember("ResponseAudioDone")] + ItemStreamingPartAudioFinished, + /// + /// The response.audio_transcript.delta server event. + /// + [CodeGenMember("ResponseAudioTranscriptDelta")] + ItemStreamingPartAudioTranscriptionDelta, + /// + /// The response.audio_transcript.done server event. + /// + [CodeGenMember("ResponseAudioTranscriptDone")] + ItemStreamingPartAudioTranscriptionFinished, + /// + /// The response.text.delta server event. + /// + [CodeGenMember("ResponseTextDelta")] + ItemStreamingPartTextDelta, + /// + /// The response.text.done server event. + /// + [CodeGenMember("ResponseTextDone")] + ItemStreamingPartTextFinished, + /// + /// The response.function_call_arguments.delta server event. + /// + [CodeGenMember("ResponseFunctionCallArgumentsDelta")] + ItemStreamingFunctionCallArgumentsDelta, + /// + /// The response.function_call_arguments.done server event. + /// + [CodeGenMember("ResponseFunctionCallArgumentsDone")] + ItemStreamingFunctionCallArgumentsFinished, + /// + /// The input_audio_buffer.speech_started server event. + /// + [CodeGenMember("InputAudioBufferSpeechStarted")] + InputSpeechStarted, + /// + /// The input_audio_buffer.speech_stopped server event. + /// + [CodeGenMember("InputAudioBufferSpeechStopped")] + InputSpeechStopped, + /// + /// The conversation.item.input_audio_transcription.completed server event. + /// + [CodeGenMember("ConversationItemInputAudioTranscriptionCompleted")] + InputTranscriptionFinished, + /// + /// The conversation.item.input_audio_transcription.delta server event. + /// + [CodeGenMember("ConversationItemInputAudioTranscriptionDelta")] + InputTranscriptionDelta, + /// + /// The conversation.item.input_audio_transcription.failed server event. + /// + [CodeGenMember("ConversationItemInputAudioTranscriptionFailed")] + InputTranscriptionFailed, + /// + /// The input_audio_buffer.committed server event. + /// + [CodeGenMember("InputAudioBufferCommitted")] + InputAudioCommitted, + /// + /// The input_audio_buffer.cleared server event. + /// + [CodeGenMember("InputAudioBufferCleared")] + InputAudioCleared, + /// + /// The output_audio_buffer.cleared server event. + /// + /// + /// This server event type is currently only used by WebRTC and not applicable to the WebSocket client. + /// + [CodeGenMember("OutputAudioBufferCleared")] + OutputAudioBufferCleared, + /// + /// The output_audio_buffer.started server event. + /// + /// + /// This server event type is currently only used by WebRTC and not applicable to the WebSocket client. + /// + [CodeGenMember("OutputAudioBufferStarted")] + OutputAudioBufferStarted, + /// + /// The output_audio_buffer.stopped server event. + /// + /// + /// This server event type is currently only used by WebRTC and not applicable to the WebSocket client. + /// + [CodeGenMember("OutputAudioBufferStopped")] + OutputAudioBufferStopped, + /// + /// The transcription_session.created server event. + /// + [CodeGenMember("TranscriptionSessionCreated")] + TranscriptionSessionStarted, + /// + /// The transcription_session.updated server event. + /// + [CodeGenMember("TranscriptionSessionUpdated")] + TranscriptionSessionConfigured, + /// + /// The error server event. + /// + [CodeGenMember("Error")] + Error, +} \ No newline at end of file diff --git a/src/Custom/Realtime/Streaming/ResponseFinishedUpdate.cs b/src/Custom/Realtime/Streaming/ResponseFinishedUpdate.cs new file mode 100644 index 000000000..96732d7b0 --- /dev/null +++ b/src/Custom/Realtime/Streaming/ResponseFinishedUpdate.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.done, which is received when a model response turn has +/// completed and no further content part or item information will be transmitted. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventResponseDone")] +public partial class ResponseFinishedUpdate +{ + [CodeGenMember("Response")] + internal readonly InternalRealtimeResponse _internalResponse; + + public string ResponseId => _internalResponse?.Id; + + public ConversationStatus? Status => _internalResponse?.Status; + + public ConversationStatusDetails StatusDetails => _internalResponse.StatusDetails; + + [CodeGenMember("Output")] + public IReadOnlyList CreatedItems => _internalResponse?.Output ?? []; + + public ConversationTokenUsage Usage => _internalResponse.Usage; +} diff --git a/src/Custom/Realtime/Streaming/ResponseStartedUpdate.cs b/src/Custom/Realtime/Streaming/ResponseStartedUpdate.cs new file mode 100644 index 000000000..637591762 --- /dev/null +++ b/src/Custom/Realtime/Streaming/ResponseStartedUpdate.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type response.created, which is received when a new service response turn +/// has been initiated. A response will snapshot conversation and input audio buffer state for the duration of +/// generation and may be triggered by either configured voice activity detection at end of speech or by a caller- +/// initiated response.create +/// (). +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventResponseCreated")] +public partial class ResponseStartedUpdate +{ + [CodeGenMember("Response")] + internal readonly InternalRealtimeResponse _internalResponse; + + public string ResponseId => _internalResponse.Id; + + public ConversationStatus Status => _internalResponse.Status.Value; + + public ConversationStatusDetails StatusDetails => _internalResponse.StatusDetails; + + [CodeGenMember("Output")] + public IReadOnlyList CreatedItems => _internalResponse?.Output ?? []; + + public ConversationTokenUsage Usage => _internalResponse.Usage; +} diff --git a/src/Custom/Realtime/Streaming/TranscriptionSessionConfiguredUpdate.cs b/src/Custom/Realtime/Streaming/TranscriptionSessionConfiguredUpdate.cs new file mode 100644 index 000000000..b33f41124 --- /dev/null +++ b/src/Custom/Realtime/Streaming/TranscriptionSessionConfiguredUpdate.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +/// +/// The update (response command) of type session.updated, which is received when a preceding +/// session.update request command +/// () +/// has been applied to the session. New session configuration related to response generation will not take effect +/// until the next response; shared session configuration, such as input audio format, will apply immediately. +/// +[Experimental("OPENAI002")] +[CodeGenType("RealtimeServerEventTranscriptionSessionUpdated")] +public partial class TranscriptionSessionConfiguredUpdate +{ + [CodeGenMember("Session")] + internal readonly InternalRealtimeTranscriptionSessionCreateResponse _internalSession; + + private InternalRealtimeTranscriptionSessionCreateResponseClientSecret ClientSecret { get; } + + public RealtimeContentModalities ContentModalities + => RealtimeContentModalitiesExtensions.FromInternalModalities(_internalSession?.Modalities); + + public RealtimeAudioFormat InputAudioFormat => _internalSession?.InputAudioFormat ?? default; + + public InputTranscriptionOptions InputAudioTranscription => _internalSession?.InputAudioTranscription; + + public TurnDetectionOptions TurnDetection => _internalSession?.TurnDetection; +} diff --git a/src/Custom/Realtime/TranscriptionSessionOptions.cs b/src/Custom/Realtime/TranscriptionSessionOptions.cs new file mode 100644 index 000000000..29ffb1240 --- /dev/null +++ b/src/Custom/Realtime/TranscriptionSessionOptions.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeTranscriptionSessionCreateRequest")] +public partial class TranscriptionSessionOptions +{ + [CodeGenMember("Modalities")] + private IList _internalModalities; + + public RealtimeContentModalities ContentModalities + { + get => RealtimeContentModalitiesExtensions.FromInternalModalities(_internalModalities); + set => _internalModalities = value.ToInternalModalities(); + } + + [CodeGenMember("InputAudioFormat")] + public RealtimeAudioFormat? InputAudioFormat { get; set; } + + [CodeGenMember("InputAudioTranscription")] + public InputTranscriptionOptions InputTranscriptionOptions { get; set; } + + [CodeGenMember("TurnDetection")] + public TurnDetectionOptions TurnDetectionOptions { get; set; } + + [CodeGenMember("InputAudioNoiseReduction")] + public InputNoiseReductionOptions InputNoiseReductionOptions { get; set; } + + [CodeGenMember("Include")] + public IList Include { get; } = ["item.input_audio_transcription.logprobs"]; +} \ No newline at end of file diff --git a/src/Custom/Realtime/TurnDetectionKind.cs b/src/Custom/Realtime/TurnDetectionKind.cs new file mode 100644 index 000000000..2a3252402 --- /dev/null +++ b/src/Custom/Realtime/TurnDetectionKind.cs @@ -0,0 +1,16 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeTurnDetectionType")] +public enum TurnDetectionKind +{ + Unknown, + [CodeGenMember("ServerVad")] + ServerVoiceActivityDetection, + [CodeGenMember("SemanticVad")] + SemanticVoiceActivityDetection, + Disabled, +} \ No newline at end of file diff --git a/src/Custom/Realtime/TurnDetectionOptions.Serialization.cs b/src/Custom/Realtime/TurnDetectionOptions.Serialization.cs new file mode 100644 index 000000000..c59721371 --- /dev/null +++ b/src/Custom/Realtime/TurnDetectionOptions.Serialization.cs @@ -0,0 +1,28 @@ +using System.ClientModel.Primitives; +using System.Text.Json; + +namespace OpenAI.Realtime; + +[CodeGenSuppress(nameof(DeserializeTurnDetectionOptions), typeof(JsonElement), typeof(ModelReaderWriterOptions))] +public partial class TurnDetectionOptions +{ + internal static TurnDetectionOptions DeserializeTurnDetectionOptions(JsonElement element, ModelReaderWriterOptions options = null) + { + options ??= ModelSerializationExtensions.WireOptions; + + if (element.ValueKind == JsonValueKind.Null) + { + return InternalRealtimeNoTurnDetection.DeserializeInternalRealtimeNoTurnDetection(element, options); + } + if (element.TryGetProperty("type", out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "none": return InternalRealtimeNoTurnDetection.DeserializeInternalRealtimeNoTurnDetection(element, options); + case "server_vad": return InternalRealtimeServerVadTurnDetection.DeserializeInternalRealtimeServerVadTurnDetection(element, options); + default: return null; + } + } + return UnknownRealtimeTurnDetection.DeserializeUnknownRealtimeTurnDetection(element, options); + } +} \ No newline at end of file diff --git a/src/Custom/Realtime/TurnDetectionOptions.cs b/src/Custom/Realtime/TurnDetectionOptions.cs new file mode 100644 index 000000000..089952971 --- /dev/null +++ b/src/Custom/Realtime/TurnDetectionOptions.cs @@ -0,0 +1,51 @@ +using System; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Realtime; + +[Experimental("OPENAI002")] +[CodeGenType("RealtimeTurnDetection")] +[CodeGenVisibility(nameof(Kind), CodeGenVisibility.Public)] +public partial class TurnDetectionOptions +{ + [CodeGenMember("CreateResponse")] + internal bool? ResponseCreationEnabled { get; set; } + + [CodeGenMember("InterruptResponse")] + internal bool? ResponseInterruptionEnabled { get; set; } + + public static TurnDetectionOptions CreateDisabledTurnDetectionOptions() + { + return new InternalRealtimeNoTurnDetection(); + } + + public static TurnDetectionOptions CreateServerVoiceActivityTurnDetectionOptions( + float? detectionThreshold = null, + TimeSpan? prefixPaddingDuration = null, + TimeSpan? silenceDuration = null, + bool? enableAutomaticResponseCreation = null, + bool? enableResponseInterruption = null) + { + return new InternalRealtimeServerVadTurnDetection() + { + Threshold = detectionThreshold, + PrefixPaddingMs = prefixPaddingDuration, + SilenceDurationMs = silenceDuration, + ResponseCreationEnabled = enableAutomaticResponseCreation, + ResponseInterruptionEnabled = enableResponseInterruption, + }; + } + + internal static TurnDetectionOptions CreateSemanticVoiceActivityTurnDetectionOptions( + InternalRealtimeSemanticVadTurnDetectionEagerness? eagernessLevel = null, + bool? enableAutomaticResponseCreation = null, + bool? enableResponseInterruption = null) + { + return new InternalRealtimeSemanticVadTurnDetection() + { + Eagerness = eagernessLevel, + ResponseInterruptionEnabled = enableResponseInterruption, + ResponseCreationEnabled = enableAutomaticResponseCreation, + }; + } +} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationContentModalities.Serialization.cs b/src/Custom/RealtimeConversation/ConversationContentModalities.Serialization.cs deleted file mode 100644 index 742db33fd..000000000 --- a/src/Custom/RealtimeConversation/ConversationContentModalities.Serialization.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -internal static partial class ConversationContentModalitiesExtensions -{ - internal static IList ToInternalModalities(this ConversationContentModalities modalities) - { - ChangeTrackingList internalModalities = new(); - if (modalities.HasFlag(ConversationContentModalities.Text)) - { - internalModalities.Add(InternalRealtimeRequestSessionModality.Text); - } - if (modalities.HasFlag(ConversationContentModalities.Audio)) - { - internalModalities.Add(InternalRealtimeRequestSessionModality.Audio); - } - return internalModalities; - } - - internal static ConversationContentModalities FromInternalModalities(IEnumerable internalModalities) - { - ConversationContentModalities result = 0; - foreach (InternalRealtimeRequestSessionModality internalModality in internalModalities ?? []) - { - if (internalModality == InternalRealtimeRequestSessionModality.Text) - { - result |= ConversationContentModalities.Text; - } - else if (internalModality == InternalRealtimeRequestSessionModality.Audio) - { - result |= ConversationContentModalities.Audio; - } - } - return result; - } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationContentModalities.cs b/src/Custom/RealtimeConversation/ConversationContentModalities.cs deleted file mode 100644 index e1f8dd4bc..000000000 --- a/src/Custom/RealtimeConversation/ConversationContentModalities.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[Flags] -public enum ConversationContentModalities : int -{ - Default = 0, - Text = 1 << 0, - Audio = 1 << 1, -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationItem.cs b/src/Custom/RealtimeConversation/ConversationItem.cs deleted file mode 100644 index bf6e8791c..000000000 --- a/src/Custom/RealtimeConversation/ConversationItem.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[CodeGenType("RealtimeConversationRequestItem")] -public partial class ConversationItem -{ - public string FunctionCallId => (this as InternalRealtimeRequestFunctionCallItem)?.CallId; - public string FunctionName => (this as InternalRealtimeRequestFunctionCallItem)?.Name; - public string FunctionArguments => (this as InternalRealtimeRequestFunctionCallItem)?.Arguments; - - public IReadOnlyList MessageContentParts - => (this as InternalRealtimeRequestAssistantMessageItem)?.Content.ToList().AsReadOnly() - ?? (this as InternalRealtimeRequestSystemMessageItem)?.Content?.ToList().AsReadOnly() - ?? (this as InternalRealtimeRequestUserMessageItem)?.Content?.ToList().AsReadOnly(); - public ConversationMessageRole? MessageRole - => (this as InternalRealtimeRequestMessageItem)?.Role; - - public static ConversationItem CreateUserMessage(IEnumerable contentItems) - { - return new InternalRealtimeRequestUserMessageItem(contentItems); - } - - public static ConversationItem CreateSystemMessage(IEnumerable contentItems) - { - return new InternalRealtimeRequestSystemMessageItem(contentItems); - } - - public static ConversationItem CreateAssistantMessage(IEnumerable contentItems) - { - return new InternalRealtimeRequestAssistantMessageItem(contentItems); - } - - public static ConversationItem CreateFunctionCall(string name, string callId, string arguments) - { - return new InternalRealtimeRequestFunctionCallItem(name, callId, arguments); - } - - public static ConversationItem CreateFunctionCallOutput(string callId, string output) - { - return new InternalRealtimeRequestFunctionCallOutputItem(callId, output); - } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationSessionOptions.cs b/src/Custom/RealtimeConversation/ConversationSessionOptions.cs deleted file mode 100644 index 3dab08b6d..000000000 --- a/src/Custom/RealtimeConversation/ConversationSessionOptions.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[CodeGenType("RealtimeRequestSession")] -public partial class ConversationSessionOptions -{ - [CodeGenMember("Model")] - internal InternalRealtimeRequestSessionModel? Model { get; set; } - - [CodeGenMember("Modalities")] - private IList _internalModalities; - - public ConversationContentModalities ContentModalities - { - get => ConversationContentModalitiesExtensions.FromInternalModalities(_internalModalities); - set => _internalModalities = value.ToInternalModalities(); - } - - [CodeGenMember("ToolChoice")] - private BinaryData _internalToolChoice; - - public ConversationToolChoice ToolChoice - { - get => ConversationToolChoice.FromBinaryData(_internalToolChoice); - set - { - _internalToolChoice = value is not null - ? ModelReaderWriter.Write(value) - : null; - } - } - - [CodeGenMember("MaxResponseOutputTokens")] - private BinaryData _maxResponseOutputTokens; - - public ConversationMaxTokensChoice MaxOutputTokens - { - get => ConversationMaxTokensChoice.FromBinaryData(_maxResponseOutputTokens); - set - { - _maxResponseOutputTokens = value == null ? null : ModelReaderWriter.Write(value); - } - } - - [CodeGenMember("TurnDetection")] - public ConversationTurnDetectionOptions TurnDetectionOptions { get; set; } - - [CodeGenMember("InputAudioTranscription")] - public ConversationInputTranscriptionOptions InputTranscriptionOptions { get; set; } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationTurnDetectionKind.cs b/src/Custom/RealtimeConversation/ConversationTurnDetectionKind.cs deleted file mode 100644 index c0fc90686..000000000 --- a/src/Custom/RealtimeConversation/ConversationTurnDetectionKind.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[CodeGenType("RealtimeTurnDetectionType")] -public enum ConversationTurnDetectionKind -{ - [CodeGenMember("ServerVad")] - ServerVoiceActivityDetection, - Disabled, -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.Serialization.cs b/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.Serialization.cs deleted file mode 100644 index 7ae01a2e9..000000000 --- a/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.Serialization.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.ClientModel.Primitives; -using System.Text.Json; - -namespace OpenAI.RealtimeConversation; - -[CodeGenSuppress(nameof(DeserializeConversationTurnDetectionOptions), typeof(JsonElement), typeof(ModelReaderWriterOptions))] -public partial class ConversationTurnDetectionOptions -{ - internal static ConversationTurnDetectionOptions DeserializeConversationTurnDetectionOptions(JsonElement element, ModelReaderWriterOptions options = null) - { - options ??= ModelSerializationExtensions.WireOptions; - - if (element.ValueKind == JsonValueKind.Null) - { - return InternalRealtimeNoTurnDetection.DeserializeInternalRealtimeNoTurnDetection(element, options); - } - if (element.TryGetProperty("type", out JsonElement discriminator)) - { - switch (discriminator.GetString()) - { - case "none": return InternalRealtimeNoTurnDetection.DeserializeInternalRealtimeNoTurnDetection(element, options); - case "server_vad": return InternalRealtimeServerVadTurnDetection.DeserializeInternalRealtimeServerVadTurnDetection(element, options); - default: return null; - } - } - return UnknownRealtimeTurnDetection.DeserializeUnknownRealtimeTurnDetection(element, options); - } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.cs b/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.cs deleted file mode 100644 index e40b689f1..000000000 --- a/src/Custom/RealtimeConversation/ConversationTurnDetectionOptions.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[CodeGenType("RealtimeTurnDetection")] -public partial class ConversationTurnDetectionOptions -{ - [CodeGenMember("Kind")] - public ConversationTurnDetectionKind Kind { get; internal protected set; } - - public static ConversationTurnDetectionOptions CreateDisabledTurnDetectionOptions() - { - return new InternalRealtimeNoTurnDetection(); - } - - public static ConversationTurnDetectionOptions CreateServerVoiceActivityTurnDetectionOptions( - float? detectionThreshold = null, - TimeSpan? prefixPaddingDuration = null, - TimeSpan? silenceDuration = null, - bool? enableAutomaticResponseCreation = null) - { - return new InternalRealtimeServerVadTurnDetection() - { - Threshold = detectionThreshold, - PrefixPaddingMs = prefixPaddingDuration, - SilenceDurationMs = silenceDuration, - CreateResponse = enableAutomaticResponseCreation, - }; - } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/GeneratorStubs.cs b/src/Custom/RealtimeConversation/GeneratorStubs.cs deleted file mode 100644 index fe542184a..000000000 --- a/src/Custom/RealtimeConversation/GeneratorStubs.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")][CodeGenType("RealtimeAudioFormat")] public readonly partial struct ConversationAudioFormat { } -[Experimental("OPENAI002")][CodeGenType("RealtimeAudioInputTranscriptionModel")] public readonly partial struct ConversationTranscriptionModel { } -[Experimental("OPENAI002")][CodeGenType("RealtimeAudioInputTranscriptionSettings")] public partial class ConversationInputTranscriptionOptions { } -[Experimental("OPENAI002")][CodeGenType("RealtimeItemStatus")] public readonly partial struct ConversationItemStatus { } -[Experimental("OPENAI002")][CodeGenType("RealtimeMessageRole")] public readonly partial struct ConversationMessageRole { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseStatus")] public readonly partial struct ConversationStatus { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseUsage")] public partial class ConversationTokenUsage { } -[Experimental("OPENAI002")][CodeGenType("RealtimeToolType")] public readonly partial struct ConversationToolKind { } -[Experimental("OPENAI002")][CodeGenType("RealtimeVoice")] public readonly partial struct ConversationVoice { } diff --git a/src/Custom/RealtimeConversation/Internal/GeneratorStubs.cs b/src/Custom/RealtimeConversation/Internal/GeneratorStubs.cs deleted file mode 100644 index 5861b03f5..000000000 --- a/src/Custom/RealtimeConversation/Internal/GeneratorStubs.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEvent")] internal partial class InternalRealtimeClientEvent { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventConversationItemCreate")] internal partial class InternalRealtimeClientEventConversationItemCreate { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventConversationItemDelete")] internal partial class InternalRealtimeClientEventConversationItemDelete { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventConversationItemTruncate")] internal partial class InternalRealtimeClientEventConversationItemTruncate { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventInputAudioBufferAppend")] internal partial class InternalRealtimeClientEventInputAudioBufferAppend { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventInputAudioBufferClear")] internal partial class InternalRealtimeClientEventInputAudioBufferClear { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventInputAudioBufferCommit")] internal partial class InternalRealtimeClientEventInputAudioBufferCommit { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventResponseCancel")] internal partial class InternalRealtimeClientEventResponseCancel { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventSessionUpdate")] internal partial class InternalRealtimeClientEventSessionUpdate { } -[Experimental("OPENAI002")][CodeGenType("RealtimeClientEventType")] internal readonly partial struct InternalRealtimeClientEventType { } -[Experimental("OPENAI002")][CodeGenType("RealtimeConversationResponseItemObject")] internal readonly partial struct InternalRealtimeConversationResponseItemObject { } -[Experimental("OPENAI002")][CodeGenType("RealtimeItemType")] internal readonly partial struct InternalRealtimeItemType { } -[Experimental("OPENAI002")][CodeGenType("RealtimeModality")] internal readonly partial struct InternalRealtimeRequestSessionModality { } -[Experimental("OPENAI002")][CodeGenType("RealtimeRequestAudioContentPart")] internal partial class InternalRealtimeRequestAudioContentPart { } -[Experimental("OPENAI002")][CodeGenType("RealtimeRequestFunctionCallItem")] internal partial class InternalRealtimeRequestFunctionCallItem { } -[Experimental("OPENAI002")][CodeGenType("RealtimeRequestFunctionCallOutputItem")] internal partial class InternalRealtimeRequestFunctionCallOutputItem { } -[Experimental("OPENAI002")][CodeGenType("RealtimeRequestMessageItem")] internal partial class InternalRealtimeRequestMessageItem { } -[Experimental("OPENAI002")][CodeGenType("RealtimeRequestSessionModel")] internal readonly partial struct InternalRealtimeRequestSessionModel { } -[Experimental("OPENAI002")][CodeGenType("RealtimeRequestTextContentPart")] internal partial class InternalRealtimeRequestTextContentPart { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseAudioContentPart")] internal partial class InternalRealtimeResponseAudioContentPart { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseFunctionCallItem")] internal partial class InternalRealtimeResponseFunctionCallItem { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseFunctionCallOutputItem")] internal partial class InternalRealtimeResponseFunctionCallOutputItem { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseModality")] internal readonly partial struct InternalRealtimeResponseModality { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseObject")] internal readonly partial struct InternalRealtimeResponseObject { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseOutputAudioFormat")] internal readonly partial struct InternalRealtimeResponseOutputAudioFormat { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseSessionObject")] internal readonly partial struct InternalRealtimeResponseSessionObject { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseStatusDetailsError")] internal partial class InternalRealtimeResponseStatusDetailsError { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseStatusDetailsType")] internal readonly partial struct InternalRealtimeResponseStatusDetailsType { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseTextContentPart")] internal partial class InternalRealtimeResponseTextContentPart { } -[Experimental("OPENAI002")][CodeGenType("RealtimeResponseVoice")] internal readonly partial struct InternalRealtimeResponseVoice { } -[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventConversationCreated")] internal partial class InternalRealtimeServerEventConversationCreated { } -[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventConversationCreatedConversation")] internal partial class InternalRealtimeServerEventConversationCreatedConversation { } -[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionFailedError")] internal partial class InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError { } -[Experimental("OPENAI002")][CodeGenType("RealtimeServerEventErrorError")] internal partial class InternalRealtimeServerEventErrorError { } -[Experimental("OPENAI002")][CodeGenType("RealtimeToolChoiceFunctionObject")] internal partial class InternalRealtimeToolChoiceFunctionObject { } -[Experimental("OPENAI002")][CodeGenType("RealtimeToolChoiceFunctionObjectFunction")] internal partial class InternalRealtimeToolChoiceFunctionObjectFunction { } -[Experimental("OPENAI002")][CodeGenType("RealtimeToolChoiceObject")] internal partial class InternalRealtimeToolChoiceObject { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeClientEvent")] internal partial class UnknownRealtimeClientEvent { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeContentPart")] internal partial class UnknownRealtimeContentPart { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeConversationRequestItem")] internal partial class UnknownRealtimeRequestItem { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeConversationResponseItem")] internal partial class UnknownRealtimeResponseItem { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeRequestMessageItem")] internal partial class UnknownRealtimeRequestMessageItem { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeServerEvent")] internal partial class UnknownRealtimeServerEvent { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeTool")] internal partial class UnknownRealtimeTool { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeToolChoiceObject")] internal partial class UnknownRealtimeToolChoiceObject { } -[Experimental("OPENAI002")][CodeGenType("UnknownRealtimeTurnDetection")] internal partial class UnknownRealtimeTurnDetection { } diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeNoTurnDetection.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeNoTurnDetection.cs deleted file mode 100644 index 436b0dac1..000000000 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeNoTurnDetection.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation; - -internal partial class InternalRealtimeNoTurnDetection : ConversationTurnDetectionOptions -{ - public InternalRealtimeNoTurnDetection() - : this(ConversationTurnDetectionKind.Disabled, null) - { } - - internal InternalRealtimeNoTurnDetection(ConversationTurnDetectionKind type, IDictionary serializedAdditionalRawData) - : base(type, serializedAdditionalRawData) - { } -} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAudioContentPart.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAudioContentPart.cs deleted file mode 100644 index 3425d65e3..000000000 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeRequestAudioContentPart.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation; -internal partial class InternalRealtimeRequestAudioContentPart : ConversationContentPart -{ - [CodeGenMember("Transcript")] - public string InternalTranscriptValue { get; set; } -} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponse.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponse.cs deleted file mode 100644 index b04fef20b..000000000 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponse.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[CodeGenType("RealtimeResponse")] -internal partial class InternalRealtimeResponse -{ - [CodeGenMember("Output")] - public IReadOnlyList Output { get; } - - [CodeGenMember("Modalities")] - internal IReadOnlyList Modalities { get; } - - [CodeGenMember("Voice")] - public ConversationVoice? Voice { get; } - - [CodeGenMember("OutputAudioFormat")] - public ConversationAudioFormat? OutputAudioFormat { get; } -} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseAudioContentPart.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseAudioContentPart.cs deleted file mode 100644 index 5426e7497..000000000 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseAudioContentPart.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation; - -internal partial class InternalRealtimeResponseAudioContentPart : ConversationContentPart -{ - [CodeGenMember("Transcript")] - public string InternalTranscriptValue { get; } -} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseItem.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseItem.cs deleted file mode 100644 index 48956fe42..000000000 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseItem.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[CodeGenType("RealtimeConversationResponseItem")] -internal partial class InternalRealtimeConversationResponseItem -{ - public string ResponseId - => (this as InternalRealtimeResponseMessageItem)?.ResponseId - ?? (this as InternalRealtimeResponseFunctionCallItem)?.ResponseId - ?? (this as InternalRealtimeResponseFunctionCallOutputItem)?.ResponseId; - - public ConversationMessageRole? MessageRole => - (this as InternalRealtimeResponseMessageItem)?.Role; - - public IReadOnlyList MessageContentParts => - (this as InternalRealtimeResponseMessageItem)?.Content; - - public string FunctionName - => (this as InternalRealtimeResponseFunctionCallItem)?.Name; - - public string FunctionCallId => - (this as InternalRealtimeResponseFunctionCallItem)?.CallId - ?? (this as InternalRealtimeResponseFunctionCallOutputItem)?.CallId; - - public string FunctionCallArguments => - (this as InternalRealtimeResponseFunctionCallItem)?.Arguments; - - public string FunctionCallOutput => - (this as InternalRealtimeResponseFunctionCallOutputItem)?.Output; -} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseTextContentPart.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseTextContentPart.cs deleted file mode 100644 index b27711434..000000000 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeResponseTextContentPart.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation; - -internal partial class InternalRealtimeResponseTextContentPart : ConversationContentPart -{ - [CodeGenMember("Text")] - public string InternalTextValue { get; } -} diff --git a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs b/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs deleted file mode 100644 index ae2ca0b70..000000000 --- a/src/Custom/RealtimeConversation/Internal/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type response.function_call_arguments.delta, which is received after correlated -/// (response.output_item.added) and -/// (conversation.item.created) commands that initialize -/// a conversation function call item. This and other related delta events append function arguments to the item as -/// incremental JSON. -/// -/// -/// Each delta payload only contains a small, incremental portion of the overall function call argument payload -/// and is not a valid JSON document on its own. For the complete JSON arguments, refer to -/// commands or -/// . Using this incremental JSON deltas requires the -/// use of a compatible, incremental parser. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventResponseFunctionCallArgumentsDelta")] -internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDelta -{ } diff --git a/src/Custom/RealtimeConversation/RealtimeConversationClient.Protocol.cs b/src/Custom/RealtimeConversation/RealtimeConversationClient.Protocol.cs deleted file mode 100644 index 398d8a5c2..000000000 --- a/src/Custom/RealtimeConversation/RealtimeConversationClient.Protocol.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.ClientModel.Primitives; -using System.Diagnostics.CodeAnalysis; -using System.Threading.Tasks; - -namespace OpenAI.RealtimeConversation; - -public partial class RealtimeConversationClient -{ - /// - /// [Protocol Method] - /// Creates a new realtime conversation operation instance, establishing the connection and optionally sending an - /// initial configuration message payload. - /// - /// - /// - public virtual async Task StartConversationSessionAsync(RequestOptions options) - { - RealtimeConversationSession provisionalSession = new(this, _endpoint, _credential); - try - { - await provisionalSession.ConnectAsync(options).ConfigureAwait(false); - RealtimeConversationSession result = provisionalSession; - provisionalSession = null; - return result; - } - finally - { - provisionalSession?.Dispose(); - } - } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/RealtimeConversationClient.cs b/src/Custom/RealtimeConversation/RealtimeConversationClient.cs deleted file mode 100644 index bace07dea..000000000 --- a/src/Custom/RealtimeConversation/RealtimeConversationClient.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Threading; -using System.Threading.Tasks; - -namespace OpenAI.RealtimeConversation; - -[CodeGenType("Realtime")] -[CodeGenSuppress("StartRealtimeSessionAsync", typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("StartRealtimeSessionAsync", typeof(BinaryContent), typeof(RequestOptions))] -[CodeGenSuppress("StartRealtimeSession", typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("StartRealtimeSession", typeof(BinaryContent), typeof(RequestOptions))] -[CodeGenSuppress("CreateStartRealtimeSessionRequest", typeof(BinaryContent), typeof(RequestOptions))] -[Experimental("OPENAI002")] -public partial class RealtimeConversationClient -{ - public event EventHandler OnSendingCommand; - public event EventHandler OnReceivingCommand; - - private readonly ApiKeyCredential _credential; - - /// - /// Creates a new instance of using an API key for authentication. - /// - /// The API key to use for authentication. - public RealtimeConversationClient(string model, ApiKeyCredential credential) : this(model, credential, new OpenAIClientOptions()) - { - } - - /// - /// Creates a new instance of using an API key for authentication. - /// - /// The API key to use for authentication. - /// Additional options for configuring the client. - public RealtimeConversationClient(string model, ApiKeyCredential credential, OpenAIClientOptions options) - { - Argument.AssertNotNull(credential, nameof(credential)); - Argument.AssertNotNull(options, nameof(options)); - - _credential = credential; - _endpoint = GetEndpoint(model, options); - } - - protected internal RealtimeConversationClient(ClientPipeline pipeline, OpenAIClientOptions options) - { - throw new NotImplementedException("Pipeline-based initialization of WS-based client not available"); - } - - /// - /// Starts a new , optionally applying initial configuration to the session and - /// default conversation for the session. - /// - /// - /// The abstracts bidirectional communication between the caller and service, - /// simultaneously sending and receiving WebSocket messages. - /// - /// - /// A new, connected, configured instance of . - public virtual async Task StartConversationSessionAsync( - CancellationToken cancellationToken = default) - { - RequestOptions cancellationOptions = cancellationToken.ToRequestOptions(); - RealtimeConversationSession newOperation = await StartConversationSessionAsync(cancellationOptions).ConfigureAwait(false); - return newOperation; - } - - public RealtimeConversationSession StartConversationSession(CancellationToken cancellationToken = default) - { - return StartConversationSessionAsync(cancellationToken).ConfigureAwait(false).GetAwaiter().GetResult(); - } - - private static Uri GetEndpoint(string model, OpenAIClientOptions options) - { - UriBuilder uriBuilder = new(options?.Endpoint ?? new("https://api.openai.com/v1")); - uriBuilder.Scheme = uriBuilder.Scheme.ToLowerInvariant() switch - { - "http" => "ws", - "https" => "wss", - _ => uriBuilder.Scheme - }; - uriBuilder.Query = ""; - if (!uriBuilder.Path.EndsWith("/realtime")) - { - uriBuilder.Path += uriBuilder.Path[uriBuilder.Path.Length - 1] == '/' ? "realtime" : "/realtime"; - } - - uriBuilder.Query = $"?model={model}"; - - return uriBuilder.Uri; - } - - internal void RaiseOnSendingCommand(RealtimeConversationSession session, BinaryData data) - { - OnSendingCommand?.Invoke(session, data); - } - - internal void RaiseOnReceivingCommand(RealtimeConversationSession session, BinaryData data) - { - OnReceivingCommand?.Invoke(session, data); - } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/RealtimeConversationSession.Protocol.cs b/src/Custom/RealtimeConversation/RealtimeConversationSession.Protocol.cs deleted file mode 100644 index fa6c7d749..000000000 --- a/src/Custom/RealtimeConversation/RealtimeConversationSession.Protocol.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.ComponentModel; -using System.Net.WebSockets; -using System.Threading; -using System.Threading.Tasks; - -namespace OpenAI.RealtimeConversation; - -public partial class RealtimeConversationSession -{ - private readonly SemaphoreSlim _clientSendSemaphore = new(initialCount: 1, maxCount: 1); - private readonly object _singleReceiveLock = new(); - private AsyncWebsocketMessageCollectionResult _receiveCollectionResult; - - /// - /// Initializes an underlying instance for communication with the /realtime edpoint and - /// then connects to the service using this socket. - /// - /// - /// - [EditorBrowsable(EditorBrowsableState.Never)] - protected internal virtual async Task ConnectAsync(RequestOptions options) - { - WebSocket?.Dispose(); - _credential.Deconstruct(out string dangerousCredential); - ClientWebSocket clientWebSocket = new(); - clientWebSocket.Options.AddSubProtocol("realtime"); - clientWebSocket.Options.SetRequestHeader("openai-beta", $"realtime=v1"); - clientWebSocket.Options.SetRequestHeader("Authorization", $"Bearer {dangerousCredential}"); - - await clientWebSocket.ConnectAsync(_endpoint, options?.CancellationToken ?? default) - .ConfigureAwait(false); - - WebSocket = clientWebSocket; - } - - [EditorBrowsable(EditorBrowsableState.Never)] - protected internal virtual void Connect(RequestOptions options) - { - ConnectAsync(options).Wait(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual async Task SendCommandAsync(BinaryData data, RequestOptions options) - { - Argument.AssertNotNull(data, nameof(data)); - - _parentClient?.RaiseOnSendingCommand(this, data); - - ArraySegment messageBytes = new(data.ToArray()); - - CancellationToken cancellationToken = options?.CancellationToken ?? default; - - await _clientSendSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); - try - { - await WebSocket.SendAsync( - messageBytes, - WebSocketMessageType.Text, // TODO: extensibility for binary messages -- via "content"? - endOfMessage: true, - cancellationToken) - .ConfigureAwait(false); - } - finally - { - _clientSendSemaphore.Release(); - } - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual void SendCommand(BinaryData data, RequestOptions options) - { - // ClientWebSocket does **not** include a synchronous Send() - SendCommandAsync(data, options).ConfigureAwait(false).GetAwaiter().GetResult(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual async IAsyncEnumerable ReceiveUpdatesAsync(RequestOptions options) - { - lock (_singleReceiveLock) - { - _receiveCollectionResult ??= new(WebSocket, options?.CancellationToken ?? default); - } - await foreach (ClientResult result in _receiveCollectionResult) - { - BinaryData incomingMessage = result?.GetRawResponse()?.Content; - if (incomingMessage is not null) - { - _parentClient?.RaiseOnReceivingCommand(this, incomingMessage); - } - yield return result; - } - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public virtual IEnumerable ReceiveUpdates(RequestOptions options) - { - throw new NotImplementedException(); - } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/RealtimeConversationSession.cs b/src/Custom/RealtimeConversation/RealtimeConversationSession.cs deleted file mode 100644 index f27bc600c..000000000 --- a/src/Custom/RealtimeConversation/RealtimeConversationSession.cs +++ /dev/null @@ -1,354 +0,0 @@ -using System; -using System.Buffers; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Net.WebSockets; -using System.Runtime.CompilerServices; -using System.Threading; -using System.Threading.Tasks; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -public partial class RealtimeConversationSession : IDisposable -{ - public WebSocket WebSocket { get; protected set; } - - private readonly RealtimeConversationClient _parentClient; - private readonly Uri _endpoint; - private readonly ApiKeyCredential _credential; - private readonly SemaphoreSlim _audioSendSemaphore = new(1, 1); - private bool _isSendingAudioStream = false; - - internal bool ShouldBufferTurnResponseData { get; set; } - - protected internal RealtimeConversationSession( - RealtimeConversationClient parentClient, - Uri endpoint, - ApiKeyCredential credential) - { - Argument.AssertNotNull(endpoint, nameof(endpoint)); - Argument.AssertNotNull(credential, nameof(credential)); - - _parentClient = parentClient; - _endpoint = endpoint; - _credential = credential; - } - - /// - /// Transmits audio data from a stream, ending the client turn once the stream is complete. - /// - /// The audio stream to transmit. - /// An optional cancellation token. - /// - public virtual async Task SendInputAudioAsync(Stream audio, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(audio, nameof(audio)); - using (await _audioSendSemaphore.AutoReleaseWaitAsync(cancellationToken).ConfigureAwait(false)) - { - if (_isSendingAudioStream) - { - throw new InvalidOperationException($"Only one stream of audio may be sent at once."); - } - _isSendingAudioStream = true; - } - byte[] buffer = ArrayPool.Shared.Rent(1024 * 16); - try - { - while (true) - { - int bytesRead = await audio.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false); - if (bytesRead == 0) - { - break; - } - - ReadOnlyMemory audioMemory = buffer.AsMemory(0, bytesRead); - BinaryData audioData = BinaryData.FromBytes(audioMemory); - InternalRealtimeClientEventInputAudioBufferAppend internalCommand = new(audioData); - BinaryData requestData = ModelReaderWriter.Write(internalCommand); - await SendCommandAsync(requestData, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - } - } - finally - { - ArrayPool.Shared.Return(buffer); - using (await _audioSendSemaphore.AutoReleaseWaitAsync(cancellationToken).ConfigureAwait(false)) - { - _isSendingAudioStream = false; - } - } - } - - public virtual void SendInputAudio(Stream audio, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(audio, nameof(audio)); - using (_audioSendSemaphore.AutoReleaseWait(cancellationToken)) - { - if (_isSendingAudioStream) - { - throw new InvalidOperationException($"Only one stream of audio may be sent at once."); - } - _isSendingAudioStream = true; - } - byte[] buffer = ArrayPool.Shared.Rent(1024 * 16); - try - { - while (true) - { - int bytesRead = audio.Read(buffer, 0, buffer.Length); - if (bytesRead == 0) - { - break; - } - - ReadOnlyMemory audioMemory = buffer.AsMemory(0, bytesRead); - BinaryData audioData = BinaryData.FromBytes(audioMemory); - InternalRealtimeClientEventInputAudioBufferAppend internalCommand = new(audioData); - BinaryData requestData = ModelReaderWriter.Write(internalCommand); - SendCommand(requestData, cancellationToken.ToRequestOptions()); - } - } - finally - { - ArrayPool.Shared.Return(buffer); - using (_audioSendSemaphore.AutoReleaseWait(cancellationToken)) - { - _isSendingAudioStream = false; - } - } - } - - /// - /// Transmits a single chunk of audio. - /// - /// - /// - /// - /// - public virtual async Task SendInputAudioAsync(BinaryData audio, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(audio, nameof(audio)); - using (await _audioSendSemaphore.AutoReleaseWaitAsync(cancellationToken).ConfigureAwait(false)) - { - if (_isSendingAudioStream) - { - throw new InvalidOperationException($"Cannot send a standalone audio chunk while a stream is already in progress."); - } - // TODO: consider automatically limiting/breaking size of chunk (as with streaming) - InternalRealtimeClientEventInputAudioBufferAppend internalCommand = new(audio); - BinaryData requestData = ModelReaderWriter.Write(internalCommand); - await SendCommandAsync(requestData, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - } - } - - /// - /// Transmits a single chunk of audio. - /// - /// - /// - /// - /// - public virtual void SendInputAudio(BinaryData audio, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(audio, nameof(audio)); - using (_audioSendSemaphore.AutoReleaseWait(cancellationToken)) - { - if (_isSendingAudioStream) - { - throw new InvalidOperationException($"Cannot send a standalone audio chunk while a stream is already in progress."); - } - // TODO: consider automatically limiting/breaking size of chunk (as with streaming) - InternalRealtimeClientEventInputAudioBufferAppend internalCommand = new(audio); - BinaryData requestData = ModelReaderWriter.Write(internalCommand); - SendCommand(requestData, cancellationToken.ToRequestOptions()); - } - } - - public virtual async Task ClearInputAudioAsync(CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventInputAudioBufferClear internalCommand = new(); - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - - public virtual void ClearInputAudio(CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventInputAudioBufferClear internalCommand = new(); - SendCommand(internalCommand, cancellationToken); - } - - public virtual async Task ConfigureSessionAsync(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(sessionOptions, nameof(sessionOptions)); - InternalRealtimeClientEventSessionUpdate internalCommand = new(sessionOptions); - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - - public virtual void ConfigureSession(ConversationSessionOptions sessionOptions, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(sessionOptions, nameof(sessionOptions)); - InternalRealtimeClientEventSessionUpdate internalCommand = new(sessionOptions); - SendCommand(internalCommand, cancellationToken); - } - - public virtual async Task AddItemAsync(ConversationItem item, CancellationToken cancellationToken = default) - => await AddItemAsync(item, previousItemId: null, cancellationToken).ConfigureAwait(false); - - public virtual void AddItem(ConversationItem item, CancellationToken cancellationToken = default) - => AddItem(item, previousItemId: null, cancellationToken); - - public virtual async Task AddItemAsync(ConversationItem item, string previousItemId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(item, nameof(item)); - InternalRealtimeClientEventConversationItemCreate internalCommand = new(item) - { - PreviousItemId = previousItemId, - }; - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - - public virtual void AddItem(ConversationItem item, string previousItemId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(item, nameof(item)); - InternalRealtimeClientEventConversationItemCreate internalCommand = new(item) - { - PreviousItemId = previousItemId, - }; - SendCommand(internalCommand, cancellationToken); - } - - public virtual async Task DeleteItemAsync(string itemId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(itemId, nameof(itemId)); - InternalRealtimeClientEventConversationItemDelete internalCommand = new(itemId); - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - - public virtual void DeleteItem(string itemId, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(itemId, nameof(itemId)); - InternalRealtimeClientEventConversationItemDelete internalCommand = new(itemId); - SendCommand(internalCommand, cancellationToken); - } - - public virtual async Task TruncateItemAsync(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(itemId, nameof(itemId)); - InternalRealtimeClientEventConversationItemTruncate internalCommand = new( - itemId: itemId, - contentIndex: contentPartIndex, - audioEndMs: (int)audioDuration.TotalMilliseconds); - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - - public virtual void TruncateItem(string itemId, int contentPartIndex, TimeSpan audioDuration, CancellationToken cancellationToken = default) - { - Argument.AssertNotNull(itemId, nameof(itemId)); - InternalRealtimeClientEventConversationItemTruncate internalCommand = new( - itemId: itemId, - contentIndex: contentPartIndex, - audioEndMs: (int)audioDuration.TotalMilliseconds); - SendCommand(internalCommand, cancellationToken); - } - - public virtual async Task CommitPendingAudioAsync(CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventInputAudioBufferCommit internalCommand = new(); - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - - public virtual void CommitPendingAudio(CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventInputAudioBufferCommit internalCommand = new(); - SendCommand(internalCommand, cancellationToken); - } - - public virtual async Task InterruptResponseAsync(CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventResponseCancel internalCommand = new(); - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - - public virtual void InterruptResponse(CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventResponseCancel internalCommand = new(); - SendCommand(internalCommand, cancellationToken); - } - - public virtual async Task StartResponseAsync(ConversationResponseOptions options, CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventResponseCreate internalCommand = new( - kind: InternalRealtimeClientEventType.ResponseCreate, - eventId: null, - additionalBinaryDataProperties: null, - response: options); - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - public virtual async Task StartResponseAsync(CancellationToken cancellationToken = default) - { - await StartResponseAsync(new ConversationResponseOptions(), cancellationToken).ConfigureAwait(false); - } - - public virtual void StartResponse(ConversationResponseOptions options, CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventResponseCreate internalCommand = new( - kind: InternalRealtimeClientEventType.ResponseCreate, - eventId: null, - additionalBinaryDataProperties: null, - response: options); - SendCommand(internalCommand, cancellationToken); - } - - public void StartResponse(CancellationToken cancellationToken = default) - { - StartResponse(new ConversationResponseOptions(), cancellationToken); - } - - public virtual async Task CancelResponseAsync(CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventResponseCancel internalCommand = new(); - await SendCommandAsync(internalCommand, cancellationToken).ConfigureAwait(false); - } - - public virtual void CancelResponse(CancellationToken cancellationToken = default) - { - InternalRealtimeClientEventResponseCancel internalCommand = new(); - SendCommand(internalCommand, cancellationToken); - } - - public virtual async IAsyncEnumerable ReceiveUpdatesAsync([EnumeratorCancellation] CancellationToken cancellationToken = default) - { - await foreach (ClientResult protocolEvent in ReceiveUpdatesAsync(cancellationToken.ToRequestOptions())) - { - ConversationUpdate nextUpdate = (ConversationUpdate)protocolEvent; - yield return nextUpdate; - } - } - - public virtual IEnumerable ReceiveUpdates(CancellationToken cancellationToken = default) - { - throw new NotImplementedException(); - } - - internal virtual async Task SendCommandAsync(InternalRealtimeClientEvent command, CancellationToken cancellationToken = default) - { - BinaryData requestData = ModelReaderWriter.Write(command); - RequestOptions cancellationOptions = cancellationToken.ToRequestOptions(); - await SendCommandAsync(requestData, cancellationOptions).ConfigureAwait(false); - } - - internal virtual void SendCommand(InternalRealtimeClientEvent command, CancellationToken cancellationToken = default) - { - BinaryData requestData = ModelReaderWriter.Write(command); - RequestOptions cancellationOptions = cancellationToken.ToRequestOptions(); - SendCommand(requestData, cancellationOptions); - } - - public void Dispose() - { - WebSocket?.Dispose(); - } -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationErrorUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationErrorUpdate.cs deleted file mode 100644 index f080866c4..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationErrorUpdate.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type error, which is received when a problem is encountered while -/// processing a request command or generating another response command. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventError")] -public partial class ConversationErrorUpdate -{ - [CodeGenMember("Error")] - private readonly InternalRealtimeServerEventErrorError _error; - - public string ErrorCode => _error?.Code; - /// - /// Gets the identifier that correlates to a prior event associated with this error. - /// - public string ErrorEventId => _error?.EventId; - public string Message => _error?.Message; - public string ParameterName => _error?.Param; -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioClearedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioClearedUpdate.cs deleted file mode 100644 index c653fd500..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioClearedUpdate.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type input_audio_buffer.cleared, which is received when a preceding -/// input_audio_buffer.clear command -/// ( has completed -/// purging the user audio input buffer. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventInputAudioBufferCleared")] -public partial class ConversationInputAudioClearedUpdate -{ } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioCommittedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioCommittedUpdate.cs deleted file mode 100644 index 45f951b6b..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputAudioCommittedUpdate.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type input_audio_buffer.committed, which is received when a preceding -/// input_audio_buffer.commit command -/// ( has -/// completed submission of the user audio input buffer. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventInputAudioBufferCommitted")] -public partial class ConversationInputAudioCommittedUpdate -{ } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechFinishedUpdate.cs deleted file mode 100644 index 008fafef5..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechFinishedUpdate.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type input_audio_buffer.speech_started, which is received when a configured -/// server_vad turn_detection (including the default) processes the beginning of evaluated human speech -/// within the input audio buffer. This will be paired with a matching -/// when the end of speech is detected. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventInputAudioBufferSpeechStopped")] -public partial class ConversationInputSpeechFinishedUpdate -{ - [CodeGenMember("AudioEndMs")] - private readonly int _audioEndMs; - - public TimeSpan AudioEndTime => _audioEndTime ??= TimeSpan.FromMilliseconds(_audioEndMs); - private TimeSpan? _audioEndTime; -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechStartedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechStartedUpdate.cs deleted file mode 100644 index 20f90ee44..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputSpeechStartedUpdate.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type input_audio_buffer.speech_started, which is received when a configured -/// server_vad turn_detection (including the default) processes the end of evaluated human speech -/// within the input audio buffer. This will be paired with a matching -/// that precedes this command, received when the beginning of human -/// speech is detected. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventInputAudioBufferSpeechStarted")] -public partial class ConversationInputSpeechStartedUpdate -{ - [CodeGenMember("AudioStartMs")] - private readonly int _audioStartMs; - - public TimeSpan AudioStartTime => _audioStartTime ??= TimeSpan.FromMilliseconds(_audioStartMs); - private TimeSpan? _audioStartTime; -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFailedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFailedUpdate.cs deleted file mode 100644 index bd18e4113..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFailedUpdate.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type conversation.item.input_audio_transcription.failed, which is received -/// when a problem is encountered while processing transcription of the user audio input buffer via configured -/// (input_audio_transcription in session.update) -/// settings. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionFailed")] -public partial class ConversationInputTranscriptionFailedUpdate -{ - [CodeGenMember("Error")] - private readonly InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError _error; - - public string ErrorCode => _error?.Code; - public string ErrorMessage => _error?.Message; - public string ErrorParameterName => _error?.Param; -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFinishedUpdate.cs deleted file mode 100644 index f3024b4b3..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationInputTranscriptionFinishedUpdate.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type conversation.item.input_audio_transcription.completed, which is -/// received when a configured input_audio_transcription has completed its parallel processing of the user -/// audio input buffer. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventConversationItemInputAudioTranscriptionCompleted")] -public partial class ConversationInputTranscriptionFinishedUpdate -{ } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemCreatedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemCreatedUpdate.cs deleted file mode 100644 index cb355ba23..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemCreatedUpdate.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type conversation.item.created, which is received when a new item has -/// been emplaced into the conversation. In the case of model-generated items, this may be preceded by a -/// (response.output_item.added) command, in which case the newly- -/// created item associated with this update will not yet have content associated with it and will instead have -/// content streamed via *delta commands before finalization via a -/// (response.output_item.done). -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventConversationItemCreated")] -public partial class ConversationItemCreatedUpdate -{ - [CodeGenMember("Item")] - private readonly InternalRealtimeConversationResponseItem _internalItem; - - public string ItemId => _internalItem.Id; - - public ConversationMessageRole? MessageRole => _internalItem.MessageRole; - - public IReadOnlyList MessageContentParts => _internalItem.MessageContentParts; - - public string FunctionName => _internalItem.FunctionName; - - public string FunctionCallId => _internalItem.FunctionCallId; - - public string FunctionCallArguments => _internalItem.FunctionCallArguments; - - public string FunctionCallOutput => _internalItem.FunctionCallOutput; -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemDeletedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemDeletedUpdate.cs deleted file mode 100644 index 4d403e61e..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemDeletedUpdate.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type conversation.item.deleted, which is received in response to a -/// conversation.item.delete request command -/// (). -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventConversationItemDeleted")] -public partial class ConversationItemDeletedUpdate -{ } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioFinishedUpdate.cs deleted file mode 100644 index 815b84b98..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioFinishedUpdate.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type response.audio.done, which is received after correlated -/// (response.output_item.added), -/// (conversation.item.created), -/// (response.content_part.added), and -/// commands. This update indicates that all streamed delta content -/// has completed and the associated content part will soon be completed. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventResponseAudioDone")] -public partial class ConversationItemStreamingAudioFinishedUpdate -{ } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs deleted file mode 100644 index 97c8a6669..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type response.audio_transcript.done, which is received after all -/// commands for an output audio content part have been -/// received. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventResponseAudioTranscriptDone")] -public partial class ConversationItemStreamingAudioTranscriptionFinishedUpdate -{ } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingFinishedUpdate.cs deleted file mode 100644 index 1112b4c86..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingFinishedUpdate.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type response.output_item.done, which is received when a new item that was -/// added to a conversation by the model has finished streaming all of its content parts and other data. This update -/// is preceded by a and some number of *delta commands (such as -/// ). -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventResponseOutputItemDone")] -public partial class ConversationItemStreamingFinishedUpdate -{ - [CodeGenMember("Item")] - private readonly InternalRealtimeConversationResponseItem _internalItem; - - public string ItemId => _internalItem.Id; - - public ConversationMessageRole? MessageRole => _internalItem.MessageRole; - - public IReadOnlyList MessageContentParts => _internalItem.MessageContentParts; - - public string FunctionName => _internalItem.FunctionName; - - public string FunctionCallId => _internalItem.FunctionCallId; - - public string FunctionCallArguments => _internalItem.FunctionCallArguments; - - public string FunctionCallOutput => _internalItem.FunctionCallOutput; -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartDeltaUpdate.Serialization.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartDeltaUpdate.Serialization.cs deleted file mode 100644 index 2dd0c9009..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartDeltaUpdate.Serialization.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; - -namespace OpenAI.RealtimeConversation; - -public partial class ConversationItemStreamingPartDeltaUpdate : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeConversationContentPartDeltaUpdate, writer, options); - - ConversationItemStreamingPartDeltaUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeItemStreamingPartDeltaUpdate, ref reader, options); - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, options); - - ConversationItemStreamingPartDeltaUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) - => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeItemStreamingPartDeltaUpdate, data, options); - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - internal static void SerializeConversationContentPartDeltaUpdate(ConversationItemStreamingPartDeltaUpdate instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - List possibleUnionVariants = - [ - instance._contentPartAdded, - instance._audioDelta, - instance._outputTranscriptionDelta, - instance._textDelta, - instance._functionArgumentsDelta - ]; - - foreach (ConversationUpdate unionVariant in possibleUnionVariants) - { - if (unionVariant is not null) - { - writer.WriteObjectValue(unionVariant, options); - break; - } - } - } - - internal static ConversationItemStreamingPartDeltaUpdate DeserializeItemStreamingPartDeltaUpdate(JsonElement element, ModelReaderWriterOptions options = null) - { - if (element.ValueKind != JsonValueKind.Object) - { - return null; - } - foreach (JsonProperty elementProperty in element.EnumerateObject()) - { - if (elementProperty.NameEquals("type"u8)) - { - string updateType = elementProperty.Value.ToString(); - - ConversationUpdate baseUpdate = - StringComparer.OrdinalIgnoreCase.Equals(updateType, ConversationUpdateKind.ItemContentPartStarted.ToSerialString()) - ? InternalRealtimeServerEventResponseContentPartAdded.DeserializeInternalRealtimeServerEventResponseContentPartAdded(element, options) - : StringComparer.OrdinalIgnoreCase.Equals(updateType, ConversationUpdateKind.ItemStreamingPartAudioDelta.ToSerialString()) - ? InternalRealtimeServerEventResponseAudioDelta.DeserializeInternalRealtimeServerEventResponseAudioDelta(element, options) - : StringComparer.OrdinalIgnoreCase.Equals(updateType, ConversationUpdateKind.ItemStreamingPartAudioTranscriptionDelta.ToSerialString()) - ? InternalRealtimeServerEventResponseAudioTranscriptDelta.DeserializeInternalRealtimeServerEventResponseAudioTranscriptDelta(element, options) - : StringComparer.OrdinalIgnoreCase.Equals(updateType, ConversationUpdateKind.ItemStreamingPartTextDelta.ToSerialString()) - ? InternalRealtimeServerEventResponseTextDelta.DeserializeInternalRealtimeServerEventResponseTextDelta(element, options) - : StringComparer.OrdinalIgnoreCase.Equals(updateType, ConversationUpdateKind.ItemStreamingFunctionCallArgumentsDelta.ToSerialString()) - ? InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.DeserializeInternalRealtimeServerEventResponseFunctionCallArgumentsDelta(element, options) - : null; - - return new ConversationItemStreamingPartDeltaUpdate(baseUpdate); - } - } - return null; - } -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartDeltaUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartDeltaUpdate.cs deleted file mode 100644 index 2d26b128f..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartDeltaUpdate.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// -/// -/// This type is a shared representation of the following response command types: -/// -/// response.content_part.added -/// response.audio.delta -/// response.text.delta -/// response.audio_transcript.delta -/// response.function_call_arguments.delta -/// -/// -[Experimental("OPENAI002")] -public partial class ConversationItemStreamingPartDeltaUpdate : ConversationUpdate -{ - private readonly InternalRealtimeServerEventResponseContentPartAdded _contentPartAdded; - private readonly InternalRealtimeServerEventResponseAudioDelta _audioDelta; - private readonly InternalRealtimeServerEventResponseAudioTranscriptDelta _outputTranscriptionDelta; - private readonly InternalRealtimeServerEventResponseTextDelta _textDelta; - private readonly InternalRealtimeServerEventResponseFunctionCallArgumentsDelta _functionArgumentsDelta; - - public string ResponseId - => _contentPartAdded?.ResponseId - ?? _audioDelta?.ResponseId - ?? _outputTranscriptionDelta?.ResponseId - ?? _textDelta?.ResponseId - ?? _functionArgumentsDelta?.ResponseId; - - public string ItemId - => _contentPartAdded?.ItemId - ?? _audioDelta?.ItemId - ?? _outputTranscriptionDelta?.ItemId - ?? _textDelta?.ItemId - ?? _functionArgumentsDelta?.ItemId; - - public int ItemIndex - => _contentPartAdded?.OutputIndex - ?? _audioDelta?.OutputIndex - ?? _outputTranscriptionDelta?.OutputIndex - ?? _textDelta?.OutputIndex - ?? _functionArgumentsDelta?.OutputIndex - ?? 0; - - public int ContentPartIndex - => _contentPartAdded?.ContentIndex - ?? _audioDelta?.ContentIndex - ?? _outputTranscriptionDelta?.ContentIndex - ?? _textDelta?.ContentIndex - ?? 0; - - public BinaryData AudioBytes - => _audioDelta?.Delta; - - public string AudioTranscript - => _contentPartAdded?.AudioTranscript - ?? _outputTranscriptionDelta?.Delta; - - public string Text - => _contentPartAdded?.Text - ?? _textDelta?.Delta; - - public string FunctionCallId - => _functionArgumentsDelta?.CallId; - - public string FunctionArguments - => _functionArgumentsDelta?.Delta; - - internal ConversationItemStreamingPartDeltaUpdate(ConversationUpdate baseUpdate) - : base(baseUpdate.EventId, baseUpdate.Kind, additionalBinaryDataProperties: null) - { - _contentPartAdded = baseUpdate as InternalRealtimeServerEventResponseContentPartAdded; - _audioDelta = baseUpdate as InternalRealtimeServerEventResponseAudioDelta; - _outputTranscriptionDelta = baseUpdate as InternalRealtimeServerEventResponseAudioTranscriptDelta; - _textDelta = baseUpdate as InternalRealtimeServerEventResponseTextDelta; - _functionArgumentsDelta = baseUpdate as InternalRealtimeServerEventResponseFunctionCallArgumentsDelta; - } -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartFinishedUpdate.Serialization.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartFinishedUpdate.Serialization.cs deleted file mode 100644 index 587a660d4..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartFinishedUpdate.Serialization.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; - -namespace OpenAI.RealtimeConversation; - -public partial class ConversationItemStreamingPartFinishedUpdate : IJsonModel -{ - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, SerializeConversationContentPartDeltaUpdate, writer, options); - - ConversationItemStreamingPartFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeItemStreamingPartFinishedUpdate, ref reader, options); - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) - => CustomSerializationHelpers.SerializeInstance(this, options); - - ConversationItemStreamingPartFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) - => CustomSerializationHelpers.DeserializeNewInstance(this, DeserializeItemStreamingPartFinishedUpdate, data, options); - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - internal static void SerializeConversationContentPartDeltaUpdate(ConversationItemStreamingPartFinishedUpdate instance, Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - List possibleUnionVariants = - [ - instance._contentPartDone, - instance._functionCallArgumentsDone, - ]; - - foreach (ConversationUpdate unionVariant in possibleUnionVariants) - { - if (unionVariant is not null) - { - writer.WriteObjectValue(unionVariant, options); - break; - } - } - } - - internal static ConversationItemStreamingPartFinishedUpdate DeserializeItemStreamingPartFinishedUpdate(JsonElement element, ModelReaderWriterOptions options = null) - { - if (element.ValueKind != JsonValueKind.Object) - { - return null; - } - foreach (JsonProperty elementProperty in element.EnumerateObject()) - { - if (elementProperty.NameEquals("type"u8)) - { - string updateType = elementProperty.Value.ToString(); - - ConversationUpdate baseUpdate = - StringComparer.OrdinalIgnoreCase.Equals(updateType, ConversationUpdateKind.ItemContentPartFinished.ToSerialString()) - ? InternalRealtimeServerEventResponseContentPartDone.DeserializeInternalRealtimeServerEventResponseContentPartDone(element, options) - : StringComparer.OrdinalIgnoreCase.Equals(updateType, ConversationUpdateKind.ItemStreamingFunctionCallArgumentsFinished.ToSerialString()) - ? InternalRealtimeServerEventResponseFunctionCallArgumentsDone.DeserializeInternalRealtimeServerEventResponseFunctionCallArgumentsDone(element, options) - : null; - - return new ConversationItemStreamingPartFinishedUpdate(baseUpdate); - } - } - return null; - } -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartFinishedUpdate.cs deleted file mode 100644 index 11636b082..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingPartFinishedUpdate.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// -/// -/// This type is a shared representation of the response.function_call_arguments.done and -/// response.content_part.done response commands. -/// -public partial class ConversationItemStreamingPartFinishedUpdate : ConversationUpdate -{ - private readonly InternalRealtimeServerEventResponseContentPartDone _contentPartDone; - private readonly InternalRealtimeServerEventResponseFunctionCallArgumentsDone _functionCallArgumentsDone; - - public string ResponseId - => _contentPartDone?.ResponseId - ?? _functionCallArgumentsDone?.ResponseId; - - public string ItemId - => _contentPartDone?.ItemId - ?? _functionCallArgumentsDone?.ItemId; - - public int ItemIndex - => _contentPartDone?.OutputIndex - ?? _functionCallArgumentsDone?.OutputIndex - ?? 0; - - public int ContentPartIndex - => _contentPartDone?.ContentIndex - ?? 0; - - public string AudioTranscript => _contentPartDone?.AudioTranscript; - - public string Text => _contentPartDone?.Text; - - public string FunctionCallId => _functionCallArgumentsDone?.CallId; - - public string FunctionArguments => _functionCallArgumentsDone?.Arguments; - - - internal ConversationItemStreamingPartFinishedUpdate(ConversationUpdate baseUpdate) - : base(baseUpdate.EventId, baseUpdate.Kind, additionalBinaryDataProperties: null) - { - _contentPartDone = baseUpdate as InternalRealtimeServerEventResponseContentPartDone; - _functionCallArgumentsDone = baseUpdate as InternalRealtimeServerEventResponseFunctionCallArgumentsDone; - } -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingStartedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingStartedUpdate.cs deleted file mode 100644 index 573336a01..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingStartedUpdate.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type response.output_item.added, which is received when a response turn -/// has begun generation of a new conversation item. This new item will have content streamed via *delta -/// commands and paired with an ending response.output_item.done update. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventResponseOutputItemAdded")] -public partial class ConversationItemStreamingStartedUpdate -{ - [CodeGenMember("Item")] - private readonly InternalRealtimeConversationResponseItem _internalItem; - - public string ItemId => _internalItem.Id; - - [CodeGenMember("OutputIndex")] - public int ItemIndex { get; } - - public ConversationMessageRole? MessageRole => _internalItem.MessageRole; - - public IReadOnlyList MessageContentParts => _internalItem.MessageContentParts; - - public string FunctionName => _internalItem.FunctionName; - - public string FunctionCallId => _internalItem.FunctionCallId; - - public string FunctionCallArguments => _internalItem.FunctionCallArguments; - - public string FunctionCallOutput => _internalItem.FunctionCallOutput; -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingTextFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingTextFinishedUpdate.cs deleted file mode 100644 index 4d0cf4fef..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemStreamingTextFinishedUpdate.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type response.text.done, which is received after correlated -/// (response.output_item.added), -/// (conversation.item.created), -/// (response.content_part.added), and -/// commands. This update indicates that all streamed delta content -/// has completed and the associated content part will soon be completed. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventResponseTextDone")] -public partial class ConversationItemStreamingTextFinishedUpdate -{ } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemTruncatedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemTruncatedUpdate.cs deleted file mode 100644 index 34308ded0..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationItemTruncatedUpdate.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ClientModel.Primitives; -using System.Text.Json; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type conversation.item.truncated, which is received in response to a -/// conversation.item.truncate request command -/// (). -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventConversationItemTruncated")] -public partial class ConversationItemTruncatedUpdate -{ } diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationRateLimitsUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationRateLimitsUpdate.cs deleted file mode 100644 index 8feadc090..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationRateLimitsUpdate.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type rate_limits_updated, which is received during a response and provides -/// the most recent information about configured rate limits. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventRateLimitsUpdated")] -public partial class ConversationRateLimitsUpdate -{ - public ConversationRateLimitDetailsItem TokenDetails - => _tokenDetails ??= AllDetails.FirstOrDefault(item => item.Name == "tokens"); - private ConversationRateLimitDetailsItem _tokenDetails; - public ConversationRateLimitDetailsItem RequestDetails - => _tokenDetails ??= AllDetails.FirstOrDefault(item => item.Name == "requests"); - - [CodeGenMember("RateLimits")] - public IReadOnlyList AllDetails { get; } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseFinishedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseFinishedUpdate.cs deleted file mode 100644 index 3bcab28c5..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseFinishedUpdate.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type response.done, which is received when a model response turn has -/// completed and no further content part or item information will be transmitted. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventResponseDone")] -public partial class ConversationResponseFinishedUpdate -{ - [CodeGenMember("Response")] - internal readonly InternalRealtimeResponse _internalResponse; - - public string ResponseId => _internalResponse?.Id; - - public ConversationStatus? Status => _internalResponse?.Status; - - public ConversationStatusDetails StatusDetails => _internalResponse.StatusDetails; - - [CodeGenMember("Output")] - public IReadOnlyList CreatedItems => _internalResponse?.Output ?? []; - - public ConversationTokenUsage Usage => _internalResponse.Usage; -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseStartedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseStartedUpdate.cs deleted file mode 100644 index 65d868a65..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationResponseStartedUpdate.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type response.created, which is received when a new service response turn -/// has been initiated. A response will snapshot conversation and input audio buffer state for the duration of -/// generation and may be triggered by either configured voice activity detection at end of speech or by a caller- -/// initiated response.create -/// (). -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventResponseCreated")] -public partial class ConversationResponseStartedUpdate -{ - [CodeGenMember("Response")] - internal readonly InternalRealtimeResponse _internalResponse; - - public string ResponseId => _internalResponse.Id; - - public ConversationStatus Status => _internalResponse.Status.Value; - - public ConversationStatusDetails StatusDetails => _internalResponse.StatusDetails; - - [CodeGenMember("Output")] - public IReadOnlyList CreatedItems => _internalResponse?.Output ?? []; - - public ConversationTokenUsage Usage => _internalResponse.Usage; -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionConfiguredUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionConfiguredUpdate.cs deleted file mode 100644 index 89d909ecd..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionConfiguredUpdate.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type session.updated, which is received when a preceding -/// session.update request command -/// () -/// has been applied to the session. New session configuration related to response generation will not take effect -/// until the next response; shared session configuration, such as input audio format, will apply immediately. -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventSessionUpdated")] -public partial class ConversationSessionConfiguredUpdate -{ - [CodeGenMember("Session")] - internal readonly InternalRealtimeResponseSession _internalSession; - - public string SessionId => _internalSession.Id; - - public string Model => _internalSession.Model; - - public ConversationContentModalities ContentModalities - => ConversationContentModalitiesExtensions.FromInternalModalities(_internalSession.Modalities); - - public string Instructions => _internalSession.Instructions; - - public ConversationVoice Voice => _internalSession.Voice; - - public ConversationAudioFormat InputAudioFormat => _internalSession.InputAudioFormat; - public ConversationAudioFormat OutputAudioFormat => _internalSession.OutputAudioFormat; - - public ConversationInputTranscriptionOptions InputTranscriptionOptions => _internalSession.InputAudioTranscription; - public ConversationTurnDetectionOptions TurnDetectionOptions => _internalSession.TurnDetection; - public IReadOnlyList Tools => _internalSession.Tools; - public ConversationToolChoice ToolChoice => ConversationToolChoice.FromBinaryData(_internalSession.ToolChoice); - public float Temperature => _internalSession.Temperature; - public ConversationMaxTokensChoice MaxOutputTokens => _internalSession.MaxResponseOutputTokens; -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionStartedUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionStartedUpdate.cs deleted file mode 100644 index 7ca5c9b82..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationSessionStartedUpdate.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -/// -/// The update (response command) of type session.created, which is received when a new session has been -/// established. This is typically received immediately following connection and the session properties reflect -/// the initial, default state of the session. Configuration changes can be made via the session.update request -/// command -/// (). -/// -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventSessionCreated")] -public partial class ConversationSessionStartedUpdate -{ - [CodeGenMember("Session")] - internal readonly InternalRealtimeResponseSession _internalSession; - - public string SessionId => _internalSession.Id; - - public string Model => _internalSession.Model; - - public ConversationContentModalities ContentModalities - => ConversationContentModalitiesExtensions.FromInternalModalities(_internalSession.Modalities); - - public string Instructions => _internalSession.Instructions; - - public ConversationVoice Voice => _internalSession.Voice; - - public ConversationAudioFormat InputAudioFormat => _internalSession.InputAudioFormat; - public ConversationAudioFormat OutputAudioFormat => _internalSession.OutputAudioFormat; - - public ConversationInputTranscriptionOptions InputTranscriptionOptions => _internalSession.InputAudioTranscription; - public ConversationTurnDetectionOptions TurnDetectionOptions => _internalSession.TurnDetection; - public IReadOnlyList Tools => _internalSession.Tools; - public ConversationToolChoice ToolChoice => ConversationToolChoice.FromBinaryData(_internalSession.ToolChoice); - public float Temperature => _internalSession.Temperature; - public ConversationMaxTokensChoice MaxOutputTokens => _internalSession.MaxResponseOutputTokens; -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.Serialization.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.Serialization.cs deleted file mode 100644 index 8c3f22aa2..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.Serialization.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.ClientModel.Primitives; -using System.Diagnostics.CodeAnalysis; -using System.Text.Json; - -namespace OpenAI.RealtimeConversation; - -public partial class ConversationUpdate -{ - internal static ConversationUpdate DeserializeConversationUpdate(JsonElement element, ModelReaderWriterOptions options = null) - { - options ??= ModelSerializationExtensions.WireOptions; - - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - if (element.TryGetProperty("type", out JsonElement discriminator)) - { - return discriminator.GetString() switch - { - "conversation.created" => InternalRealtimeServerEventConversationCreated.DeserializeInternalRealtimeServerEventConversationCreated(element, options), - "conversation.item.created" => ConversationItemCreatedUpdate.DeserializeConversationItemCreatedUpdate(element, options), - "conversation.item.deleted" => ConversationItemDeletedUpdate.DeserializeConversationItemDeletedUpdate(element, options), - "conversation.item.input_audio_transcription.completed" => ConversationInputTranscriptionFinishedUpdate.DeserializeConversationInputTranscriptionFinishedUpdate(element, options), - "conversation.item.input_audio_transcription.failed" => ConversationInputTranscriptionFailedUpdate.DeserializeConversationInputTranscriptionFailedUpdate(element, options), - "conversation.item.truncated" => ConversationItemTruncatedUpdate.DeserializeConversationItemTruncatedUpdate(element, options), - "error" => ConversationErrorUpdate.DeserializeConversationErrorUpdate(element, options), - "input_audio_buffer.cleared" => ConversationInputAudioClearedUpdate.DeserializeConversationInputAudioClearedUpdate(element, options), - "input_audio_buffer.committed" => ConversationInputAudioCommittedUpdate.DeserializeConversationInputAudioCommittedUpdate(element, options), - "input_audio_buffer.speech_started" => ConversationInputSpeechStartedUpdate.DeserializeConversationInputSpeechStartedUpdate(element, options), - "input_audio_buffer.speech_stopped" => ConversationInputSpeechFinishedUpdate.DeserializeConversationInputSpeechFinishedUpdate(element, options), - "rate_limits.updated" => ConversationRateLimitsUpdate.DeserializeConversationRateLimitsUpdate(element, options), - "response.created" => ConversationResponseStartedUpdate.DeserializeConversationResponseStartedUpdate(element, options), - "response.done" => ConversationResponseFinishedUpdate.DeserializeConversationResponseFinishedUpdate(element, options), - "session.created" => ConversationSessionStartedUpdate.DeserializeConversationSessionStartedUpdate(element, options), - "session.updated" => ConversationSessionConfiguredUpdate.DeserializeConversationSessionConfiguredUpdate(element, options), - - "response.output_item.added" => ConversationItemStreamingStartedUpdate.DeserializeConversationItemStreamingStartedUpdate(element, options), - "response.output_item.done" => ConversationItemStreamingFinishedUpdate.DeserializeConversationItemStreamingFinishedUpdate(element, options), - - "response.content_part.added" - or "response.audio_transcript.delta" - or "response.audio.delta" - or "response.text.delta" - or "response.function_call_arguments.delta" => ConversationItemStreamingPartDeltaUpdate.DeserializeItemStreamingPartDeltaUpdate(element, options), - - "response.text.done" => ConversationItemStreamingTextFinishedUpdate.DeserializeConversationItemStreamingTextFinishedUpdate(element, options), - "response.audio_transcript.done" => ConversationItemStreamingAudioTranscriptionFinishedUpdate.DeserializeConversationItemStreamingAudioTranscriptionFinishedUpdate(element, options), - "response.audio.done" => ConversationItemStreamingAudioFinishedUpdate.DeserializeConversationItemStreamingAudioFinishedUpdate(element, options), - - "response.function_call_arguments.done" - or "response.content_part.done" => ConversationItemStreamingPartFinishedUpdate.DeserializeItemStreamingPartFinishedUpdate(element, options), - - _ => UnknownRealtimeServerEvent.DeserializeUnknownRealtimeServerEvent(element, options), - - }; - } - return UnknownRealtimeServerEvent.DeserializeUnknownRealtimeServerEvent(element, options); - } -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.cs deleted file mode 100644 index c5477af09..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdate.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.ClientModel.Primitives; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEvent")] -public partial class ConversationUpdate -{ - [CodeGenMember("Kind")] - public ConversationUpdateKind Kind { get; internal protected set; } - - public BinaryData GetRawContent() => ModelReaderWriter.Write(this); -} \ No newline at end of file diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.Serialization.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.Serialization.cs deleted file mode 100644 index ab32d4daa..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.Serialization.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; - -namespace OpenAI.RealtimeConversation; -internal static partial class ConversationUpdateKindExtensions -{ - public static string ToSerialString(this ConversationUpdateKind value) => value switch - { - ConversationUpdateKind.SessionStarted => "session.created", - ConversationUpdateKind.SessionConfigured => "session.updated", - // ConversationUpdateKind.ConversationCreated => "conversation.created", - ConversationUpdateKind.ItemCreated => "conversation.item.created", - ConversationUpdateKind.ItemDeleted => "conversation.item.deleted", - ConversationUpdateKind.ItemTruncated => "conversation.item.truncated", - ConversationUpdateKind.ResponseStarted => "response.created", - ConversationUpdateKind.ResponseFinished => "response.done", - ConversationUpdateKind.RateLimitsUpdated => "rate_limits.updated", - ConversationUpdateKind.ItemStreamingStarted => "response.output_item.added", - ConversationUpdateKind.ItemStreamingFinished => "response.output_item.done", - ConversationUpdateKind.ItemContentPartStarted => "response.content_part.added", - ConversationUpdateKind.ItemContentPartFinished => "response.content_part.done", - ConversationUpdateKind.ItemStreamingPartAudioDelta => "response.audio.delta", - ConversationUpdateKind.ItemStreamingPartAudioFinished => "response.audio.done", - ConversationUpdateKind.ItemStreamingPartAudioTranscriptionDelta => "response.audio_transcript.delta", - ConversationUpdateKind.ItemStreamingPartAudioTranscriptionFinished => "response.audio_transcript.done", - ConversationUpdateKind.ItemStreamingPartTextDelta => "response.text.delta", - ConversationUpdateKind.ItemStreamingPartTextFinished => "response.text.done", - ConversationUpdateKind.ItemStreamingFunctionCallArgumentsDelta => "response.function_call_arguments.delta", - ConversationUpdateKind.ItemStreamingFunctionCallArgumentsFinished => "response.function_call_arguments.done", - ConversationUpdateKind.InputSpeechStarted => "input_audio_buffer.speech_started", - ConversationUpdateKind.InputSpeechStopped => "input_audio_buffer.speech_stopped", - ConversationUpdateKind.InputTranscriptionFinished => "conversation.item.input_audio_transcription.completed", - ConversationUpdateKind.InputTranscriptionFailed => "conversation.item.input_audio_transcription.failed", - ConversationUpdateKind.InputAudioCommitted => "input_audio_buffer.committed", - ConversationUpdateKind.InputAudioCleared => "input_audio_buffer.cleared", - ConversationUpdateKind.Error => "error", - _ => null, - }; - - public static ConversationUpdateKind ToConversationUpdateKind(this string value) - { - if (StringComparer.OrdinalIgnoreCase.Equals(value, "session.created")) return ConversationUpdateKind.SessionStarted; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "session.updated")) return ConversationUpdateKind.SessionConfigured; - // if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.created")) return ConversationUpdateKind.ConversationCreated; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.created")) return ConversationUpdateKind.ItemCreated; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.deleted")) return ConversationUpdateKind.ItemDeleted; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.truncated")) return ConversationUpdateKind.ItemTruncated; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.created")) return ConversationUpdateKind.ResponseStarted; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.done")) return ConversationUpdateKind.ResponseFinished; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "rate_limits.updated")) return ConversationUpdateKind.RateLimitsUpdated; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.output_item.added")) return ConversationUpdateKind.ItemStreamingStarted; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.output_item.done")) return ConversationUpdateKind.ItemStreamingFinished; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.content_part.added")) return ConversationUpdateKind.ItemContentPartStarted; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.content_part.done")) return ConversationUpdateKind.ItemContentPartFinished; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.audio.delta")) return ConversationUpdateKind.ItemStreamingPartAudioDelta; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.audio.done")) return ConversationUpdateKind.ItemStreamingPartAudioFinished; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.audio_transcript.delta")) return ConversationUpdateKind.ItemStreamingPartAudioTranscriptionDelta; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.audio_transcript.done")) return ConversationUpdateKind.ItemStreamingPartAudioTranscriptionFinished; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.text.delta")) return ConversationUpdateKind.ItemStreamingPartTextDelta; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.text.done")) return ConversationUpdateKind.ItemStreamingPartTextFinished; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.function_call_arguments.delta")) return ConversationUpdateKind.ItemStreamingFunctionCallArgumentsDelta; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "response.function_call_arguments.done")) return ConversationUpdateKind.ItemStreamingFunctionCallArgumentsFinished; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_audio_buffer.speech_started")) return ConversationUpdateKind.InputSpeechStarted; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_audio_buffer.speech_stopped")) return ConversationUpdateKind.InputSpeechStopped; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.input_audio_transcription.completed")) return ConversationUpdateKind.InputTranscriptionFinished; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "conversation.item.input_audio_transcription.failed")) return ConversationUpdateKind.InputTranscriptionFailed; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_audio_buffer.committed")) return ConversationUpdateKind.InputAudioCommitted; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "input_audio_buffer.cleared")) return ConversationUpdateKind.InputAudioCleared; - if (StringComparer.OrdinalIgnoreCase.Equals(value, "error")) return ConversationUpdateKind.Error; - return ConversationUpdateKind.Unknown; - } -} diff --git a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.cs b/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.cs deleted file mode 100644 index df404d3de..000000000 --- a/src/Custom/RealtimeConversation/ResponseUpdates/ConversationUpdateKind.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; - -namespace OpenAI.RealtimeConversation; - -[Experimental("OPENAI002")] -[CodeGenType("RealtimeServerEventType")] -public enum ConversationUpdateKind -{ - /// - /// A response command that does not map to a type currently handled by the library. - /// - Unknown, - /// - /// The session.created response command. - /// - [CodeGenMember("SessionCreated")] - SessionStarted, - /// - /// The session.updated response command. - /// - [CodeGenMember("SessionUpdated")] - SessionConfigured, - /// - /// The conversation.item.created response command. - /// - [CodeGenMember("ConversationItemCreated")] - ItemCreated, - /// - /// The conversation.c.reated response command. - /// - /// - /// This update kind is currently unused. - /// - ConversationCreated, - /// - /// The conversation.item.deleted response command. - /// - [CodeGenMember("ConversationItemDeleted")] - ItemDeleted, - /// - /// The conversation.item.truncated response command. - /// - [CodeGenMember("ConversationItemTruncated")] - ItemTruncated, - /// - /// The response.created response command. - /// - [CodeGenMember("ResponseCreated")] - ResponseStarted, - /// - /// The response.done response command. - /// - [CodeGenMember("ResponseDone")] - ResponseFinished, - /// - /// The rate_limits.updated response command. - /// - [CodeGenMember("RateLimitsUpdated")] - RateLimitsUpdated, - /// - /// The response.output_item.added response command. - /// - [CodeGenMember("ResponseOutputItemAdded")] - ItemStreamingStarted, - /// - /// The response.output_item.done response command. - /// - [CodeGenMember("ResponseOutputItemDone")] - ItemStreamingFinished, - /// - /// The response.content_part.added response command. - /// - [CodeGenMember("ResponseContentPartAdded")] - ItemContentPartStarted, - /// - /// The response.content_part.done response command. - /// - [CodeGenMember("ResponseContentPartDone")] - ItemContentPartFinished, - /// - /// The response.audio.delta response command. - /// - [CodeGenMember("ResponseAudioDelta")] - ItemStreamingPartAudioDelta, - /// - /// The response.audio.done response command. - /// - [CodeGenMember("ResponseAudioDone")] - ItemStreamingPartAudioFinished, - /// - /// The response.audio_transcript.delta response command. - /// - [CodeGenMember("ResponseAudioTranscriptDelta")] - ItemStreamingPartAudioTranscriptionDelta, - /// - /// The response.audio_transcript.done response command. - /// - [CodeGenMember("ResponseAudioTranscriptDone")] - ItemStreamingPartAudioTranscriptionFinished, - /// - /// The response.text.delta response command. - /// - [CodeGenMember("ResponseTextDelta")] - ItemStreamingPartTextDelta, - /// - /// The response.text.done response command. - /// - [CodeGenMember("ResponseTextDone")] - ItemStreamingPartTextFinished, - /// - /// The response.function_call_arguments.delta response command. - /// - [CodeGenMember("ResponseFunctionCallArgumentsDelta")] - ItemStreamingFunctionCallArgumentsDelta, - /// - /// The response.function_call_arguments.done response command. - /// - [CodeGenMember("ResponseFunctionCallArgumentsDone")] - ItemStreamingFunctionCallArgumentsFinished, - /// - /// The input_audio_buffer.speech_started response command. - /// - [CodeGenMember("InputAudioBufferSpeechStarted")] - InputSpeechStarted, - /// - /// The input_audio_buffer.speech_stopped response command. - /// - [CodeGenMember("InputAudioBufferSpeechStopped")] - InputSpeechStopped, - /// - /// The conversation.item.input_audio_transcription.completed response command. - /// - [CodeGenMember("ConversationItemInputAudioTranscriptionCompleted")] - InputTranscriptionFinished, - /// - /// The conversation.item.input_audio_transcription.failed response command. - /// - [CodeGenMember("ConversationItemInputAudioTranscriptionFailed")] - InputTranscriptionFailed, - /// - /// The input_audio_buffer.committed response command. - /// - [CodeGenMember("InputAudioBufferCommitted")] - InputAudioCommitted, - /// - /// The input_audio_buffer.cleared response command. - /// - [CodeGenMember("InputAudioBufferCleared")] - InputAudioCleared, - /// - /// The error response command. - /// - [CodeGenMember("Error")] - Error -} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/GeneratorStubs.cs b/src/Custom/Responses/Internal/GeneratorStubs.cs index 67f0a6699..a245165b9 100644 --- a/src/Custom/Responses/Internal/GeneratorStubs.cs +++ b/src/Custom/Responses/Internal/GeneratorStubs.cs @@ -1,65 +1,173 @@ namespace OpenAI.Responses; -[CodeGenType("ComparisonFilter")] internal partial class InternalComparisonFilter { } -[CodeGenType("ComparisonFilterEquals")] internal partial class InternalComparisonFilterEquals { } -[CodeGenType("ComparisonFilterGreaterThan")] internal partial class InternalComparisonFilterGreaterThan { } -[CodeGenType("ComparisonFilterGreaterThanOrEquals")] internal partial class InternalComparisonFilterGreaterThanOrEquals { } -[CodeGenType("ComparisonFilterLessThan")] internal partial class InternalComparisonFilterLessThan { } -[CodeGenType("ComparisonFilterLessThanOrEquals")] internal partial class InternalComparisonFilterLessThanOrEquals { } -[CodeGenType("ComparisonFilterNotEquals")] internal partial class InternalComparisonFilterNotEquals { } -[CodeGenType("ComparisonFilterType")] internal readonly partial struct InternalComparisonFilterType { } -[CodeGenType("CompoundFilter")] internal partial class InternalCompoundFilter { } -[CodeGenType("CompoundFilterAnd")] internal partial class InternalCompoundFilterAnd { } -[CodeGenType("CompoundFilterOr")] internal partial class InternalCompoundFilterOr { } -[CodeGenType("CompoundFilterType")] internal readonly partial struct InternalCompoundFilterType { } -[CodeGenType("CreateResponsesRequestModel")] internal readonly partial struct InternalCreateResponsesRequestModel { } -[CodeGenType("DeleteResponseResponseObject")] internal readonly partial struct InternalDeleteResponseResponseObject { } -[CodeGenType("ResponsesComputerCallClickAction")] internal partial class InternalResponsesComputerCallClickAction { } -[CodeGenType("ResponsesComputerCallDoubleClickAction")] internal partial class InternalResponsesComputerCallDoubleClickAction { } -[CodeGenType("ResponsesComputerCallDragAction")] internal partial class InternalResponsesComputerCallDragAction { } -[CodeGenType("ResponsesComputerCallDragActionPath")] internal partial class InternalResponsesComputerCallDragActionPath { } -[CodeGenType("ResponsesComputerCallKeyPressAction")] internal partial class InternalResponsesComputerCallKeyPressAction { } -[CodeGenType("ResponsesComputerCallMoveAction")] internal partial class InternalResponsesComputerCallMoveAction { } -[CodeGenType("ResponsesComputerCallOutputItemOutputType")] internal readonly partial struct InternalResponsesComputerCallOutputItemOutputType { } -[CodeGenType("ResponsesComputerCallOutputItemScreenshot")] internal partial class InternalResponsesComputerCallOutputItemScreenshot { } -[CodeGenType("ResponsesComputerCallScreenshotAction")] internal partial class InternalResponsesComputerCallScreenshotAction { } -[CodeGenType("ResponsesComputerCallScrollAction")] internal partial class InternalResponsesComputerCallScrollAction { } -[CodeGenType("ResponsesComputerCallTypeAction")] internal partial class InternalResponsesComputerCallTypeAction { } -[CodeGenType("ResponsesComputerCallWaitAction")] internal partial class InternalResponsesComputerCallWaitAction { } -[CodeGenType("ResponsesComputerTool")] internal partial class InternalResponsesComputerTool { } -[CodeGenType("ResponsesContentType")] internal readonly partial struct InternalResponsesContentType { } -[CodeGenType("ResponsesErrorResponse")] internal partial class InternalResponsesErrorResponse { } -[CodeGenType("ResponsesFileSearchTool")] internal partial class InternalResponsesFileSearchTool { } -[CodeGenType("ResponsesFunctionTool")] internal partial class InternalResponsesFunctionTool { } -[CodeGenType("ResponsesInputItemList")] internal partial class InternalResponsesInputItemList { } -[CodeGenType("ResponsesInputItemListObject")] internal readonly partial struct InternalResponsesInputItemListObject { } -[CodeGenType("ResponsesItemType")] internal readonly partial struct InternalResponsesItemType { } -[CodeGenType("ResponsesMessageRole")] internal readonly partial struct InternalResponsesMessageRole { } -[CodeGenType("ResponsesReasoningItemSummaryElement")] internal partial class InternalResponsesReasoningItemSummaryElement { } -[CodeGenType("ResponsesReasoningItemSummaryElementSummaryText")] internal partial class InternalResponsesReasoningItemSummaryElementSummaryText { } -[CodeGenType("ResponsesReasoningItemSummaryType")] internal readonly partial struct InternalResponsesReasoningItemSummaryType { } -[CodeGenType("ResponsesResponseObject")] internal readonly partial struct InternalCreateResponsesResponseObject { } -[CodeGenType("ResponsesResponseStreamEventType")] internal readonly partial struct InternalResponsesResponseStreamEventType { } -[CodeGenType("ResponsesTextFormatJsonObject")] internal partial class InternalResponsesTextFormatJsonObject { } -[CodeGenType("ResponsesTextFormatJsonSchema")] internal partial class InternalResponsesTextFormatJsonSchema { } -[CodeGenType("ResponsesTextFormatText")] internal partial class InternalResponsesTextFormatText { } -[CodeGenType("ResponsesTextFormatType")] internal readonly partial struct InternalResponsesTextFormatType { } -[CodeGenType("ResponsesToolChoiceObjectComputer")] internal partial class InternalResponsesToolChoiceObjectComputer { } -[CodeGenType("ResponsesToolChoiceObjectFileSearch")] internal partial class InternalResponsesToolChoiceObjectFileSearch { } -[CodeGenType("ResponsesToolChoiceObjectFunction")] internal partial class InternalResponsesToolChoiceObjectFunction { } -[CodeGenType("ResponsesToolChoiceObjectType")] internal readonly partial struct InternalResponsesToolChoiceObjectType { } -[CodeGenType("ResponsesToolChoiceObjectWebSearch")] internal partial class InternalResponsesToolChoiceObjectWebSearch { } -[CodeGenType("ResponsesToolType")] internal readonly partial struct InternalResponsesToolType { } -[CodeGenType("ResponsesWebSearchApproximateLocation")] internal partial class InternalResponsesWebSearchApproximateLocation { } -[CodeGenType("ResponsesWebSearchTool")] internal partial class InternalResponsesWebSearchTool { } -[CodeGenType("UnknownComparisonFilter")] internal partial class InternalUnknownComparisonFilter { } -[CodeGenType("UnknownCompoundFilter")] internal partial class InternalUnknownCompoundFilter { } -[CodeGenType("UnknownResponsesComputerCallItemAction")] internal partial class UnknownResponsesComputerCallItemAction { } -[CodeGenType("UnknownResponsesComputerCallOutputItemOutput")] internal partial class UnknownResponsesComputerCallOutputItemOutput { } -[CodeGenType("UnknownResponsesItem")] internal partial class InternalUnknownResponsesItem { } -[CodeGenType("UnknownResponsesMessage")] internal partial class InternalUnknownResponsesMessage { } -[CodeGenType("UnknownResponsesOutputTextAnnotation")] internal partial class InternalUnknownResponsesOutputTextAnnotation { } -[CodeGenType("UnknownResponsesReasoningItemSummaryElement")] internal partial class InternalUnknownResponsesReasoningItemSummaryElement { } -[CodeGenType("UnknownResponsesResponseStreamEvent")] internal partial class UnknownResponsesResponseStreamEvent { } -[CodeGenType("UnknownResponsesToolChoiceObject")] internal partial class InternalUnknownResponsesToolChoiceObject { } -[CodeGenType("UnknownResponsesWebSearchLocation")] internal partial class InternalUnknownResponsesWebSearchLocation { } +[CodeGenType("AnnotationFileCitation")] internal partial class InternalAnnotationFileCitation {} +[CodeGenType("AnnotationFilePath")] internal partial class InternalAnnotationFilePath {} +[CodeGenType("AnnotationUrlCitation")] internal partial class InternalAnnotationUrlCitation {} +[CodeGenType("ApproximateLocation")] internal partial class InternalApproximateLocation {} +[CodeGenType("ComparisonFilter")] internal partial class InternalComparisonFilter {} +[CodeGenType("ComparisonFilterEquals")] internal partial class InternalComparisonFilterEquals {} +[CodeGenType("ComparisonFilterGreaterThan")] internal partial class InternalComparisonFilterGreaterThan {} +[CodeGenType("ComparisonFilterGreaterThanOrEquals")] internal partial class InternalComparisonFilterGreaterThanOrEquals {} +[CodeGenType("ComparisonFilterLessThan")] internal partial class InternalComparisonFilterLessThan {} +[CodeGenType("ComparisonFilterLessThanOrEquals")] internal partial class InternalComparisonFilterLessThanOrEquals {} +[CodeGenType("ComparisonFilterNotEquals")] internal partial class InternalComparisonFilterNotEquals {} +[CodeGenType("ComparisonFilterType")] internal readonly partial struct InternalComparisonFilterType {} +[CodeGenType("CompoundFilter")] internal partial class InternalCompoundFilter {} +[CodeGenType("CompoundFilterAnd")] internal partial class InternalCompoundFilterAnd {} +[CodeGenType("CompoundFilterOr")] internal partial class InternalCompoundFilterOr {} +[CodeGenType("CompoundFilterType")] internal readonly partial struct InternalCompoundFilterType {} +[CodeGenType("ComputerActionClick")] internal partial class InternalComputerActionClick {} +[CodeGenType("ComputerActionDoubleClick")] internal partial class InternalComputerActionDoubleClick {} +[CodeGenType("ComputerActionDrag")] internal partial class InternalComputerActionDrag {} +[CodeGenType("ComputerActionKeyPress")] internal partial class InternalComputerActionKeyPress {} +[CodeGenType("ComputerActionMove")] internal partial class InternalComputerActionMove {} +[CodeGenType("ComputerActionScreenshot")] internal partial class InternalComputerActionScreenshot {} +[CodeGenType("ComputerActionScroll")] internal partial class InternalComputerActionScroll {} +[CodeGenType("ComputerActionTypeKeys")] internal partial class InternalComputerActionTypeKeys {} +[CodeGenType("ComputerActionWait")] internal partial class InternalComputerActionWait {} +[CodeGenType("ComputerToolCallItemParam")] internal partial class InternalComputerUsePreviewToolCallItemParam {} +[CodeGenType("ComputerToolCallOutputItemOutputComputerScreenshot")] internal partial class InternalComputerToolCallOutputItemOutputComputerScreenshot {} +[CodeGenType("ComputerToolCallOutputItemOutputType")] internal readonly partial struct InternalComputerUsePreviewToolCallOutputOutputType {} +[CodeGenType("ComputerToolCallOutputItemParam")] internal partial class InternalComputerUsePreviewToolCallOutputItemParam {} +[CodeGenType("ComputerUsePreviewTool")] internal partial class InternalComputerUsePreviewTool {} +[CodeGenType("Coordinate")] internal partial class InternalCoordinate {} +[CodeGenType("DeleteResponseResponseObject")] internal readonly partial struct InternalDeleteResponseResponseObject {} +[CodeGenType("DotNetCombinedChunkingStrategyParamType2")] internal readonly partial struct InternalDotNetCombinedChunkingStrategyParamType2 {} +[CodeGenType("DotnetResponseWebSearchApproximateLocation")] internal partial class InternalDotnetResponseWebSearchApproximateLocation {} +[CodeGenType("FileSearchTool")] internal partial class InternalFileSearchTool {} +[CodeGenType("FileSearchToolCallItemParam")] internal partial class InternalFileSearchToolCallItemParam {} +[CodeGenType("FunctionToolCallItemParam")] internal partial class InternalFunctionToolCallItemParam {} +[CodeGenType("FunctionToolCallOutputItemParam")] internal partial class InternalFunctionToolCallOutputItemParam {} +[CodeGenType("ImplicitUserMessage")] internal partial class InternalImplicitUserMessage {} +[CodeGenType("ItemContentInputAudio")] internal partial class InternalItemContentInputAudio {} +[CodeGenType("ItemContentInputAudioFormat")] internal readonly partial struct InternalItemContentInputAudioFormat {} +[CodeGenType("ItemContentInputImage")] internal partial class InternalItemContentInputImage {} +[CodeGenType("ItemContentOutputAudio")] internal partial class InternalItemContentOutputAudio {} +[CodeGenType("ItemContentType")] internal readonly partial struct InternalItemContentType {} +[CodeGenType("ItemParam")] internal partial class InternalItemParam {} +[CodeGenType("ItemReferenceItemParam")] internal partial class InternalItemReferenceItemParam {} +[CodeGenType("ItemType")] internal readonly partial struct InternalItemType {} +[CodeGenType("Location")] internal partial class InternalLocation {} +[CodeGenType("LocationType")] internal readonly partial struct InternalWebSearchUserLocationKind {} +[CodeGenType("ModelIdsResponses")] internal readonly partial struct InternalModelIdsResponses {} +[CodeGenType("RankingOptionsRanker1")] internal readonly partial struct InternalRankingOptionsRanker1 {} +[CodeGenType("ReasoningGenerateSummary")] internal readonly partial struct InternalReasoningGenerateSummary {} +[CodeGenType("ReasoningItemParam")] internal partial class InternalReasoningItemParam {} +[CodeGenType("ReasoningItemResourceSummaryType")] internal readonly partial struct InternalReasoningItemResourceSummaryType {} +[CodeGenType("ReasoningItemSummaryPartType")] internal readonly partial struct InternalReasoningItemSummaryPartType {} +[CodeGenType("ResponseErrorResponse")] internal partial class InternalResponseErrorResponse {} +[CodeGenType("ResponseItemList")] internal partial class InternalResponseItemList {} +[CodeGenType("ResponseItemListObject")] internal readonly partial struct InternalResponseItemListObject {} +[CodeGenType("ResponseObject")] internal readonly partial struct InternalCreateResponsesResponseObject {} +[CodeGenType("ResponseReasoningSummaryPartAddedEvent")] internal partial class InternalResponseReasoningSummaryPartAddedEvent {} +[CodeGenType("ResponseReasoningSummaryPartDoneEvent")] internal partial class InternalResponseReasoningSummaryPartDoneEvent {} +[CodeGenType("ResponseReasoningSummaryTextDeltaEvent")] internal partial class InternalResponseReasoningSummaryTextDeltaEvent {} +[CodeGenType("ResponseReasoningSummaryTextDoneEvent")] internal partial class InternalResponseReasoningSummaryTextDoneEvent {} +[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 {} +[CodeGenType("ResponseTextFormatConfigurationJsonObject")] internal partial class InternalResponsesTextFormatJsonObject {} +[CodeGenType("ResponseTextFormatConfigurationText")] internal partial class InternalResponsesTextFormatText {} +[CodeGenType("ResponseTextFormatConfigurationType")] internal readonly partial struct InternalResponsesTextFormatType {} +[CodeGenType("ToolChoiceObject")] internal partial class InternalToolChoiceObject {} +[CodeGenType("ToolChoiceObjectComputer")] internal partial class InternalToolChoiceObjectComputer {} +[CodeGenType("ToolChoiceObjectFileSearch")] internal partial class InternalToolChoiceObjectFileSearch {} +[CodeGenType("ToolChoiceObjectFunction")] internal partial class InternalToolChoiceObjectFunction {} +[CodeGenType("ToolChoiceObjectType")] internal readonly partial struct InternalToolChoiceObjectType {} +[CodeGenType("ToolChoiceObjectWebSearch")] internal partial class InternalToolChoiceObjectWebSearch {} +[CodeGenType("ToolChoiceOptions")] internal readonly partial struct InternalToolChoiceOptions {} +[CodeGenType("ToolType")] internal readonly partial struct InternalToolType {} +[CodeGenType("UnknownAnnotation")] internal partial class InternalUnknownAnnotation {} +[CodeGenType("UnknownComparisonFilter")] internal partial class InternalUnknownComparisonFilter {} +[CodeGenType("UnknownCompoundFilter")] internal partial class InternalUnknownCompoundFilter {} +[CodeGenType("UnknownComputerAction")] internal partial class InternalUnknownComputerAction {} +[CodeGenType("UnknownComputerToolCallOutputItemOutput")] internal partial class InternalUnknownComputerToolCallOutputItemOutput {} +[CodeGenType("UnknownDotnetResponseWebSearchLocation")] internal partial class InternalUnknownDotnetResponseWebSearchLocation {} +[CodeGenType("UnknownItemContent")] internal partial class InternalUnknownItemContent {} +[CodeGenType("UnknownItemParam")] internal partial class InternalUnknownItemParam {} +[CodeGenType("UnknownItemResource")] internal partial class InternalUnknownItemResource {} +[CodeGenType("UnknownLocation")] internal partial class InternalUnknownLocation {} +[CodeGenType("UnknownReasoningItemSummaryPart")] internal partial class InternalUnknownReasoningItemSummaryPart {} +[CodeGenType("UnknownResponsesMessageItemParam")] internal partial class InternalUnknownResponsesMessageItemResourceItemParam {} +[CodeGenType("UnknownResponsesMessageItemResource")] internal partial class InternalUnknownResponsesMessageItemResource {} +[CodeGenType("UnknownResponseStreamEvent")] internal partial class UnknownResponseStreamEvent {} +[CodeGenType("UnknownResponseTextFormatConfiguration")] internal partial class InternalUnknownResponseTextFormatConfiguration {} +[CodeGenType("UnknownTool")] internal partial class InternalUnknownTool {} +[CodeGenType("UnknownToolChoiceObject")] internal partial class InternalUnknownToolChoiceObject {} +[CodeGenType("WebSearchPreviewToolSearchContextSize")] internal readonly partial struct InternalWebSearchPreviewToolSearchContextSize {} +[CodeGenType("WebSearchToolCallItemParam")] internal partial class InternalWebSearchToolCallItemParam {} +[CodeGenType("CodeInterpreterToolAutoType")] internal readonly partial struct InternalCodeInterpreterToolAutoType {} +[CodeGenType("ImageGenToolModel")] internal readonly partial struct InternalImageGenToolModel {} +[CodeGenType("ImageGenToolQuality")] internal readonly partial struct InternalImageGenToolQuality {} +[CodeGenType("ImageGenToolSize")] internal readonly partial struct InternalImageGenToolSize {} +[CodeGenType("ImageGenToolOutputFormat")] internal readonly partial struct InternalImageGenToolOutputFormat {} +[CodeGenType("ImageGenToolModeration")] internal readonly partial struct InternalImageGenToolModeration {} +[CodeGenType("ImageGenToolBackground")] internal readonly partial struct InternalImageGenToolBackground {} +[CodeGenType("CodeInterpreterTextOutputType")] internal readonly partial struct InternalCodeInterpreterTextOutputType {} +[CodeGenType("CodeInterpreterFileOutputType")] internal readonly partial struct InternalCodeInterpreterFileOutputType {} +[CodeGenType("LocalShellExecActionType")] internal readonly partial struct InternalLocalShellExecActionType {} +[CodeGenType("ImageGenToolCallItemResourceStatus")] internal readonly partial struct InternalImageGenToolCallItemResourceStatus {} +[CodeGenType("CodeInterpreterToolCallItemResourceStatus")] internal readonly partial struct InternalCodeInterpreterToolCallItemResourceStatus {} +[CodeGenType("LocalShellToolCallItemResourceStatus")] internal readonly partial struct InternalLocalShellToolCallItemResourceStatus {} +[CodeGenType("LocalShellToolCallOutputItemResourceStatus")] internal readonly partial struct InternalLocalShellToolCallOutputItemResourceStatus {} +[CodeGenType("CodeInterpreterTool")] internal partial class InternalCodeInterpreterTool {} +[CodeGenType("CodeInterpreterToolAuto")] internal partial class InternalCodeInterpreterToolAuto {} +[CodeGenType("ImageGenTool")] internal partial class InternalImageGenTool {} +[CodeGenType("ImageGenToolInputImageMask")] internal partial class InternalImageGenToolInputImageMask {} +[CodeGenType("LocalShellTool")] internal partial class InternalLocalShellTool {} +[CodeGenType("MCPTool")] internal partial class InternalMCPTool {} +[CodeGenType("MCPToolAllowedTools1")] internal partial class InternalMCPToolAllowedTools1 {} +[CodeGenType("MCPToolRequireApproval1")] internal partial class InternalMCPToolRequireApproval1 {} +[CodeGenType("MCPToolRequireApprovalAlways")] internal partial class InternalMCPToolRequireApprovalAlways {} +[CodeGenType("MCPToolRequireApprovalNever")] internal partial class InternalMCPToolRequireApprovalNever {} +[CodeGenType("ToolChoiceObjectImageGen")] internal partial class InternalToolChoiceObjectImageGen {} +[CodeGenType("ToolChoiceObjectCodeInterpreter")] internal partial class InternalToolChoiceObjectCodeInterpreter {} +[CodeGenType("ToolChoiceObjectMCP")] internal partial class InternalToolChoiceObjectMCP {} +[CodeGenType("LogProb")] internal partial class InternalLogProb {} +[CodeGenType("TopLogProb")] internal partial class InternalTopLogProb {} +[CodeGenType("ImageGenToolCallItemParam")] internal partial class InternalImageGenToolCallItemParam {} +[CodeGenType("CodeInterpreterToolCallItemParam")] internal partial class InternalCodeInterpreterToolCallItemParam {} +[CodeGenType("CodeInterpreterTextOutput")] internal partial class InternalCodeInterpreterTextOutput {} +[CodeGenType("CodeInterpreterFileOutput")] internal partial class InternalCodeInterpreterFileOutput {} +[CodeGenType("CodeInterpreterFileOutputFile")] internal partial class InternalCodeInterpreterFileOutputFile {} +[CodeGenType("LocalShellToolCallItemParam")] internal partial class InternalLocalShellToolCallItemParam {} +[CodeGenType("LocalShellExecAction")] internal partial class InternalLocalShellExecAction {} +[CodeGenType("LocalShellToolCallOutputItemParam")] internal partial class InternalLocalShellToolCallOutputItemParam {} +[CodeGenType("MCPListToolsItemParam")] internal partial class InternalMCPListToolsItemParam {} +[CodeGenType("MCPListToolsTool")] internal partial class InternalMCPListToolsTool {} +[CodeGenType("MCPApprovalRequestItemParam")] internal partial class InternalMCPApprovalRequestItemParam {} +[CodeGenType("MCPApprovalResponseItemParam")] internal partial class InternalMCPApprovalResponseItemParam {} +[CodeGenType("MCPCallItemParam")] internal partial class InternalMCPCallItemParam {} +[CodeGenType("ImageGenToolCallItemResource")] internal partial class InternalImageGenToolCallItemResource {} +[CodeGenType("CodeInterpreterToolCallItemResource")] internal partial class InternalCodeInterpreterToolCallItemResource {} +[CodeGenType("LocalShellToolCallItemResource")] internal partial class InternalLocalShellToolCallItemResource {} +[CodeGenType("LocalShellToolCallOutputItemResource")] internal partial class InternalLocalShellToolCallOutputItemResource {} +[CodeGenType("MCPListToolsItemResource")] internal partial class InternalMCPListToolsItemResource {} +[CodeGenType("MCPApprovalRequestItemResource")] internal partial class InternalMCPApprovalRequestItemResource {} +[CodeGenType("MCPApprovalResponseItemResource")] internal partial class InternalMCPApprovalResponseItemResource {} +[CodeGenType("MCPCallItemResource")] internal partial class InternalMCPCallItemResource {} +[CodeGenType("ResponseImageGenCallCompletedEvent")] internal partial class InternalResponseImageGenCallCompletedEvent {} +[CodeGenType("ResponseImageGenCallGeneratingEvent")] internal partial class InternalResponseImageGenCallGeneratingEvent {} +[CodeGenType("ResponseImageGenCallInProgressEvent")] internal partial class InternalResponseImageGenCallInProgressEvent {} +[CodeGenType("ResponseImageGenCallPartialImageEvent")] internal partial class InternalResponseImageGenCallPartialImageEvent {} +[CodeGenType("ResponseMCPCallArgumentsDeltaEvent")] internal partial class InternalResponseMCPCallArgumentsDeltaEvent {} +[CodeGenType("ResponseMCPCallArgumentsDoneEvent")] internal partial class InternalResponseMCPCallArgumentsDoneEvent {} +[CodeGenType("ResponseMCPCallCompletedEvent")] internal partial class InternalResponseMCPCallCompletedEvent {} +[CodeGenType("ResponseMCPCallFailedEvent")] internal partial class InternalResponseMCPCallFailedEvent {} +[CodeGenType("ResponseMCPCallInProgressEvent")] internal partial class InternalResponseMCPCallInProgressEvent {} +[CodeGenType("ResponseMCPListToolsCompletedEvent")] internal partial class InternalResponseMCPListToolsCompletedEvent {} +[CodeGenType("ResponseMCPListToolsFailedEvent")] internal partial class InternalResponseMCPListToolsFailedEvent {} +[CodeGenType("ResponseMCPListToolsInProgressEvent")] internal partial class InternalResponseMCPListToolsInProgressEvent {} +[CodeGenType("ResponseReasoningDeltaEvent")] internal partial class InternalResponseReasoningDeltaEvent {} +[CodeGenType("ResponseReasoningDoneEvent")] internal partial class InternalResponseReasoningDoneEvent {} +[CodeGenType("ResponseReasoningSummaryDeltaEvent")] internal partial class InternalResponseReasoningSummaryDeltaEvent {} +[CodeGenType("ResponseReasoningSummaryDoneEvent")] internal partial class InternalResponseReasoningSummaryDoneEvent {} +[CodeGenType("ResponseCodeInterpreterCallCodeDeltaEvent")] internal partial class InternalResponseCodeInterpreterCallCodeDeltaEvent {} +[CodeGenType("ResponseCodeInterpreterCallCodeDoneEvent")] internal partial class InternalResponseCodeInterpreterCallCodeDoneEvent {} +[CodeGenType("ResponseCodeInterpreterCallCompletedEvent")] internal partial class InternalResponseCodeInterpreterCallCompletedEvent {} +[CodeGenType("ResponseCodeInterpreterCallInProgressEvent")] internal partial class InternalResponseCodeInterpreterCallInProgressEvent {} +[CodeGenType("ResponseCodeInterpreterCallInterpretingEvent")] internal partial class InternalResponseCodeInterpreterCallInterpretingEvent {} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/InternalCreateResponsesRequestIncludable.cs b/src/Custom/Responses/Internal/InternalCreateResponsesRequestIncludable.cs deleted file mode 100644 index 35d06d68f..000000000 --- a/src/Custom/Responses/Internal/InternalCreateResponsesRequestIncludable.cs +++ /dev/null @@ -1,14 +0,0 @@ -using OpenAI.Telemetry; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Runtime.CompilerServices; -using System.Threading; - -namespace OpenAI.Responses; - -[CodeGenType("CreateResponsesRequestIncludable")] -internal readonly partial struct InternalCreateResponsesRequestIncludable -{ - public static implicit operator string(InternalCreateResponsesRequestIncludable self) => self.ToString(); -} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/InternalIncludable.cs b/src/Custom/Responses/Internal/InternalIncludable.cs new file mode 100644 index 000000000..2dfe8e92a --- /dev/null +++ b/src/Custom/Responses/Internal/InternalIncludable.cs @@ -0,0 +1,7 @@ +namespace OpenAI.Responses; + +[CodeGenType("Includable")] +internal readonly partial struct InternalIncludable +{ + public static implicit operator string(InternalIncludable self) => self.ToString(); +} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/InternalItemContentInputFile.cs b/src/Custom/Responses/Internal/InternalItemContentInputFile.cs new file mode 100644 index 000000000..dd0f3f83a --- /dev/null +++ b/src/Custom/Responses/Internal/InternalItemContentInputFile.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses; + +[CodeGenType("ItemContentInputFile")] +internal partial class InternalItemContentInputFile +{ + private BinaryData _inputFileBytes; + private string _inputFileBytesMediaType; + + [CodeGenMember("FileData")] + internal string InternalFileData + { + get => _internalFileData; + set + { + _internalFileData = value; + if (value is not null && !DataEncodingHelpers.TryParseDataUri(value, out _inputFileBytes, out _inputFileBytesMediaType)) + { + throw new ArgumentException($"Input did not parse a valid data URI."); + } + } + } + private string _internalFileData; + + public InternalItemContentInputFile(string filename, BinaryData fileBytes, string fileBytesMediaType) + : this(InternalItemContentType.InputFile, null, null, filename, null) + { + Argument.AssertNotNullOrEmpty(filename, nameof(filename)); + Argument.AssertNotNull(fileBytes, nameof(fileBytes)); + Argument.AssertNotNull(fileBytesMediaType, nameof(fileBytesMediaType)); + + _inputFileBytes = fileBytes; + _inputFileBytesMediaType = fileBytesMediaType; + _internalFileData = DataEncodingHelpers.CreateDataUri(fileBytes, fileBytesMediaType); + } + + public BinaryData InternalFileBytes => _inputFileBytes; + + public string InternalFileBytesMediaType => _inputFileBytesMediaType; +} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/InternalItemContentInputText.cs b/src/Custom/Responses/Internal/InternalItemContentInputText.cs new file mode 100644 index 000000000..9fc706e3b --- /dev/null +++ b/src/Custom/Responses/Internal/InternalItemContentInputText.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Responses; + +[CodeGenType("ItemContentInputText")] +internal partial class InternalItemContentInputText +{ + // CUSTOM: Rename for parent recombination of common properties + [CodeGenMember("Text")] + public string InternalText { get; set; } +} diff --git a/src/Custom/Responses/Internal/InternalItemContentOutputText.cs b/src/Custom/Responses/Internal/InternalItemContentOutputText.cs new file mode 100644 index 000000000..f62d8f45f --- /dev/null +++ b/src/Custom/Responses/Internal/InternalItemContentOutputText.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Responses; + +[CodeGenType("ItemContentOutputText")] +internal partial class InternalItemContentOutputText +{ + // CUSTOM: Rename for parent recombination of common properties + [CodeGenMember("Text")] + public string InternalText { get; set; } +} diff --git a/src/Custom/Responses/Internal/InternalItemContentRefusal.cs b/src/Custom/Responses/Internal/InternalItemContentRefusal.cs new file mode 100644 index 000000000..1835889a1 --- /dev/null +++ b/src/Custom/Responses/Internal/InternalItemContentRefusal.cs @@ -0,0 +1,9 @@ +namespace OpenAI.Responses; + +[CodeGenType("ItemContentRefusal")] +internal partial class InternalItemContentRefusal +{ + // CUSTOM: Rename for parent recombination of common properties + [CodeGenMember("Refusal")] + public string InternalRefusal { get; set; } +} diff --git a/src/Custom/Responses/Internal/InternalResponsesComputerCallOutputItem.cs b/src/Custom/Responses/Internal/InternalResponsesComputerCallOutputItem.cs deleted file mode 100644 index 67fc241b9..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesComputerCallOutputItem.cs +++ /dev/null @@ -1,26 +0,0 @@ -//using OpenAI.Telemetry; -//using System.ClientModel; -//using System.ClientModel.Primitives; -//using System.Collections.Generic; -//using System.Threading; - -//namespace OpenAI.Responses; - -//[CodeGenType("ResponsesComputerCallOutputItem")] -//internal partial class InternalResponsesComputerCallOutputItem -//{ -// internal InternalResponsesComputerCallOutputItem( -// string callId, -// InternalResponsesComputerCallOutputItemOutput output) -// : base(InternalResponsesItemType.ComputerCallOutput) -// { -// Argument.AssertNotNull(callId, nameof(callId)); -// Argument.AssertNotNull(output, nameof(output)); - -// CallId = callId; -// Output = output; -// } - -// [CodeGenMember("Output")] -// internal InternalResponsesComputerCallOutputItemOutput Output { get; set; } -//} diff --git a/src/Custom/Responses/Internal/InternalResponsesInputFileContentPart.cs b/src/Custom/Responses/Internal/InternalResponsesInputFileContentPart.cs deleted file mode 100644 index bc3bcc5aa..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesInputFileContentPart.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -namespace OpenAI.Responses; - -[CodeGenType("ResponsesInputContentFile")] -internal partial class InternalResponsesInputFileContentPart -{ - // CUSTOM: - // - Renamed. - // - Changed type from string to BinaryData. - [CodeGenMember("FileData")] - public BinaryData FileBytes { get; set; } -} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/InternalResponsesInputImageContentPart.cs b/src/Custom/Responses/Internal/InternalResponsesInputImageContentPart.cs deleted file mode 100644 index fde30099b..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesInputImageContentPart.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesInputContentImage")] -internal partial class InternalResponsesInputImageContentPart -{ -} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/InternalResponsesInputTextContentPart.cs b/src/Custom/Responses/Internal/InternalResponsesInputTextContentPart.cs deleted file mode 100644 index 89565e241..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesInputTextContentPart.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesInputContentText")] -internal partial class InternalResponsesInputTextContentPart -{ - // CUSTOM: Rename for parent recombination of common properties - [CodeGenMember("Text")] - public string InternalText { get; set; } -} diff --git a/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFileCitation.cs b/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFileCitation.cs deleted file mode 100644 index 74a2c213c..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFileCitation.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesOutputTextAnnotationFileCitation")] -internal partial class InternalResponsesMessageAnnotationFileCitation -{ -} diff --git a/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFilePath.cs b/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFilePath.cs deleted file mode 100644 index f55ea0d3b..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationFilePath.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesOutputTextAnnotationFilePath")] -internal partial class InternalResponsesMessageAnnotationFilePath -{ -} diff --git a/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationUrlCitation.cs b/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationUrlCitation.cs deleted file mode 100644 index 3842bbb1b..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesMessageAnnotationUrlCitation.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesOutputTextAnnotationUrlCitation")] -internal partial class InternalResponsesMessageAnnotationUrlCitation -{ -} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/InternalResponsesOutputRefusalContentPart.cs b/src/Custom/Responses/Internal/InternalResponsesOutputRefusalContentPart.cs deleted file mode 100644 index ddaf0506d..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesOutputRefusalContentPart.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesOutputContentRefusal")] -internal partial class InternalResponsesOutputRefusalContentPart -{ - [CodeGenMember("Refusal")] - public string InternalRefusal { get; set; } -} diff --git a/src/Custom/Responses/Internal/InternalResponsesOutputTextContentPart.cs b/src/Custom/Responses/Internal/InternalResponsesOutputTextContentPart.cs deleted file mode 100644 index bdd5d3f49..000000000 --- a/src/Custom/Responses/Internal/InternalResponsesOutputTextContentPart.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesOutputContentText")] -internal partial class InternalResponsesOutputTextContentPart : ResponseContentPart -{ - // CUSTOM: Rename for parent recombination of common properties - [CodeGenMember("Text")] - public string InternalText { get; set; } -} diff --git a/src/Custom/Responses/Internal/InternalResponsesTextFormatJsonSchema.cs b/src/Custom/Responses/Internal/InternalResponsesTextFormatJsonSchema.cs new file mode 100644 index 000000000..18a8e9782 --- /dev/null +++ b/src/Custom/Responses/Internal/InternalResponsesTextFormatJsonSchema.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections; + +namespace OpenAI.Responses; + +[CodeGenType("ResponseTextFormatConfigurationJsonSchema")] +internal partial class InternalResponsesTextFormatJsonSchema +{ + // CUSTOM: Make schema type a plain BinaryData instance. + [CodeGenMember("Schema")] + internal BinaryData Schema { get; set; } +} \ No newline at end of file diff --git a/src/Custom/Responses/Internal/InternalUnknownResponseTextFormat.cs b/src/Custom/Responses/Internal/InternalUnknownResponseTextFormat.cs deleted file mode 100644 index 4434cf9ea..000000000 --- a/src/Custom/Responses/Internal/InternalUnknownResponseTextFormat.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("UnknownResponsesTextFormat")] -internal partial class InternalUnknownResponsesTextFormat -{ -} diff --git a/src/Custom/Responses/Internal/InternalUnknownResponsesContent.cs b/src/Custom/Responses/Internal/InternalUnknownResponsesContent.cs deleted file mode 100644 index 1e5effa37..000000000 --- a/src/Custom/Responses/Internal/InternalUnknownResponsesContent.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("UnknownResponsesContent")] -internal partial class InternalUnknownResponsesContent -{ -} diff --git a/src/Custom/Responses/Items/ComputerCallAction.cs b/src/Custom/Responses/Items/ComputerCallAction.cs index 4ca105b01..2cbc8f340 100644 --- a/src/Custom/Responses/Items/ComputerCallAction.cs +++ b/src/Custom/Responses/Items/ComputerCallAction.cs @@ -5,60 +5,57 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesComputerCallItemAction")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerAction")] +[CodeGenVisibility(nameof(Kind), CodeGenVisibility.Public)] public partial class ComputerCallAction { - // CUSTOM: - // - Renamed. - // - Made public. - // - Removed setter. - [CodeGenMember("Type")] - public ComputerCallActionKind Kind { get; } - // CUSTOM: Exposed click action properties. public Point? ClickCoordinates => this switch { - InternalResponsesComputerCallClickAction click => new Point(click.X, click.Y), + InternalComputerActionClick click => new Point(click.X, click.Y), _ => null }; - public ComputerCallActionMouseButton? ClickMouseButton => (this as InternalResponsesComputerCallClickAction)?.Button; + public ComputerCallActionMouseButton? ClickMouseButton => (this as InternalComputerActionClick)?.Button; // CUSTOM: Exposed double-click action properties. public Point? DoubleClickCoordinates => this switch { - InternalResponsesComputerCallDoubleClickAction doubleClick => new Point(doubleClick.X, doubleClick.Y), + InternalComputerActionDoubleClick doubleClick => new Point(doubleClick.X, doubleClick.Y), _ => null }; // CUSTOM: Exposed drag action properties. - public IList DragPath => (this as InternalResponsesComputerCallDragAction)?.Path.Select(item => new Point(item.X, item.Y)).ToList(); + public IList DragPath => (this as InternalComputerActionDrag)?.Path.Select(item => new Point(item.X, item.Y)).ToList(); // CUSTOM: Exposed key press action properties. - public IList KeyPressKeyCodes => (this as InternalResponsesComputerCallKeyPressAction)?.Keys; + public IList KeyPressKeyCodes => (this as InternalComputerActionKeyPress)?.Keys; // CUSTOM: Exposed move action properties. public Point? MoveCoordinates => this switch { - InternalResponsesComputerCallMoveAction move => new Point(move.X, move.Y), + InternalComputerActionMove move => new Point(move.X, move.Y), _ => null }; // CUSTOM: Exposed scroll action properties. public Point? ScrollCoordinates => this switch { - InternalResponsesComputerCallScrollAction scroll => new Point(scroll.X, scroll.Y), + InternalComputerActionScroll scroll => new Point(scroll.X, scroll.Y), _ => null }; - public int? ScrollHorizontalOffset => (this as InternalResponsesComputerCallScrollAction)?.ScrollX; - public int? ScrollVerticalOffset => (this as InternalResponsesComputerCallScrollAction)?.ScrollY; + public int? ScrollHorizontalOffset => (this as InternalComputerActionScroll)?.ScrollX; + public int? ScrollVerticalOffset => (this as InternalComputerActionScroll)?.ScrollY; // CUSTOM: Exposed type action properties. - public string TypeText => (this as InternalResponsesComputerCallTypeAction)?.Text; + public string TypeText => (this as InternalComputerActionTypeKeys)?.Text; public static ComputerCallAction CreateClickAction(Point clickCoordinates, ComputerCallActionMouseButton clickMouseButton) { - return new InternalResponsesComputerCallClickAction( + return new InternalComputerActionClick( kind: ComputerCallActionKind.Click, additionalBinaryDataProperties: null, button: clickMouseButton, @@ -68,7 +65,7 @@ public static ComputerCallAction CreateClickAction(Point clickCoordinates, Compu public static ComputerCallAction CreateDoubleClickAction(Point doubleClickCoordinates, ComputerCallActionMouseButton doubleClickMouseButton) { - return new InternalResponsesComputerCallDoubleClickAction( + return new InternalComputerActionDoubleClick( kind: ComputerCallActionKind.DoubleClick, additionalBinaryDataProperties: null, x: doubleClickCoordinates.X, @@ -77,15 +74,15 @@ public static ComputerCallAction CreateDoubleClickAction(Point doubleClickCoordi public static ComputerCallAction CreateDragAction(IList dragPath) { - return new InternalResponsesComputerCallDragAction( + return new InternalComputerActionDrag( kind: ComputerCallActionKind.Drag, additionalBinaryDataProperties: null, - path: dragPath.Select(item => new InternalResponsesComputerCallDragActionPath(item.X, item.Y)).ToList()); + path: dragPath.Select(item => new InternalCoordinate(item.X, item.Y)).ToList()); } public static ComputerCallAction CreateKeyPressAction(IList keyCodes) { - return new InternalResponsesComputerCallKeyPressAction( + return new InternalComputerActionKeyPress( kind: ComputerCallActionKind.KeyPress, additionalBinaryDataProperties: null, keys: keyCodes); @@ -93,7 +90,7 @@ public static ComputerCallAction CreateKeyPressAction(IList keyCodes) public static ComputerCallAction CreateMoveAction(Point moveCoordinates) { - return new InternalResponsesComputerCallMoveAction( + return new InternalComputerActionMove( kind: ComputerCallActionKind.Move, additionalBinaryDataProperties: null, x: moveCoordinates.X, @@ -102,14 +99,14 @@ public static ComputerCallAction CreateMoveAction(Point moveCoordinates) public static ComputerCallAction CreateScreenshotAction() { - return new InternalResponsesComputerCallScreenshotAction( + return new InternalComputerActionScreenshot( kind: ComputerCallActionKind.Screenshot, additionalBinaryDataProperties: null); } public static ComputerCallAction CreateScrollAction(Point scrollCoordinates, int horizontalOffset, int verticalOffset) { - return new InternalResponsesComputerCallScrollAction( + return new InternalComputerActionScroll( kind: ComputerCallActionKind.Scroll, additionalBinaryDataProperties: null, x: scrollCoordinates.X, @@ -120,7 +117,7 @@ public static ComputerCallAction CreateScrollAction(Point scrollCoordinates, int public static ComputerCallAction CreateTypeAction(string typeText) { - return new InternalResponsesComputerCallTypeAction( + return new InternalComputerActionTypeKeys( kind: ComputerCallActionKind.Type, additionalBinaryDataProperties: null, text: typeText); @@ -128,7 +125,7 @@ public static ComputerCallAction CreateTypeAction(string typeText) public static ComputerCallAction CreateWaitAction() { - return new InternalResponsesComputerCallWaitAction( + return new InternalComputerActionWait( kind: ComputerCallActionKind.Wait, additionalBinaryDataProperties: null); } diff --git a/src/Custom/Responses/Items/ComputerCallActionKind.cs b/src/Custom/Responses/Items/ComputerCallActionKind.cs index 182654ad4..ed4e718da 100644 --- a/src/Custom/Responses/Items/ComputerCallActionKind.cs +++ b/src/Custom/Responses/Items/ComputerCallActionKind.cs @@ -2,8 +2,11 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesComputerCallActionType")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerActionType")] public enum ComputerCallActionKind { Click, diff --git a/src/Custom/Responses/Items/ComputerCallActionMouseButton.cs b/src/Custom/Responses/Items/ComputerCallActionMouseButton.cs index 8adf14b84..b1aff9f38 100644 --- a/src/Custom/Responses/Items/ComputerCallActionMouseButton.cs +++ b/src/Custom/Responses/Items/ComputerCallActionMouseButton.cs @@ -2,8 +2,11 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesComputerCallClickButtonType")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerActionClickButton")] public enum ComputerCallActionMouseButton { Left, diff --git a/src/Custom/Responses/Items/ComputerCallOutputResponseItem.cs b/src/Custom/Responses/Items/ComputerCallOutputResponseItem.cs index 4004eb9b9..5850721e2 100644 --- a/src/Custom/Responses/Items/ComputerCallOutputResponseItem.cs +++ b/src/Custom/Responses/Items/ComputerCallOutputResponseItem.cs @@ -2,8 +2,19 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesComputerCallOutputItem")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerToolCallOutputItemResource")] public partial class ComputerCallOutputResponseItem { + // CUSTOM: Retain optionality of OpenAPI read-only property value + [CodeGenMember("Status")] + public ComputerCallOutputStatus? Status { get; } + + // CUSTOM: For reuse as an input model + internal ComputerCallOutputResponseItem(string callId, ComputerOutput output) + : this(id: null, callId, output, status: null) + { } } diff --git a/src/Custom/Responses/Items/ComputerCallOutputStatus.cs b/src/Custom/Responses/Items/ComputerCallOutputStatus.cs index ec8817cf8..79e173cde 100644 --- a/src/Custom/Responses/Items/ComputerCallOutputStatus.cs +++ b/src/Custom/Responses/Items/ComputerCallOutputStatus.cs @@ -2,9 +2,11 @@ namespace OpenAI.Responses; -// CUSTOM: Renamed. -[CodeGenType("ResponsesComputerCallOutputItemStatus")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerToolCallOutputItemResourceStatus")] public enum ComputerCallOutputStatus { InProgress, diff --git a/src/Custom/Responses/Items/ComputerCallResponseItem.cs b/src/Custom/Responses/Items/ComputerCallResponseItem.cs index d6cd5c21b..dc7772a3a 100644 --- a/src/Custom/Responses/Items/ComputerCallResponseItem.cs +++ b/src/Custom/Responses/Items/ComputerCallResponseItem.cs @@ -5,9 +5,18 @@ namespace OpenAI.Responses; // CUSTOM: +// - Added Experimental attribute. // - Renamed. -[CodeGenType("ResponsesComputerCallItem")] [Experimental("OPENAICUA001")] +[CodeGenType("ComputerToolCallItemResource")] public partial class ComputerCallResponseItem { + // CUSTOM: Retain optionality of OpenAPI read-only property value + [CodeGenMember("Status")] + public ComputerCallStatus? Status { get; } + + // CUSTOM: For reuse as an input model + public ComputerCallResponseItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks) + : this(id: null, callId, action, pendingSafetyChecks, status: null) + { } } diff --git a/src/Custom/Responses/Items/ComputerCallSafetyCheck.cs b/src/Custom/Responses/Items/ComputerCallSafetyCheck.cs index 8ba01157c..6de06c041 100644 --- a/src/Custom/Responses/Items/ComputerCallSafetyCheck.cs +++ b/src/Custom/Responses/Items/ComputerCallSafetyCheck.cs @@ -2,8 +2,11 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesComputerCallItemSafetyCheck")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerToolCallSafetyCheck")] public partial class ComputerCallSafetyCheck { } diff --git a/src/Custom/Responses/Items/ComputerCallStatus.cs b/src/Custom/Responses/Items/ComputerCallStatus.cs index 9f6f47f88..893c65bba 100644 --- a/src/Custom/Responses/Items/ComputerCallStatus.cs +++ b/src/Custom/Responses/Items/ComputerCallStatus.cs @@ -2,9 +2,11 @@ namespace OpenAI.Responses; -// CUSTOM: Renamed. -[CodeGenType("ResponsesComputerCallItemStatus")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerToolCallItemResourceStatus")] public enum ComputerCallStatus { InProgress, diff --git a/src/Custom/Responses/Items/ComputerOutput.cs b/src/Custom/Responses/Items/ComputerOutput.cs index bfee17306..1deac2af5 100644 --- a/src/Custom/Responses/Items/ComputerOutput.cs +++ b/src/Custom/Responses/Items/ComputerOutput.cs @@ -3,15 +3,18 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesComputerCallOutputItemOutput")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerToolCallOutputItemOutput")] public partial class ComputerOutput { public static ComputerOutput CreateScreenshotOutput(Uri screenshotImageUri) { Argument.AssertNotNull(screenshotImageUri, nameof(screenshotImageUri)); - return new InternalResponsesComputerCallOutputItemScreenshot() + return new InternalComputerToolCallOutputItemOutputComputerScreenshot() { ImageUrl = screenshotImageUri.AbsoluteUri, }; @@ -21,7 +24,7 @@ public static ComputerOutput CreateScreenshotOutput(string screenshotImageFileId { Argument.AssertNotNull(screenshotImageFileId, nameof(screenshotImageFileId)); - return new InternalResponsesComputerCallOutputItemScreenshot() + return new InternalComputerToolCallOutputItemOutputComputerScreenshot() { FileId = screenshotImageFileId, }; @@ -35,7 +38,7 @@ public static ComputerOutput CreateScreenshotOutput(BinaryData screenshotImageBy string base64EncodedData = Convert.ToBase64String(screenshotImageBytes.ToArray()); string dataUri = $"data:{screenshotImageBytesMediaType};base64,{base64EncodedData}"; - return new InternalResponsesComputerCallOutputItemScreenshot() + return new InternalComputerToolCallOutputItemOutputComputerScreenshot() { ImageUrl = dataUri, }; diff --git a/src/Custom/Responses/Items/FileSearchCallResponseItem.cs b/src/Custom/Responses/Items/FileSearchCallResponseItem.cs index 3ff0b1181..848d4d7bb 100644 --- a/src/Custom/Responses/Items/FileSearchCallResponseItem.cs +++ b/src/Custom/Responses/Items/FileSearchCallResponseItem.cs @@ -1,8 +1,28 @@ -namespace OpenAI.Responses; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; + +namespace OpenAI.Responses; // CUSTOM: +// - Added Experimental attribute. // - Renamed. -[CodeGenType("ResponsesFileSearchCallItem")] +[Experimental("OPENAI001")] +[CodeGenType("FileSearchToolCallItemResource")] public partial class FileSearchCallResponseItem { + // CUSTOM: Retain optionality of OpenAPI read-only property value + [CodeGenMember("Status")] + public FileSearchCallStatus? Status { get; } + + // CUSTOM: For reuse as an input model + internal FileSearchCallResponseItem(IEnumerable queries, IEnumerable results = null) + : this( + kind: InternalItemType.FileSearchCall, + id: null, + additionalBinaryDataProperties: null, + queries.ToList(), + results.ToList(), + status: null) + { } } \ No newline at end of file diff --git a/src/Custom/Responses/Items/FileSearchCallResult.cs b/src/Custom/Responses/Items/FileSearchCallResult.cs index e83191a39..353ad2ba3 100644 --- a/src/Custom/Responses/Items/FileSearchCallResult.cs +++ b/src/Custom/Responses/Items/FileSearchCallResult.cs @@ -1,6 +1,17 @@ -namespace OpenAI.Responses; +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponsesFileSearchCallItemResult")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("FileSearchToolCallItemResourceResult")] public partial class FileSearchCallResult { + // CUSTOM: Use a plain dictionary. + [CodeGenMember("Attributes")] + public IReadOnlyDictionary Attributes { get; } } \ No newline at end of file diff --git a/src/Custom/Responses/Items/FileSearchCallStatus.cs b/src/Custom/Responses/Items/FileSearchCallStatus.cs index 3fac9a41d..e4608a09b 100644 --- a/src/Custom/Responses/Items/FileSearchCallStatus.cs +++ b/src/Custom/Responses/Items/FileSearchCallStatus.cs @@ -1,7 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Renamed. -[CodeGenType("ResponsesFileSearchCallItemStatus")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("FileSearchToolCallItemResourceStatus")] public enum FileSearchCallStatus { InProgress, diff --git a/src/Custom/Responses/Items/FunctionCallOutputResponseItem.cs b/src/Custom/Responses/Items/FunctionCallOutputResponseItem.cs index 03aebe9c5..ce8a69815 100644 --- a/src/Custom/Responses/Items/FunctionCallOutputResponseItem.cs +++ b/src/Custom/Responses/Items/FunctionCallOutputResponseItem.cs @@ -1,9 +1,24 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponsesFunctionCallOutput")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("FunctionToolCallOutputItemResource")] public partial class FunctionCallOutputResponseItem { // CUSTOM: Renamed. [CodeGenMember("Output")] public string FunctionOutput { get; set; } + + // CUSTOM: Retain optionality of OpenAPI read-only property value + [CodeGenMember("Status")] + public FunctionCallOutputStatus? Status { get; } + + // CUSTOM: For reuse as an input model + internal FunctionCallOutputResponseItem(string callId, string functionOutput) + : this(id: null, callId, functionOutput, status: null) + { } } diff --git a/src/Custom/Responses/Items/FunctionCallOutputStatus.cs b/src/Custom/Responses/Items/FunctionCallOutputStatus.cs index e1f96d0e9..9af665cda 100644 --- a/src/Custom/Responses/Items/FunctionCallOutputStatus.cs +++ b/src/Custom/Responses/Items/FunctionCallOutputStatus.cs @@ -1,7 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Renamed. -[CodeGenType("ResponsesFunctionCallOutputStatus")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("FunctionToolCallOutputItemResourceStatus")] public enum FunctionCallOutputStatus { InProgress, diff --git a/src/Custom/Responses/Items/FunctionCallResponseItem.cs b/src/Custom/Responses/Items/FunctionCallResponseItem.cs index 5a5ace3b0..b214973b9 100644 --- a/src/Custom/Responses/Items/FunctionCallResponseItem.cs +++ b/src/Custom/Responses/Items/FunctionCallResponseItem.cs @@ -1,11 +1,15 @@ using System; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Responses; + // CUSTOM: +// - Added Experimental attribute. // - Renamed. -// - Customized serialization of the BinaryData-as-string FunctionArguments -[CodeGenType("ResponsesFunctionCallItem")] +// - Customized serialization of the BinaryData-as-string FunctionArguments. +[Experimental("OPENAI001")] +[CodeGenType("FunctionToolCallItemResource")] [CodeGenSerialization(nameof(FunctionArguments), SerializationValueHook = nameof(SerializeFunctionArgumentsValue), DeserializationValueHook = nameof(DeserializeFunctionArgumentsValue))] public partial class FunctionCallResponseItem { @@ -18,4 +22,13 @@ public partial class FunctionCallResponseItem // - Changed type from string to BinaryData. [CodeGenMember("Arguments")] public BinaryData FunctionArguments { get; set; } + + // CUSTOM: Retain optionality of OpenAPI read-only property value + [CodeGenMember("Status")] + public FunctionCallStatus? Status { get; } + + // CUSTOM: For reuse as an input model + internal FunctionCallResponseItem(string callId, string functionName, BinaryData functionArguments) + : this(id: null, callId, functionName, functionArguments, status: null) + { } } \ No newline at end of file diff --git a/src/Custom/Responses/Items/FunctionCallStatus.cs b/src/Custom/Responses/Items/FunctionCallStatus.cs index 63e2b5c00..3839029cc 100644 --- a/src/Custom/Responses/Items/FunctionCallStatus.cs +++ b/src/Custom/Responses/Items/FunctionCallStatus.cs @@ -1,7 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Renamed. -[CodeGenType("ResponsesFunctionCallItemStatus")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("FunctionToolCallItemResourceStatus")] public enum FunctionCallStatus { InProgress, diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs index 0d0c72bf7..344a4fb41 100644 --- a/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs +++ b/src/Custom/Responses/Items/Internal/InternalResponsesAssistantMessage.cs @@ -2,10 +2,15 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesAssistantMessage")] +[CodeGenType("ResponsesAssistantMessageItemResource")] internal partial class InternalResponsesAssistantMessage { // CUSTOM: Use generalized content type. [CodeGenMember("Content")] public IList InternalContent { get; } + + // CUSTOM: For reuse as an input model + internal InternalResponsesAssistantMessage(IEnumerable internalContent) + : this(id: null, status: null, internalContent) + { } } \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs index 48a76b004..83683f0cb 100644 --- a/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs +++ b/src/Custom/Responses/Items/Internal/InternalResponsesDeveloperMessage.cs @@ -2,10 +2,15 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesDeveloperMessage")] +[CodeGenType("ResponsesDeveloperMessageItemResource")] internal partial class InternalResponsesDeveloperMessage { // CUSTOM: Use generalized content type. [CodeGenMember("Content")] public IList InternalContent { get; } + + // CUSTOM: For reuse as an input model + internal InternalResponsesDeveloperMessage(IEnumerable internalContent) + : this(id: null, status: null, internalContent) + { } } \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs index 0fcf06844..0a1746b6d 100644 --- a/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs +++ b/src/Custom/Responses/Items/Internal/InternalResponsesSystemMessage.cs @@ -2,10 +2,15 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesSystemMessage")] +[CodeGenType("ResponsesSystemMessageItemResource")] internal partial class InternalResponsesSystemMessage { // CUSTOM: Use generalized content type. [CodeGenMember("Content")] public IList InternalContent { get; } + + // CUSTOM: For reuse as an input model + internal InternalResponsesSystemMessage(IEnumerable internalContent) + : this(id: null, status: null, internalContent) + { } } \ No newline at end of file diff --git a/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs b/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs index 2d56c009f..8f338abca 100644 --- a/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs +++ b/src/Custom/Responses/Items/Internal/InternalResponsesUserMessage.cs @@ -2,10 +2,15 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesUserMessage")] +[CodeGenType("ResponsesUserMessageItemResource")] internal partial class InternalResponsesUserMessage { // CUSTOM: Use generalized content type. [CodeGenMember("Content")] public IList InternalContent { get; } + + // CUSTOM: For reuse as an input model + internal InternalResponsesUserMessage(IEnumerable internalContent) + : this(id: null, status: null, internalContent) + { } } \ No newline at end of file diff --git a/src/Custom/Responses/Items/MessageResponseItem.cs b/src/Custom/Responses/Items/MessageResponseItem.cs index dc12560e4..c988d3865 100644 --- a/src/Custom/Responses/Items/MessageResponseItem.cs +++ b/src/Custom/Responses/Items/MessageResponseItem.cs @@ -1,9 +1,13 @@ using System.Collections.Generic; -using System.Text; +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesMessage")] -[CodeGenSuppress(nameof(MessageResponseItem), typeof(InternalResponsesMessageRole))] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponsesMessageItemResource")] public partial class MessageResponseItem { // CUSTOM: Expose public enum type with 'Unknown' using internal extensible role. @@ -15,6 +19,10 @@ public MessageRole Role private set => InternalRole = value.ToSerialString(); } + // CUSTOM: Retain optionality of OpenAPI read-only property value + [CodeGenMember("Status")] + public MessageStatus? Status { get; } + // CUSTOM: Recombined content from derived types. public IList Content => (this as InternalResponsesUserMessage)?.InternalContent @@ -23,13 +31,8 @@ public IList Content ?? (this as InternalResponsesAssistantMessage)?.InternalContent ?? []; - internal MessageResponseItem(MessageRole role) : base(InternalResponsesItemType.Message) - { - Role = role; - } - - internal MessageResponseItem(InternalResponsesMessageRole internalRole) : base(InternalResponsesItemType.Message) - { - InternalRole = internalRole; - } + // CUSTOM: For reuse as an input model base + internal MessageResponseItem(InternalResponsesMessageRole internalRole) + : this(id: null, internalRole, status: null) + { } } diff --git a/src/Custom/Responses/Items/MessageRole.cs b/src/Custom/Responses/Items/MessageRole.cs index e468a6911..61d3958e3 100644 --- a/src/Custom/Responses/Items/MessageRole.cs +++ b/src/Custom/Responses/Items/MessageRole.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -// CUSTOM: Plain enum type, with Unknown, to convert from an underlying extensible enum +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +// - Plain enum type, with Unknown, to convert from an underlying extensible enum. +[Experimental("OPENAI001")] public enum MessageRole { Unknown = 0, diff --git a/src/Custom/Responses/Items/MessageStatus.cs b/src/Custom/Responses/Items/MessageStatus.cs index c5fd9ec87..d7a26bed6 100644 --- a/src/Custom/Responses/Items/MessageStatus.cs +++ b/src/Custom/Responses/Items/MessageStatus.cs @@ -1,7 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Renamed. -[CodeGenType("ResponsesMessageStatus")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponsesMessageItemResourceStatus")] public enum MessageStatus { InProgress, diff --git a/src/Custom/Responses/Items/ReasoningResponseItem.cs b/src/Custom/Responses/Items/ReasoningResponseItem.cs index cdeb0c696..da9b31400 100644 --- a/src/Custom/Responses/Items/ReasoningResponseItem.cs +++ b/src/Custom/Responses/Items/ReasoningResponseItem.cs @@ -1,33 +1,37 @@ using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace OpenAI.Responses; // CUSTOM: +// - Added Experimental attribute. // - Renamed. -[CodeGenType("ResponsesReasoningItem")] +[Experimental("OPENAI001")] +[CodeGenType("ReasoningItemResource")] public partial class ReasoningResponseItem { - // CUSTOM: Convert simple text input into typed wire input - public ReasoningResponseItem(IEnumerable summaryTextParts) : base(InternalResponsesItemType.Reasoning) - { - Argument.AssertNotNull(summaryTextParts, nameof(summaryTextParts)); + // CUSTOM: Retain optionality of OpenAPI read-only property value + [CodeGenMember("Status")] + public ReasoningStatus? Status { get; } - Summary ??= []; - foreach (string summaryTextPart in summaryTextParts) - { - Summary.Add(new InternalResponsesReasoningItemSummaryElementSummaryText(summaryTextPart)); - } - } - - // CUSTOM: Made internal for simplified public reprojection + // CUSTOM: Rename for collection clarity [CodeGenMember("Summary")] - internal IList Summary { get; } + public IReadOnlyList SummaryParts { get; } + + // CUSTOM: Enable reuse as an input model + public ReasoningResponseItem(IEnumerable summaryParts) + : this(id: null, summaryParts) + { } + + // CUSTOM: Facilitate typical single-item summary text input model use + public ReasoningResponseItem(string summaryText) + : this(summaryParts: [new ReasoningSummaryTextPart(summaryText)]) + { } - public IReadOnlyList SummaryTextParts - => Summary? - .Select(summaryElement => summaryElement as InternalResponsesReasoningItemSummaryElementSummaryText)? - .Select(summaryTextElement => summaryTextElement.Text)? - .ToList() - ?? []; + // CUSTOM: Provide convenience for typical single-item or text-concatenation scenario + public string GetSummaryText() + => string.Join( + separator: string.Empty, + SummaryParts.Select(part => (part as ReasoningSummaryTextPart)?.Text ?? string.Empty)); } diff --git a/src/Custom/Responses/Items/ReasoningStatus.cs b/src/Custom/Responses/Items/ReasoningStatus.cs index 93d7f077c..55779e49f 100644 --- a/src/Custom/Responses/Items/ReasoningStatus.cs +++ b/src/Custom/Responses/Items/ReasoningStatus.cs @@ -1,7 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Renamed. -[CodeGenType("ResponsesReasoningItemStatus")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ReasoningItemStatus")] public enum ReasoningStatus { InProgress, diff --git a/src/Custom/Responses/Items/ReasoningSummaryPart.cs b/src/Custom/Responses/Items/ReasoningSummaryPart.cs new file mode 100644 index 000000000..36da0db22 --- /dev/null +++ b/src/Custom/Responses/Items/ReasoningSummaryPart.cs @@ -0,0 +1,23 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ReasoningItemSummaryPart")] +public partial class ReasoningSummaryPart +{ + // CUSTOM: Added as a constructor alternative for discoverability + /// + /// Creates a new instance of . + /// + /// + /// + /// + /// This is equivalent to creating an instance of via its constructor. + /// + public static ReasoningSummaryPart CreateTextPart(string text) + => new ReasoningSummaryTextPart(text); +} diff --git a/src/Custom/Responses/Items/ReasoningSummaryTextPart.cs b/src/Custom/Responses/Items/ReasoningSummaryTextPart.cs new file mode 100644 index 000000000..586651680 --- /dev/null +++ b/src/Custom/Responses/Items/ReasoningSummaryTextPart.cs @@ -0,0 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ReasoningItemSummaryTextPart")] +public partial class ReasoningSummaryTextPart +{ +} diff --git a/src/Custom/Responses/Items/ReferenceResponseItem.cs b/src/Custom/Responses/Items/ReferenceResponseItem.cs index b734697d9..9ba47c9cb 100644 --- a/src/Custom/Responses/Items/ReferenceResponseItem.cs +++ b/src/Custom/Responses/Items/ReferenceResponseItem.cs @@ -1,19 +1,18 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; // CUSTOM: +// - Added Experimental attribute. // - Renamed. -[CodeGenType("ResponsesItemReferenceItem")] +[Experimental("OPENAI001")] +[CodeGenType("DotNetItemReferenceItemResource")] +[CodeGenVisibility(nameof(ReferenceResponseItem), CodeGenVisibility.Internal)] public partial class ReferenceResponseItem { + // CUSTOM: Added to support ease of input model use public ReferenceResponseItem(string id) - : base( - InternalResponsesItemType.ItemReference, - id, - additionalBinaryDataProperties: null) + : this(InternalItemType.ItemReference, id, additionalBinaryDataProperties: null) { } - - // CUSTOM: Supply an internal default constructor for serialization and mocking. - internal ReferenceResponseItem() - { } } diff --git a/src/Custom/Responses/Items/ResponseItem.cs b/src/Custom/Responses/Items/ResponseItem.cs index 6a001a8f6..b99031b0d 100644 --- a/src/Custom/Responses/Items/ResponseItem.cs +++ b/src/Custom/Responses/Items/ResponseItem.cs @@ -1,13 +1,20 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Text; namespace OpenAI.Responses; -[CodeGenType("ResponsesItem")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ItemResource")] public partial class ResponseItem { + // CUSTOM: Specify read-only semantics for ID + [CodeGenMember("Id")] + public string Id { get; } + public static MessageResponseItem CreateUserMessageItem(IEnumerable contentParts) { Argument.AssertNotNullOrEmpty(contentParts, nameof(contentParts)); @@ -37,7 +44,7 @@ public static MessageResponseItem CreateDeveloperMessageItem(string inputTextCon public static MessageResponseItem CreateSystemMessageItem(IEnumerable contentParts) { Argument.AssertNotNull(contentParts, nameof(contentParts)); - return new InternalResponsesSystemMessage(contentParts); + return new InternalResponsesSystemMessage(id: null, status: null, contentParts); } public static MessageResponseItem CreateSystemMessageItem(string inputTextContent) @@ -62,41 +69,57 @@ public static MessageResponseItem CreateAssistantMessageItem( return new InternalResponsesAssistantMessage( internalContent: [ - new InternalResponsesOutputTextContentPart(annotations ?? [], outputTextContent), + new InternalItemContentOutputText(annotations ?? [], outputTextContent), ]); } [Experimental("OPENAICUA001")] - public static ResponseItem CreateComputerCallItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks) + public static ComputerCallResponseItem CreateComputerCallItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks) { + Argument.AssertNotNull(callId, nameof(callId)); return new ComputerCallResponseItem(callId, action, pendingSafetyChecks); } [Experimental("OPENAICUA001")] - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, Uri screenshotImageUri) + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, Uri screenshotImageUri) { - return new ComputerCallOutputResponseItem( + Argument.AssertNotNull(callId, nameof(callId)); + ComputerCallOutputResponseItem item = new( callId, - acknowledgedSafetyChecks, ComputerOutput.CreateScreenshotOutput(screenshotImageUri)); + foreach (ComputerCallSafetyCheck safetyCheck in acknowledgedSafetyChecks ?? []) + { + item.AcknowledgedSafetyChecks.Add(safetyCheck); + } + return item; } [Experimental("OPENAICUA001")] - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, string screenshotImageFileId) + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, string screenshotImageFileId) { - return new ComputerCallOutputResponseItem( + Argument.AssertNotNull(callId, nameof(callId)); + ComputerCallOutputResponseItem item = new( callId, - acknowledgedSafetyChecks, ComputerOutput.CreateScreenshotOutput(screenshotImageFileId)); + foreach (ComputerCallSafetyCheck safetyCheck in acknowledgedSafetyChecks ?? []) + { + item.AcknowledgedSafetyChecks.Add(safetyCheck); + } + return item; } [Experimental("OPENAICUA001")] - public static ResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, BinaryData screenshotImageBytes, string screenshotImageBytesMediaType) + public static ComputerCallOutputResponseItem CreateComputerCallOutputItem(string callId, IList acknowledgedSafetyChecks, BinaryData screenshotImageBytes, string screenshotImageBytesMediaType) { - return new ComputerCallOutputResponseItem( + Argument.AssertNotNull(callId, nameof(callId)); + ComputerCallOutputResponseItem item = new( callId, - acknowledgedSafetyChecks, ComputerOutput.CreateScreenshotOutput(screenshotImageBytes, screenshotImageBytesMediaType)); + foreach (ComputerCallSafetyCheck safetyCheck in acknowledgedSafetyChecks ?? []) + { + item.AcknowledgedSafetyChecks.Add(safetyCheck); + } + return item; } public static WebSearchCallResponseItem CreateWebSearchCallItem() @@ -108,22 +131,36 @@ public static FileSearchCallResponseItem CreateFileSearchCallItem( IEnumerable queries, IEnumerable results) { + Argument.AssertNotNullOrEmpty(queries, nameof(queries)); return new FileSearchCallResponseItem(queries, results); } public static FunctionCallResponseItem CreateFunctionCallItem(string callId, string functionName, BinaryData functionArguments) { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(functionName, nameof(functionName)); + Argument.AssertNotNull(functionArguments, nameof(functionArguments)); + return new FunctionCallResponseItem(callId, functionName, functionArguments); } public static FunctionCallOutputResponseItem CreateFunctionCallOutputItem(string callId, string functionOutput) { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(functionOutput, nameof(functionOutput)); return new FunctionCallOutputResponseItem(callId, functionOutput); } - public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryTextParts) + public static ReasoningResponseItem CreateReasoningItem(IEnumerable summaryParts) + { + Argument.AssertNotNullOrEmpty(summaryParts, nameof(summaryParts)); + return new ReasoningResponseItem(summaryParts); + } + + public static ReasoningResponseItem CreateReasoningItem(string summaryText) { - return new ReasoningResponseItem(summaryTextParts); + Argument.AssertNotNull(summaryText, nameof(summaryText)); + return new ReasoningResponseItem(summaryText); } public static ReferenceResponseItem CreateReferenceItem(string id) diff --git a/src/Custom/Responses/Items/WebSearchCallResponseItem.cs b/src/Custom/Responses/Items/WebSearchCallResponseItem.cs index e2741b2e7..c1533e59c 100644 --- a/src/Custom/Responses/Items/WebSearchCallResponseItem.cs +++ b/src/Custom/Responses/Items/WebSearchCallResponseItem.cs @@ -1,8 +1,15 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; // CUSTOM: +// - Added Experimental attribute. // - Renamed. -[CodeGenType("ResponsesWebSearchCallItem")] +[Experimental("OPENAI001")] +[CodeGenType("WebSearchToolCallItemResource")] public partial class WebSearchCallResponseItem { + // CUSTOM: Retain optionality of OpenAPI read-only property value + [CodeGenMember("Status")] + public WebSearchCallStatus? Status { get; } } diff --git a/src/Custom/Responses/Items/WebSearchCallStatus.cs b/src/Custom/Responses/Items/WebSearchCallStatus.cs index f1a184eb8..5611529f4 100644 --- a/src/Custom/Responses/Items/WebSearchCallStatus.cs +++ b/src/Custom/Responses/Items/WebSearchCallStatus.cs @@ -1,7 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Renamed. -[CodeGenType("ResponsesWebSearchCallItemStatus")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("WebSearchToolCallItemResourceStatus")] public enum WebSearchCallStatus { InProgress, diff --git a/src/Custom/Responses/OpenAIResponse.cs b/src/Custom/Responses/OpenAIResponse.cs index 49f3dd8e6..47a707355 100644 --- a/src/Custom/Responses/OpenAIResponse.cs +++ b/src/Custom/Responses/OpenAIResponse.cs @@ -1,17 +1,20 @@ +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; -using System.Text; +using System.Text.Json; namespace OpenAI.Responses; -// CUSTOM: Renamed. -[CodeGenType("ResponsesResponse")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("Response")] +[CodeGenSuppress("OutputText")] public partial class OpenAIResponse { - // CUSTOM: Made private. This property does not add value in the context of a strongly-typed class. - [CodeGenMember("Object")] - internal InternalCreateResponsesResponseObject Object { get; } = "response"; - // CUSTOM: Renamed. [CodeGenMember("User")] public string EndUserId { get; } @@ -48,6 +51,13 @@ public partial class OpenAIResponse [CodeGenMember("ToolChoice")] public ResponseToolChoice ToolChoice { get; } + // CUSTOM: Use a plain string. + [CodeGenMember("Model")] + public string Model { get; } + + // CUSTOM: Made internal + internal string Object { get; } = "response"; + public string GetOutputText() { IEnumerable outputTextSegments = OutputItems.Where(item => item is MessageResponseItem) @@ -56,4 +66,11 @@ public string GetOutputText() .Select(outputTextPart => outputTextPart.Text)); return outputTextSegments.Any() ? string.Join(string.Empty, outputTextSegments) : null; } + + internal static OpenAIResponse FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeOpenAIResponse(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/Responses/OpenAIResponseClient.Protocol.cs b/src/Custom/Responses/OpenAIResponseClient.Protocol.cs index 28b310d94..632305b02 100644 --- a/src/Custom/Responses/OpenAIResponseClient.Protocol.cs +++ b/src/Custom/Responses/OpenAIResponseClient.Protocol.cs @@ -1,14 +1,21 @@ using System.ClientModel; using System.ClientModel.Primitives; +using System.Collections.Generic; using System.ComponentModel; using System.Threading.Tasks; namespace OpenAI.Responses; -[CodeGenSuppress("CreateResponse", typeof(BinaryContent), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("CreateResponseAsync", typeof(BinaryContent), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListInputItems", typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListInputItemsAsync", typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("CreateResponse", typeof(string), typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("CreateResponseAsync", typeof(string), typeof(BinaryContent), typeof(RequestOptions))] +[CodeGenSuppress("GetResponse", typeof(string), typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetResponseAsync", typeof(string), typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetInputItems", typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("GetInputItemsAsync", typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("CancelResponse", typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("CancelResponseAsync", typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetResponse", typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(RequestOptions))] +[CodeGenSuppress("GetResponseAsync", typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(RequestOptions))] public partial class OpenAIResponseClient { [EditorBrowsable(EditorBrowsableState.Never)] @@ -16,11 +23,7 @@ public virtual async Task CreateResponseAsync(BinaryContent conten { Argument.AssertNotNull(content, nameof(content)); - string acceptHeaderValue = options?.BufferResponse == false - ? AcceptHeaderValue.TextEventStream.ToString() - : AcceptHeaderValue.ApplicationJson.ToString(); - - using PipelineMessage message = CreateCreateResponseRequest(content, acceptHeaderValue, options); + using PipelineMessage message = CreateCreateResponseRequest(content, options); PipelineResponse protocolResponse = await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); return ClientResult.FromResponse(protocolResponse); } @@ -30,32 +33,28 @@ public virtual ClientResult CreateResponse(BinaryContent content, RequestOptions { Argument.AssertNotNull(content, nameof(content)); - string acceptHeaderValue = options?.BufferResponse == false - ? AcceptHeaderValue.TextEventStream.ToString() - : AcceptHeaderValue.ApplicationJson.ToString(); - - using PipelineMessage message = CreateCreateResponseRequest(content, acceptHeaderValue, options); + using PipelineMessage message = CreateCreateResponseRequest(content, options); PipelineResponse protocolResponse = Pipeline.ProcessMessage(message, options); return ClientResult.FromResponse(protocolResponse); } [EditorBrowsable(EditorBrowsableState.Never)] - public virtual async Task GetResponseAsync(string responseId, RequestOptions options) + public virtual async Task GetResponseAsync(string responseId, bool? stream, int? startingAfter, RequestOptions options) { Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); - using PipelineMessage message = CreateGetResponseRequest(responseId, [], options); + using PipelineMessage message = CreateGetResponseRequest(responseId, [], stream, startingAfter, options); PipelineResponse protocolResponse = await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false); return ClientResult.FromResponse(protocolResponse); } [EditorBrowsable(EditorBrowsableState.Never)] - public virtual ClientResult GetResponse(string responseId, RequestOptions options) + public virtual ClientResult GetResponse(string responseId, bool? stream, int? startingAfter, RequestOptions options) { Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); - using PipelineMessage message = CreateGetResponseRequest(responseId, [], options); + using PipelineMessage message = CreateGetResponseRequest(responseId, [], stream, startingAfter, options); PipelineResponse protocolResponse = Pipeline.ProcessMessage(message, options); return ClientResult.FromResponse(protocolResponse); } diff --git a/src/Custom/Responses/OpenAIResponseClient.cs b/src/Custom/Responses/OpenAIResponseClient.cs index ae2e19589..2aa2649d1 100644 --- a/src/Custom/Responses/OpenAIResponseClient.cs +++ b/src/Custom/Responses/OpenAIResponseClient.cs @@ -2,21 +2,30 @@ using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace OpenAI.Responses; +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] [CodeGenType("Responses")] -[CodeGenSuppress("CreateResponseAsync", typeof(ResponseCreationOptions), typeof(AcceptHeaderValue), typeof(CancellationToken))] -[CodeGenSuppress("CreateResponse", typeof(ResponseCreationOptions), typeof(AcceptHeaderValue), typeof(CancellationToken))] -[CodeGenSuppress("GetResponse", typeof(string), typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("GetResponseAsync", typeof(string), typeof(IEnumerable), typeof(CancellationToken))] -[CodeGenSuppress("GetResponse", typeof(string), typeof(IEnumerable), typeof(RequestOptions))] -[CodeGenSuppress("GetResponseAsync", typeof(string), typeof(IEnumerable), typeof(RequestOptions))] -[CodeGenSuppress("ListInputItems", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListInputItemsAsync", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CreateResponseAsync", typeof(ResponseCreationOptions), typeof(CancellationToken))] +[CodeGenSuppress("CreateResponse", typeof(ResponseCreationOptions), typeof(CancellationToken))] +[CodeGenSuppress("GetResponse", typeof(string), typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetResponseAsync", typeof(string), typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetInputItems", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetInputItemsAsync", typeof(string), typeof(int?), typeof(OpenAI.VectorStores.VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("DeleteResponse", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("DeleteResponseAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CancelResponse", typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("CancelResponseAsync", typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetResponse", typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(CancellationToken))] +[CodeGenSuppress("GetResponseAsync", typeof(string), typeof(IEnumerable), typeof(bool?), typeof(int?), typeof(CancellationToken))] public partial class OpenAIResponseClient { private readonly string _model; @@ -56,7 +65,6 @@ public partial class OpenAIResponseClient /// is an empty string, and was expected to be non-empty. public OpenAIResponseClient(string model, ApiKeyCredential credential, OpenAIClientOptions options) { - Argument.AssertNotNullOrEmpty(model, nameof(model)); Argument.AssertNotNull(credential, nameof(credential)); options ??= new OpenAIClientOptions(); @@ -79,7 +87,6 @@ public OpenAIResponseClient(string model, ApiKeyCredential credential, OpenAICli protected internal OpenAIResponseClient(ClientPipeline pipeline, string model, OpenAIClientOptions options) { Argument.AssertNotNull(pipeline, nameof(pipeline)); - Argument.AssertNotNullOrEmpty(model, nameof(model)); options ??= new OpenAIClientOptions(); _model = model; @@ -91,9 +98,9 @@ public virtual async Task> CreateResponseAsync(IEnu { Argument.AssertNotNullOrEmpty(inputItems, nameof(inputItems)); - using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: false); + using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: false).ToBinaryContent(); ClientResult protocolResult = await CreateResponseAsync(content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - OpenAIResponse convenienceValue = (OpenAIResponse)protocolResult; + OpenAIResponse convenienceValue = OpenAIResponse.FromClientResult(protocolResult); return ClientResult.FromValue(convenienceValue, protocolResult.GetRawResponse()); } @@ -101,9 +108,9 @@ public virtual ClientResult CreateResponse(IEnumerable CreateResponseStre { Argument.AssertNotNullOrEmpty(inputItems, nameof(inputItems)); - using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: true); + using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: true).ToBinaryContent(); return new AsyncSseUpdateCollection( async () => await CreateResponseAsync(content, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), StreamingResponseUpdate.DeserializeStreamingResponseUpdate, @@ -143,7 +150,7 @@ public virtual CollectionResult CreateResponseStreaming { Argument.AssertNotNullOrEmpty(inputItems, nameof(inputItems)); - using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: true); + using BinaryContent content = CreatePerCallOptions(options, inputItems, stream: true).ToBinaryContent(); return new SseUpdateCollection( () => CreateResponse(content, cancellationToken.ToRequestOptions(streaming: true)), StreamingResponseUpdate.DeserializeStreamingResponseUpdate, @@ -174,8 +181,8 @@ public virtual async Task> GetResponseAsync(string { Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); - ClientResult protocolResult = await GetResponseAsync(responseId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - OpenAIResponse convenienceResult = (OpenAIResponse)protocolResult; + ClientResult protocolResult = await GetResponseAsync(responseId, stream: null, startingAfter: null, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + OpenAIResponse convenienceResult = OpenAIResponse.FromClientResult(protocolResult); return ClientResult.FromValue(convenienceResult, protocolResult.GetRawResponse()); } @@ -183,11 +190,31 @@ public virtual ClientResult GetResponse(string responseId, Cance { Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); - ClientResult protocolResult = GetResponse(responseId, cancellationToken.ToRequestOptions()); - OpenAIResponse convenienceResult = (OpenAIResponse)protocolResult; + ClientResult protocolResult = GetResponse(responseId, stream: null, startingAfter: null, cancellationToken.ToRequestOptions()); + OpenAIResponse convenienceResult = OpenAIResponse.FromClientResult(protocolResult); return ClientResult.FromValue(convenienceResult, protocolResult.GetRawResponse()); } + public virtual AsyncCollectionResult GetResponseStreamingAsync(string responseId, int? startingAfter = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(responseId, nameof(responseId)); + + return new AsyncSseUpdateCollection( + async () => await GetResponseAsync(responseId, stream: true, startingAfter, cancellationToken.ToRequestOptions(streaming: true)).ConfigureAwait(false), + StreamingResponseUpdate.DeserializeStreamingResponseUpdate, + cancellationToken); + } + + public virtual CollectionResult GetResponseStreaming(string responseId, int? startingAfter = null, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(responseId, nameof(responseId)); + + return new SseUpdateCollection( + () => GetResponse(responseId, stream: true, startingAfter, cancellationToken.ToRequestOptions(streaming: true)), + StreamingResponseUpdate.DeserializeStreamingResponseUpdate, + cancellationToken); + } + public virtual AsyncCollectionResult GetResponseInputItemsAsync(string responseId, ResponseItemCollectionOptions options = default, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); @@ -221,7 +248,7 @@ public virtual async Task> DeleteResponseAs Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); ClientResult result = await DeleteResponseAsync(responseId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); - return ClientResult.FromValue((ResponseDeletionResult)result, result.GetRawResponse()); + return ClientResult.FromValue(ResponseDeletionResult.FromClientResult(result), result.GetRawResponse()); } public virtual ClientResult DeleteResponse(string responseId, CancellationToken cancellationToken = default) @@ -229,7 +256,25 @@ public virtual ClientResult DeleteResponse(string respon Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); ClientResult result = DeleteResponse(responseId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); - return ClientResult.FromValue((ResponseDeletionResult)result, result.GetRawResponse()); + return ClientResult.FromValue(ResponseDeletionResult.FromClientResult(result), result.GetRawResponse()); + } + + public virtual async Task> CancelResponseAsync(string responseId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + ClientResult protocolResult = await CancelResponseAsync(responseId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + OpenAIResponse convenienceResult = OpenAIResponse.FromClientResult(protocolResult); + return ClientResult.FromValue(convenienceResult, protocolResult.GetRawResponse()); + } + + public virtual ClientResult CancelResponse(string responseId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + ClientResult protocolResult = CancelResponse(responseId, cancellationToken.ToRequestOptions()); + OpenAIResponse convenienceResult = OpenAIResponse.FromClientResult(protocolResult); + return ClientResult.FromValue(convenienceResult, protocolResult.GetRawResponse()); } internal virtual ResponseCreationOptions CreatePerCallOptions(ResponseCreationOptions userOptions, IEnumerable inputItems, bool stream = false) @@ -237,12 +282,15 @@ internal virtual ResponseCreationOptions CreatePerCallOptions(ResponseCreationOp ResponseCreationOptions copiedOptions = userOptions is null ? new() : userOptions.GetClone(); + copiedOptions.Input = inputItems.ToList(); copiedOptions.Model = _model; + if (stream) { copiedOptions.Stream = true; } + return copiedOptions; } } \ No newline at end of file diff --git a/src/Custom/Responses/Pagination/AsyncResponseItemCollectionResult.cs b/src/Custom/Responses/Pagination/Internal/AsyncResponseItemCollectionResult.cs similarity index 92% rename from src/Custom/Responses/Pagination/AsyncResponseItemCollectionResult.cs rename to src/Custom/Responses/Pagination/Internal/AsyncResponseItemCollectionResult.cs index 6784f6c94..234b51bc3 100644 --- a/src/Custom/Responses/Pagination/AsyncResponseItemCollectionResult.cs +++ b/src/Custom/Responses/Pagination/Internal/AsyncResponseItemCollectionResult.cs @@ -53,7 +53,7 @@ protected override IAsyncEnumerable GetValuesFromPageAsync(ClientR Argument.AssertNotNull(page, nameof(page)); PipelineResponse response = page.GetRawResponse(); - InternalResponsesInputItemList list = ModelReaderWriter.Read(response.Content)!; + InternalResponseItemList list = ModelReaderWriter.Read(response.Content)!; return list.Data.ToAsyncEnumerable(_options?.CancellationToken ?? default); } @@ -83,7 +83,7 @@ public async Task GetNextPageAsync(ClientResult result) internal virtual async Task GetResponsesAsync(string responseId, int? limit, string? order, string? after, string? before, RequestOptions? options) { - using PipelineMessage message = _parentClient.CreateListInputItemsRequest(responseId, limit, order, after, before, options); + using PipelineMessage message = _parentClient.CreateGetInputItemsRequest(responseId, limit, order, after, before, options); return ClientResult.FromResponse(await _parentClient.Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } } diff --git a/src/Custom/Responses/Pagination/ResponseItemCollectionPageToken.cs b/src/Custom/Responses/Pagination/Internal/ResponseItemCollectionPageToken.cs similarity index 100% rename from src/Custom/Responses/Pagination/ResponseItemCollectionPageToken.cs rename to src/Custom/Responses/Pagination/Internal/ResponseItemCollectionPageToken.cs diff --git a/src/Custom/Responses/Pagination/ResponseItemCollectionResult.cs b/src/Custom/Responses/Pagination/Internal/ResponseItemCollectionResult.cs similarity index 92% rename from src/Custom/Responses/Pagination/ResponseItemCollectionResult.cs rename to src/Custom/Responses/Pagination/Internal/ResponseItemCollectionResult.cs index 06b004b4a..8be6a574b 100644 --- a/src/Custom/Responses/Pagination/ResponseItemCollectionResult.cs +++ b/src/Custom/Responses/Pagination/Internal/ResponseItemCollectionResult.cs @@ -51,7 +51,7 @@ protected override IEnumerable GetValuesFromPage(ClientResult page Argument.AssertNotNull(page, nameof(page)); PipelineResponse response = page.GetRawResponse(); - InternalResponsesInputItemList list = ModelReaderWriter.Read(response.Content)!; + InternalResponseItemList list = ModelReaderWriter.Read(response.Content)!; return list.Data; } @@ -91,7 +91,7 @@ public static bool HasNextPage(ClientResult result) internal virtual ClientResult GetResponseInputItems(string responseId, int? limit, string? order, string? after, string? before, RequestOptions? options) { - using PipelineMessage message = _parentClient.CreateListInputItemsRequest(responseId, limit, order, after, before, options); + using PipelineMessage message = _parentClient.CreateGetInputItemsRequest(responseId, limit, order, after, before, options); return ClientResult.FromResponse(_parentClient.Pipeline.ProcessMessage(message, options)); } } diff --git a/src/Custom/Responses/ResponseContentPart.cs b/src/Custom/Responses/ResponseContentPart.cs index e7189fb6a..9affc5e2a 100644 --- a/src/Custom/Responses/ResponseContentPart.cs +++ b/src/Custom/Responses/ResponseContentPart.cs @@ -1,50 +1,57 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace OpenAI.Responses; -[CodeGenType("ResponsesContent")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ItemContent")] public partial class ResponseContentPart { + // CUSTOM: Renamed to "Kind" and converted to public enum from internal extensible type. + [CodeGenMember("Type")] + internal InternalItemContentType InternalType { get; set; } public ResponseContentPartKind Kind { get => InternalType.ToString().ToResponseContentPartKind(); private set => InternalType = Kind.ToSerialString(); } - [CodeGenMember("Type")] - internal InternalResponsesContentType InternalType { get; set; } // CUSTOM: Exposed input text properties. public string Text - => (this as InternalResponsesInputTextContentPart)?.InternalText - ?? (this as InternalResponsesOutputTextContentPart)?.InternalText; + => (this as InternalItemContentInputText)?.InternalText + ?? (this as InternalItemContentOutputText)?.InternalText; // CUSTOM: Exposed input image properties. - public string InputImageFileId => (this as InternalResponsesInputImageContentPart)?.FileId; - public ResponseImageDetailLevel? InputImageDetailLevel => (this as InternalResponsesInputImageContentPart)?.Detail; + public string InputImageFileId => (this as InternalItemContentInputImage)?.FileId; + public ResponseImageDetailLevel? InputImageDetailLevel => (this as InternalItemContentInputImage)?.Detail; // CUSTOM: Exposed input file properties. - public string InputFileId => (this as InternalResponsesInputFileContentPart)?.FileId; - public string InputFilename => (this as InternalResponsesInputFileContentPart)?.Filename; - public BinaryData InputFileBytes => (this as InternalResponsesInputFileContentPart)?.FileBytes; + public string InputFileId => (this as InternalItemContentInputFile)?.FileId; + public string InputFilename => (this as InternalItemContentInputFile)?.Filename; + public BinaryData InputFileBytes => (this as InternalItemContentInputFile)?.InternalFileBytes; + public string InputFileBytesMediaType => (this as InternalItemContentInputFile)?.InternalFileBytesMediaType; // CUSTOM: Exposed output text properties. - public IReadOnlyList OutputTextAnnotations => (this as InternalResponsesOutputTextContentPart)?.Annotations?.ToList()?.AsReadOnly(); + public IReadOnlyList OutputTextAnnotations => (this as InternalItemContentOutputText)?.Annotations?.ToList()?.AsReadOnly(); // CUSTOM: Exposed refusal properties. - public string Refusal => (this as InternalResponsesOutputRefusalContentPart)?.InternalRefusal; + public string Refusal => (this as InternalItemContentRefusal)?.InternalRefusal; public static ResponseContentPart CreateInputTextPart(string text) { - return new InternalResponsesInputTextContentPart(text); + return new InternalItemContentInputText(text); } public static ResponseContentPart CreateInputImagePart(BinaryData imageBytes, string imageBytesMediaType, ResponseImageDetailLevel? imageDetailLevel = null) { string base64EncodedData = Convert.ToBase64String(imageBytes.ToArray()); string dataUri = $"data:{imageBytesMediaType};base64,{base64EncodedData}"; - return new InternalResponsesInputImageContentPart() + return new InternalItemContentInputImage() { ImageUrl = dataUri, Detail = imageDetailLevel, @@ -53,7 +60,7 @@ public static ResponseContentPart CreateInputImagePart(BinaryData imageBytes, st public static ResponseContentPart CreateInputImagePart(string imageFileId, ResponseImageDetailLevel? imageDetailLevel = null) { - return new InternalResponsesInputImageContentPart() + return new InternalItemContentInputImage() { FileId = imageFileId, Detail = imageDetailLevel, @@ -62,30 +69,37 @@ public static ResponseContentPart CreateInputImagePart(string imageFileId, Respo public static ResponseContentPart CreateInputImagePart(Uri imageUri, ResponseImageDetailLevel? imageDetailLevel = default) { - return new InternalResponsesInputImageContentPart() + return new InternalItemContentInputImage() { ImageUrl = imageUri?.AbsoluteUri, Detail = imageDetailLevel, }; } - public static ResponseContentPart CreateInputFilePart(string fileId, string filename, BinaryData fileBytes) + public static ResponseContentPart CreateInputFilePart(string fileId) { - return new InternalResponsesInputFileContentPart() + return new InternalItemContentInputFile() { FileId = fileId, - Filename = filename, - FileBytes = fileBytes, }; } + public static ResponseContentPart CreateInputFilePart(BinaryData fileBytes, string fileBytesMediaType, string filename) + { + Argument.AssertNotNull(fileBytes, nameof(fileBytes)); + Argument.AssertNotNullOrEmpty(fileBytesMediaType, nameof(fileBytesMediaType)); + Argument.AssertNotNullOrEmpty(filename, nameof(filename)); + + return new InternalItemContentInputFile(filename, fileBytes, fileBytesMediaType); + } + public static ResponseContentPart CreateOutputTextPart(string text, IEnumerable annotations) { - return new InternalResponsesOutputTextContentPart(annotations, text); + return new InternalItemContentOutputText(annotations, text); } public static ResponseContentPart CreateRefusalPart(string refusal) { - return new InternalResponsesOutputRefusalContentPart(refusal); + return new InternalItemContentRefusal(refusal); } } diff --git a/src/Custom/Responses/ResponseContentPartKind.Serialization.cs b/src/Custom/Responses/ResponseContentPartKind.Serialization.cs index be1e276a6..ecc1f3280 100644 --- a/src/Custom/Responses/ResponseContentPartKind.Serialization.cs +++ b/src/Custom/Responses/ResponseContentPartKind.Serialization.cs @@ -6,33 +6,33 @@ internal static partial class ResponseContentPartKindExtensions { public static string ToSerialString(this ResponseContentPartKind value) => value switch { - ResponseContentPartKind.InputText => InternalResponsesContentType.InputText.ToString(), - ResponseContentPartKind.InputImage => InternalResponsesContentType.InputImage.ToString(), - ResponseContentPartKind.InputFile => InternalResponsesContentType.InputFile.ToString(), - ResponseContentPartKind.OutputText => InternalResponsesContentType.OutputText.ToString(), - ResponseContentPartKind.Refusal => InternalResponsesContentType.Refusal.ToString(), + ResponseContentPartKind.InputText => InternalItemContentType.InputText.ToString(), + ResponseContentPartKind.InputImage => InternalItemContentType.InputImage.ToString(), + ResponseContentPartKind.InputFile => InternalItemContentType.InputFile.ToString(), + ResponseContentPartKind.OutputText => InternalItemContentType.OutputText.ToString(), + ResponseContentPartKind.Refusal => InternalItemContentType.Refusal.ToString(), _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseContentPartKind value.") }; public static ResponseContentPartKind ToResponseContentPartKind(this string value) { - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesContentType.InputText.ToString())) + if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalItemContentType.InputText.ToString())) { return ResponseContentPartKind.InputText; } - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesContentType.InputImage.ToString())) + if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalItemContentType.InputImage.ToString())) { return ResponseContentPartKind.InputImage; } - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesContentType.InputFile.ToString())) + if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalItemContentType.InputFile.ToString())) { return ResponseContentPartKind.InputFile; } - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesContentType.OutputText.ToString())) + if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalItemContentType.OutputText.ToString())) { return ResponseContentPartKind.OutputText; } - if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalResponsesContentType.Refusal.ToString())) + if (StringComparer.OrdinalIgnoreCase.Equals(value, InternalItemContentType.Refusal.ToString())) { return ResponseContentPartKind.Refusal; } diff --git a/src/Custom/Responses/ResponseContentPartKind.cs b/src/Custom/Responses/ResponseContentPartKind.cs index fd5e65203..4685e380f 100644 --- a/src/Custom/Responses/ResponseContentPartKind.cs +++ b/src/Custom/Responses/ResponseContentPartKind.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -// CUSTOM: Plain enum type, with Unknown, to convert from an underlying extensible enum +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +// - Plain enum type, with Unknown, to convert from an underlying extensible enum +[Experimental("OPENAI001")] public enum ResponseContentPartKind { Unknown, diff --git a/src/Custom/Responses/ResponseCreationOptions.cs b/src/Custom/Responses/ResponseCreationOptions.cs index 44a95e872..082ff3835 100644 --- a/src/Custom/Responses/ResponseCreationOptions.cs +++ b/src/Custom/Responses/ResponseCreationOptions.cs @@ -1,24 +1,29 @@ using System; +using System.ClientModel; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Responses; // CUSTOM: +// - Added Experimental attribute. // - Renamed. // - Suppressed constructor in favor of custom default constructor. -[CodeGenType("CreateResponsesRequest")] -[CodeGenSuppress(nameof(ResponseCreationOptions), typeof(InternalCreateResponsesRequestModel), typeof(IEnumerable))] +[Experimental("OPENAI001")] +[CodeGenType("CreateResponse")] +[CodeGenVisibility(nameof(ResponseCreationOptions), CodeGenVisibility.Public)] +[CodeGenSuppress(nameof(ResponseCreationOptions), typeof(IEnumerable))] public partial class ResponseCreationOptions { // CUSTOM: Temporarily made internal. [CodeGenMember("Include")] - internal IList Include { get; set; } + internal IList Include { get; set; } // CUSTOM: // - Made internal. This value comes from a parameter on the client method. // - Added setter. [CodeGenMember("Model")] - internal InternalCreateResponsesRequestModel Model { get; set; } + internal string Model { get; set; } // CUSTOM: // - Made internal. This value comes from a parameter on the client method. @@ -29,15 +34,6 @@ public partial class ResponseCreationOptions // CUSTOM: Made internal. This value comes from a parameter on the client method. internal bool? Stream { get; set; } - // CUSTOM: Added public default constructor now that there are no required properties. - public ResponseCreationOptions() - { - Input = new ChangeTrackingList(); - Metadata = new ChangeTrackingDictionary(); - Tools = new ChangeTrackingList(); - Include = new ChangeTrackingList(); - } - // CUSTOM: Renamed. [CodeGenMember("User")] public string EndUserId { get; set; } @@ -89,4 +85,6 @@ internal ResponseCreationOptions GetClone() return copiedOptions; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/Responses/ResponseDeletionResult.cs b/src/Custom/Responses/ResponseDeletionResult.cs index 9f337f1cc..99cddb2b8 100644 --- a/src/Custom/Responses/ResponseDeletionResult.cs +++ b/src/Custom/Responses/ResponseDeletionResult.cs @@ -1,10 +1,25 @@ +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; + namespace OpenAI.Responses; +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] [CodeGenType("DeleteResponseResponse")] public partial class ResponseDeletionResult { // CUSTOM: Made internal. [CodeGenMember("Object")] - internal InternalDeleteResponseResponseObject Object { get; } = "response.deleted"; + internal string Object { get; } = "response.deleted"; + internal static ResponseDeletionResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeResponseDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } } \ No newline at end of file diff --git a/src/Custom/Responses/ResponseError.cs b/src/Custom/Responses/ResponseError.cs index c8eb8cf0e..1e1984c24 100644 --- a/src/Custom/Responses/ResponseError.cs +++ b/src/Custom/Responses/ResponseError.cs @@ -1,7 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Renamed. -[CodeGenType("ResponsesError")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseError")] public partial class ResponseError { } \ No newline at end of file diff --git a/src/Custom/Responses/ResponseErrorCode.cs b/src/Custom/Responses/ResponseErrorCode.cs new file mode 100644 index 000000000..f1c4c179c --- /dev/null +++ b/src/Custom/Responses/ResponseErrorCode.cs @@ -0,0 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseErrorCode")] +public readonly partial struct ResponseErrorCode +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseImageDetailLevel.cs b/src/Custom/Responses/ResponseImageDetailLevel.cs index 79dcfc12a..d64707397 100644 --- a/src/Custom/Responses/ResponseImageDetailLevel.cs +++ b/src/Custom/Responses/ResponseImageDetailLevel.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesInputContentImageDetail")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ItemContentInputImageDetail1")] public readonly partial struct ResponseImageDetailLevel { } diff --git a/src/Custom/Responses/ResponseIncompleteStatusDetails.cs b/src/Custom/Responses/ResponseIncompleteStatusDetails.cs index 53bd4573c..f2d1d5a24 100644 --- a/src/Custom/Responses/ResponseIncompleteStatusDetails.cs +++ b/src/Custom/Responses/ResponseIncompleteStatusDetails.cs @@ -1,7 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Renamed. -[CodeGenType("ResponsesResponseIncompleteDetails1")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseIncompleteDetails1")] public partial class ResponseIncompleteStatusDetails { } diff --git a/src/Custom/Responses/ResponseIncompleteStatusReason.cs b/src/Custom/Responses/ResponseIncompleteStatusReason.cs index 9c027ea1b..49981be55 100644 --- a/src/Custom/Responses/ResponseIncompleteStatusReason.cs +++ b/src/Custom/Responses/ResponseIncompleteStatusReason.cs @@ -1,6 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponsesResponseIncompleteDetailsReason")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseIncompleteDetailsReason")] public readonly partial struct ResponseIncompleteStatusReason { } \ No newline at end of file diff --git a/src/Custom/Responses/ResponseInputTokenUsageDetails.cs b/src/Custom/Responses/ResponseInputTokenUsageDetails.cs new file mode 100644 index 000000000..e79250380 --- /dev/null +++ b/src/Custom/Responses/ResponseInputTokenUsageDetails.cs @@ -0,0 +1,15 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseUsageInputTokensDetails")] +public partial class ResponseInputTokenUsageDetails +{ + // CUSTOM: Renamed. + [CodeGenMember("CachedTokens")] + public int CachedTokenCount { get; } +} \ No newline at end of file diff --git a/src/Custom/Responses/ResponseMessageAnnotation.cs b/src/Custom/Responses/ResponseMessageAnnotation.cs index 58c5ef55d..6584edba8 100644 --- a/src/Custom/Responses/ResponseMessageAnnotation.cs +++ b/src/Custom/Responses/ResponseMessageAnnotation.cs @@ -1,26 +1,27 @@ +using System; +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesOutputTextAnnotation")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("Annotation")] +[CodeGenVisibility(nameof(Kind), CodeGenVisibility.Public)] public partial class ResponseMessageAnnotation { - // CUSTOM: - // - Renamed. - // - Made public. - // - Removed setter. - [CodeGenMember("Type")] - public ResponseMessageAnnotationKind Kind { get; } - // CUSTOM: Exposed file citation properties. - public string FileCitationFileId => (this as InternalResponsesMessageAnnotationFileCitation)?.FileId; - public int? FileCitationIndex => (this as InternalResponsesMessageAnnotationFileCitation)?.Index; + public string FileCitationFileId => (this as InternalAnnotationFileCitation)?.FileId; + public int? FileCitationIndex => (this as InternalAnnotationFileCitation)?.Index; // CUSTOM: Exposed URL citation properties. - public string UriCitationUri => (this as InternalResponsesMessageAnnotationUrlCitation)?.Url; - public string UriCitationTitle => (this as InternalResponsesMessageAnnotationUrlCitation)?.Title; - public int? UriCitationStartIndex => (this as InternalResponsesMessageAnnotationUrlCitation)?.StartIndex; - public int? UriCitationEndIndex => (this as InternalResponsesMessageAnnotationUrlCitation)?.EndIndex; + public Uri UriCitationUri => (this as InternalAnnotationUrlCitation)?.Url; + public string UriCitationTitle => (this as InternalAnnotationUrlCitation)?.Title; + public int? UriCitationStartIndex => (this as InternalAnnotationUrlCitation)?.StartIndex; + public int? UriCitationEndIndex => (this as InternalAnnotationUrlCitation)?.EndIndex; // CUSTOM: Exposed file path properties. - public string FilePathFileId => (this as InternalResponsesMessageAnnotationFilePath)?.FileId; - public int? FilePathIndex => (this as InternalResponsesMessageAnnotationFilePath)?.Index; + public string FilePathFileId => (this as InternalAnnotationFilePath)?.FileId; + public int? FilePathIndex => (this as InternalAnnotationFilePath)?.Index; } diff --git a/src/Custom/Responses/ResponseMessageAnnotationKind.cs b/src/Custom/Responses/ResponseMessageAnnotationKind.cs index 4927e1e2c..1ccfc75ce 100644 --- a/src/Custom/Responses/ResponseMessageAnnotationKind.cs +++ b/src/Custom/Responses/ResponseMessageAnnotationKind.cs @@ -1,6 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponseOutputTextAnnotationType")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("AnnotationType")] public enum ResponseMessageAnnotationKind { FileCitation, @@ -8,5 +14,7 @@ public enum ResponseMessageAnnotationKind [CodeGenMember("UrlCitation")] UriCitation, - FilePath + FilePath, + + ContainerFileCitation } \ No newline at end of file diff --git a/src/Custom/Responses/ResponseOutputTokenUsageDetails.cs b/src/Custom/Responses/ResponseOutputTokenUsageDetails.cs index 0cff8dfc7..20e718462 100644 --- a/src/Custom/Responses/ResponseOutputTokenUsageDetails.cs +++ b/src/Custom/Responses/ResponseOutputTokenUsageDetails.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseUsageOutputTokensDetails")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseUsageOutputTokensDetails")] public partial class ResponseOutputTokenUsageDetails { // CUSTOM: Renamed. diff --git a/src/Custom/Responses/ResponseReasoningEffortLevel.cs b/src/Custom/Responses/ResponseReasoningEffortLevel.cs index 9f6d8c828..cdbe0f499 100644 --- a/src/Custom/Responses/ResponseReasoningEffortLevel.cs +++ b/src/Custom/Responses/ResponseReasoningEffortLevel.cs @@ -1,6 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponsesReasoningConfigurationEffort")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("DotNetResponseReasoningEffortLevel")] public readonly partial struct ResponseReasoningEffortLevel { } diff --git a/src/Custom/Responses/ResponseReasoningOptions.cs b/src/Custom/Responses/ResponseReasoningOptions.cs index d9fdc4d7b..aeff2e54a 100644 --- a/src/Custom/Responses/ResponseReasoningOptions.cs +++ b/src/Custom/Responses/ResponseReasoningOptions.cs @@ -1,6 +1,13 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesReasoningConfiguration")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("Reasoning")] +[CodeGenVisibility(nameof(ResponseReasoningOptions), CodeGenVisibility.Public)] public partial class ResponseReasoningOptions { // CUSTOM: Renamed. @@ -8,11 +15,6 @@ public partial class ResponseReasoningOptions public ResponseReasoningEffortLevel? ReasoningEffortLevel { get; set; } // CUSTOM: Renamed. - [CodeGenMember("GenerateSummary")] + [CodeGenMember("Summary")] public ResponseReasoningSummaryVerbosity? ReasoningSummaryVerbosity { get; set; } - - // CUSTOM: Make default constructor public. - public ResponseReasoningOptions() - { - } } \ No newline at end of file diff --git a/src/Custom/Responses/ResponseReasoningSummaryVerbosity.cs b/src/Custom/Responses/ResponseReasoningSummaryVerbosity.cs index e1a44703a..6886a3e90 100644 --- a/src/Custom/Responses/ResponseReasoningSummaryVerbosity.cs +++ b/src/Custom/Responses/ResponseReasoningSummaryVerbosity.cs @@ -1,6 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponsesReasoningConfigurationGenerateSummary")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ReasoningSummary")] public readonly partial struct ResponseReasoningSummaryVerbosity { } diff --git a/src/Custom/Responses/ResponseStatus.cs b/src/Custom/Responses/ResponseStatus.cs index da3906a59..56b22fa57 100644 --- a/src/Custom/Responses/ResponseStatus.cs +++ b/src/Custom/Responses/ResponseStatus.cs @@ -1,10 +1,18 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponsesResponseStatus")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseStatus")] public enum ResponseStatus { InProgress, Completed, + Cancelled, + Queued, Incomplete, Failed } diff --git a/src/Custom/Responses/ResponseTextFormat.cs b/src/Custom/Responses/ResponseTextFormat.cs index 9547140e6..2e05cb0ef 100644 --- a/src/Custom/Responses/ResponseTextFormat.cs +++ b/src/Custom/Responses/ResponseTextFormat.cs @@ -1,8 +1,13 @@ using System; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Responses; -[CodeGenType("ResponsesTextFormat")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseTextFormatConfiguration")] public partial class ResponseTextFormat { // CUSTOM: Renamed to "Kind" and converted to public enum from internal extensible type. @@ -26,9 +31,9 @@ public static ResponseTextFormat CreateJsonSchemaFormat(string jsonSchemaFormatN return new InternalResponsesTextFormatJsonSchema( InternalResponsesTextFormatType.JsonSchema, additionalBinaryDataProperties: null, - jsonSchemaFormatName, - jsonSchema, - jsonSchemaFormatDescription, - jsonSchemaIsStrict); + description: jsonSchemaFormatDescription, + name: jsonSchemaFormatName, + strict: jsonSchemaIsStrict, + schema: jsonSchema); } } \ No newline at end of file diff --git a/src/Custom/Responses/ResponseTextFormatKind.cs b/src/Custom/Responses/ResponseTextFormatKind.cs index ea06eabf1..93bfba068 100644 --- a/src/Custom/Responses/ResponseTextFormatKind.cs +++ b/src/Custom/Responses/ResponseTextFormatKind.cs @@ -1,6 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -// CUSTOM: Plain enum type, with Unknown, to convert from an underlying extensible enum +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +// - Plain enum type, with Unknown, to convert from an underlying extensible enum +[Experimental("OPENAI001")] public enum ResponseTextFormatKind { Unknown = 0, diff --git a/src/Custom/Responses/ResponseTextOptions.cs b/src/Custom/Responses/ResponseTextOptions.cs index 540005116..fe2163e9a 100644 --- a/src/Custom/Responses/ResponseTextOptions.cs +++ b/src/Custom/Responses/ResponseTextOptions.cs @@ -1,6 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponseTextOptions")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("CreateResponseText")] public partial class ResponseTextOptions { // CUSTOM: Renamed. diff --git a/src/Custom/Responses/ResponseTokenUsage.cs b/src/Custom/Responses/ResponseTokenUsage.cs index e66de7771..b6054618d 100644 --- a/src/Custom/Responses/ResponseTokenUsage.cs +++ b/src/Custom/Responses/ResponseTokenUsage.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseUsage")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseUsage")] public partial class ResponseTokenUsage { // CUSTOM: Renamed. @@ -15,6 +21,10 @@ public partial class ResponseTokenUsage [CodeGenMember("TotalTokens")] public int TotalTokenCount { get; } + // CUSTOM: Renamed. + [CodeGenMember("InputTokensDetails")] + public ResponseInputTokenUsageDetails InputTokenDetails { get; } + // CUSTOM: Renamed. [CodeGenMember("OutputTokensDetails")] public ResponseOutputTokenUsageDetails OutputTokenDetails { get; } diff --git a/src/Custom/Responses/ResponseTruncationMode.cs b/src/Custom/Responses/ResponseTruncationMode.cs index 69d06fd6e..1f6a68119 100644 --- a/src/Custom/Responses/ResponseTruncationMode.cs +++ b/src/Custom/Responses/ResponseTruncationMode.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponseTruncation")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("CreateResponseTruncation")] public readonly partial struct ResponseTruncationMode { } \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseCompletedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseCompletedUpdate.cs index 99c1f4b22..a4d2f1ffd 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseCompletedUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseCompletedUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseCompleted")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseCompletedEvent")] public partial class StreamingResponseCompletedUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseContentPartAddedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseContentPartAddedUpdate.cs index 014f5931e..f0297db02 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseContentPartAddedUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseContentPartAddedUpdate.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseContentPartAdded")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseContentPartAddedEvent")] public partial class StreamingResponseContentPartAddedUpdate { // CUSTOM: Apply generalized content type. diff --git a/src/Custom/Responses/Streaming/StreamingResponseContentPartDoneUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseContentPartDoneUpdate.cs index be2fbd8fe..cec1c0803 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseContentPartDoneUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseContentPartDoneUpdate.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseContentPartDone")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseContentPartDoneEvent")] public partial class StreamingResponseContentPartDoneUpdate { // CUSTOM: Apply generalized content type. diff --git a/src/Custom/Responses/Streaming/StreamingResponseCreatedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseCreatedUpdate.cs index 712eb8971..5e2c18cb8 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseCreatedUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseCreatedUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseCreated")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseCreatedEvent")] public partial class StreamingResponseCreatedUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseErrorUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseErrorUpdate.cs index b58d462d9..e7852a165 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseErrorUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseErrorUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventError")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseErrorEvent")] public partial class StreamingResponseErrorUpdate -{ } \ No newline at end of file +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseFailedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseFailedUpdate.cs index 123c5d289..d2767cd33 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseFailedUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseFailedUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseFailed")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseFailedEvent")] public partial class StreamingResponseFailedUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallCompletedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallCompletedUpdate.cs index fb42940d6..16bd7dfc4 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallCompletedUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallCompletedUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseFileSearchCallCompleted")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseFileSearchCallCompletedEvent")] public partial class StreamingResponseFileSearchCallCompletedUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallInProgressUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallInProgressUpdate.cs index ee2e4a7e3..9b0e222a7 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallInProgressUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallInProgressUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseFileSearchCallInProgress")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseFileSearchCallInProgressEvent")] public partial class StreamingResponseFileSearchCallInProgressUpdate -{ } \ No newline at end of file +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallSearchingUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallSearchingUpdate.cs index e5f5bd5c3..dd444b26f 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallSearchingUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseFileSearchCallSearchingUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseFileSearchCallSearching")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseFileSearchCallSearchingEvent")] public partial class StreamingResponseFileSearchCallSearchingUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseFunctionCallArgumentsDeltaUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseFunctionCallArgumentsDeltaUpdate.cs index f04e67b40..7f9c33025 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseFunctionCallArgumentsDeltaUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseFunctionCallArgumentsDeltaUpdate.cs @@ -1,6 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseFunctionCallArgumentsDelta")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseFunctionCallArgumentsDeltaEvent")] public partial class StreamingResponseFunctionCallArgumentsDeltaUpdate : StreamingResponseUpdate { diff --git a/src/Custom/Responses/Streaming/StreamingResponseFunctionCallArgumentsDoneUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseFunctionCallArgumentsDoneUpdate.cs index b37337a27..e545a9c91 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseFunctionCallArgumentsDoneUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseFunctionCallArgumentsDoneUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseFunctionCallArgumentsDone")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseFunctionCallArgumentsDoneEvent")] public partial class StreamingResponseFunctionCallArgumentsDoneUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseInProgressUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseInProgressUpdate.cs index 51c64bd3b..18ccfc047 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseInProgressUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseInProgressUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseInProgress")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseInProgressEvent")] public partial class StreamingResponseInProgressUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseIncompleteUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseIncompleteUpdate.cs index db45641f1..324832f13 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseIncompleteUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseIncompleteUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseIncomplete")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseIncompleteEvent")] public partial class StreamingResponseIncompleteUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseOutputItemAddedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseOutputItemAddedUpdate.cs index 2ef241389..2ab7a5038 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseOutputItemAddedUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseOutputItemAddedUpdate.cs @@ -1,5 +1,13 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseOutputItemAdded")] + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseOutputItemAddedEvent")] public partial class StreamingResponseOutputItemAddedUpdate : StreamingResponseUpdate -{ } \ No newline at end of file +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseOutputItemDoneUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseOutputItemDoneUpdate.cs index dbba411b2..a1ba93c85 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseOutputItemDoneUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseOutputItemDoneUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseOutputItemDone")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseOutputItemDoneEvent")] public partial class StreamingResponseOutputItemDoneUpdate : StreamingResponseUpdate -{ } \ No newline at end of file +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseOutputTextDeltaUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseOutputTextDeltaUpdate.cs index c2b2fe268..c3e2026ad 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseOutputTextDeltaUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseOutputTextDeltaUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseOutputTextDelta")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseTextDeltaEvent")] public partial class StreamingResponseOutputTextDeltaUpdate : StreamingResponseUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseOutputTextDoneUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseOutputTextDoneUpdate.cs index f47396d04..5a819344b 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseOutputTextDoneUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseOutputTextDoneUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseOutputTextDone")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseTextDoneEvent")] public partial class StreamingResponseOutputTextDoneUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseQueuedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseQueuedUpdate.cs new file mode 100644 index 000000000..c3b335c0d --- /dev/null +++ b/src/Custom/Responses/Streaming/StreamingResponseQueuedUpdate.cs @@ -0,0 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseQueuedEvent")] +public partial class StreamingResponseQueuedUpdate +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseRefusalDeltaUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseRefusalDeltaUpdate.cs index 535d4544a..946c6afb3 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseRefusalDeltaUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseRefusalDeltaUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseRefusalDelta")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseRefusalDeltaEvent")] public partial class StreamingResponseRefusalDeltaUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseRefusalDoneUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseRefusalDoneUpdate.cs index cea674497..2918e93d5 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseRefusalDoneUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseRefusalDoneUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseRefusalDone")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseRefusalDoneEvent")] public partial class StreamingResponseRefusalDoneUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseTextAnnotationAddedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseTextAnnotationAddedUpdate.cs index ee8cedc29..662090315 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseTextAnnotationAddedUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseTextAnnotationAddedUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseOutputTextAnnotationAdded")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseTextAnnotationDeltaEvent")] public partial class StreamingResponseTextAnnotationAddedUpdate -{ } \ No newline at end of file +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseUpdate.cs index 123e26dee..56551310f 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEvent")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseStreamEvent")] public partial class StreamingResponseUpdate -{ } \ No newline at end of file +{ +} \ No newline at end of file diff --git a/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallCompletedUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallCompletedUpdate.cs index 26ef16140..7f495be91 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallCompletedUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallCompletedUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseWebSearchCallCompleted")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseWebSearchCallCompletedEvent")] public partial class StreamingResponseWebSearchCallCompletedUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallInProgressUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallInProgressUpdate.cs index e2264424b..39a84dd49 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallInProgressUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallInProgressUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseWebSearchCallInProgress")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseWebSearchCallInProgressEvent")] public partial class StreamingResponseWebSearchCallInProgressUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallSearchingUpdate.cs b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallSearchingUpdate.cs index 1790f67eb..5d2732ce0 100644 --- a/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallSearchingUpdate.cs +++ b/src/Custom/Responses/Streaming/StreamingResponseWebSearchCallSearchingUpdate.cs @@ -1,5 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; -[CodeGenType("ResponsesResponseStreamEventResponseWebSearchCallSearching")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("ResponseWebSearchCallSearchingEvent")] public partial class StreamingResponseWebSearchCallSearchingUpdate -{ } +{ +} diff --git a/src/Custom/Responses/Tools/ComputerToolEnvironment.cs b/src/Custom/Responses/Tools/ComputerToolEnvironment.cs index 4724a8e5f..51152a193 100644 --- a/src/Custom/Responses/Tools/ComputerToolEnvironment.cs +++ b/src/Custom/Responses/Tools/ComputerToolEnvironment.cs @@ -2,8 +2,11 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesComputerToolEnvironment")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. [Experimental("OPENAICUA001")] +[CodeGenType("ComputerUsePreviewToolEnvironment")] public readonly partial struct ComputerToolEnvironment { } diff --git a/src/Custom/Responses/Tools/FileSearchToolRanker.cs b/src/Custom/Responses/Tools/FileSearchToolRanker.cs index 94da685ce..accc182bb 100644 --- a/src/Custom/Responses/Tools/FileSearchToolRanker.cs +++ b/src/Custom/Responses/Tools/FileSearchToolRanker.cs @@ -1,6 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponsesFileSearchToolRankingOptionsRanker")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("RankingOptionsRanker")] public readonly partial struct FileSearchToolRanker { } diff --git a/src/Custom/Responses/Tools/FileSearchToolRankingOptions.cs b/src/Custom/Responses/Tools/FileSearchToolRankingOptions.cs index 5929d8de7..c76d31d5a 100644 --- a/src/Custom/Responses/Tools/FileSearchToolRankingOptions.cs +++ b/src/Custom/Responses/Tools/FileSearchToolRankingOptions.cs @@ -1,6 +1,12 @@ -namespace OpenAI.Responses; +using System.Diagnostics.CodeAnalysis; -[CodeGenType("ResponsesFileSearchToolRankingOptions")] +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("RankingOptions")] public partial class FileSearchToolRankingOptions { } diff --git a/src/Custom/Responses/Tools/Internal/InternalFunctionTool.cs b/src/Custom/Responses/Tools/Internal/InternalFunctionTool.cs new file mode 100644 index 000000000..5a1e46cf9 --- /dev/null +++ b/src/Custom/Responses/Tools/Internal/InternalFunctionTool.cs @@ -0,0 +1,11 @@ +using System; + +namespace OpenAI.Responses; + +[CodeGenType("FunctionTool")] +internal partial class InternalFunctionTool +{ + // CUSTOM: Use plain BinaryData. + [CodeGenMember("Parameters")] + internal BinaryData Parameters { get; set; } +} diff --git a/src/Custom/Responses/Tools/Internal/InternalResponsesToolChoiceObject.cs b/src/Custom/Responses/Tools/Internal/InternalResponsesToolChoiceObject.cs deleted file mode 100644 index 5c70b7b66..000000000 --- a/src/Custom/Responses/Tools/Internal/InternalResponsesToolChoiceObject.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesToolChoiceObject")] -internal partial class InternalResponsesToolChoiceObject -{ - public ResponseToolChoiceKind Kind => this switch - { - InternalResponsesToolChoiceObjectComputer => ResponseToolChoiceKind.Computer, - InternalResponsesToolChoiceObjectFileSearch => ResponseToolChoiceKind.FileSearch, - InternalResponsesToolChoiceObjectFunction => ResponseToolChoiceKind.Function, - InternalResponsesToolChoiceObjectWebSearch => ResponseToolChoiceKind.WebSearch, - _ => ResponseToolChoiceKind.Unknown, - }; -} - diff --git a/src/Custom/Responses/Tools/Internal/InternalResponsesToolChoiceOption.cs b/src/Custom/Responses/Tools/Internal/InternalResponsesToolChoiceOption.cs deleted file mode 100644 index 9dc6f7beb..000000000 --- a/src/Custom/Responses/Tools/Internal/InternalResponsesToolChoiceOption.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesToolChoiceOption")] -internal readonly partial struct InternalResponsesToolChoiceOption -{ - public ResponseToolChoiceKind Kind => _value switch - { - AutoValue => ResponseToolChoiceKind.Auto, - NoneValue => ResponseToolChoiceKind.None, - RequiredValue => ResponseToolChoiceKind.Required, - _ => ResponseToolChoiceKind.Unknown, - }; -} diff --git a/src/Custom/Responses/Tools/Internal/InternalToolChoiceObjectType.Serialization.cs b/src/Custom/Responses/Tools/Internal/InternalToolChoiceObjectType.Serialization.cs new file mode 100644 index 000000000..6cbea4385 --- /dev/null +++ b/src/Custom/Responses/Tools/Internal/InternalToolChoiceObjectType.Serialization.cs @@ -0,0 +1,16 @@ +namespace OpenAI.Responses; + +internal static partial class InternalToolChoiceObjectTypeExtensions +{ + internal static ResponseToolChoiceKind ToResponseToolChoiceKind(this InternalToolChoiceObjectType objectType) + { + return objectType.ToString() switch + { + "file_search" => ResponseToolChoiceKind.FileSearch, + "function" => ResponseToolChoiceKind.Function, + "computer" => ResponseToolChoiceKind.Computer, + "web_search" => ResponseToolChoiceKind.WebSearch, + _ => ResponseToolChoiceKind.Unknown, + }; + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Tools/Internal/InternalToolChoiceOptions.Serialization.cs b/src/Custom/Responses/Tools/Internal/InternalToolChoiceOptions.Serialization.cs new file mode 100644 index 000000000..190a1b07a --- /dev/null +++ b/src/Custom/Responses/Tools/Internal/InternalToolChoiceOptions.Serialization.cs @@ -0,0 +1,15 @@ +namespace OpenAI.Responses; + +internal static partial class InternalToolChoiceOptionsExtensions +{ + internal static ResponseToolChoiceKind ToResponseToolChoiceKind(this InternalToolChoiceOptions options) + { + return options.ToString() switch + { + "none" => ResponseToolChoiceKind.None, + "auto" => ResponseToolChoiceKind.Auto, + "required" => ResponseToolChoiceKind.Required, + _ => ResponseToolChoiceKind.Unknown, + }; + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Tools/Internal/InternalUnknownResponsesTool.cs b/src/Custom/Responses/Tools/Internal/InternalUnknownResponsesTool.cs deleted file mode 100644 index 477b0c90b..000000000 --- a/src/Custom/Responses/Tools/Internal/InternalUnknownResponsesTool.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("UnknownResponsesTool")] -internal partial class InternalUnknownResponsesTool -{ -} diff --git a/src/Custom/Responses/Tools/Internal/InternalWebSearchTool.cs b/src/Custom/Responses/Tools/Internal/InternalWebSearchTool.cs new file mode 100644 index 000000000..176a8890e --- /dev/null +++ b/src/Custom/Responses/Tools/Internal/InternalWebSearchTool.cs @@ -0,0 +1,13 @@ +namespace OpenAI.Responses; + +[CodeGenType("WebSearchPreviewTool")] +internal partial class InternalWebSearchTool +{ + // CUSTOM: Use scenario-specific type copy + [CodeGenMember("UserLocation")] + internal WebSearchUserLocation UserLocation { get; set; } + + // CUSTOM: Apply use of a scenario-specific type copy. + [CodeGenMember("SearchContextSize")] + internal WebSearchContextSize? SearchContextSize { get; set; } +} \ No newline at end of file diff --git a/src/Custom/Responses/Tools/ResponseTool.cs b/src/Custom/Responses/Tools/ResponseTool.cs index a1d065830..5fe370250 100644 --- a/src/Custom/Responses/Tools/ResponseTool.cs +++ b/src/Custom/Responses/Tools/ResponseTool.cs @@ -5,74 +5,43 @@ namespace OpenAI.Responses; -[CodeGenType("ResponsesTool")] +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("Tool")] public partial class ResponseTool { - // CUSTOM: Made internal. - [CodeGenMember("Type")] - internal InternalResponsesToolType Type { get; } - - //// CUSTOM: Exposed function tool properties. - //public string FunctionName => (this as InternalResponsesFunctionTool)?.Name; - //public string FunctionDescription => (this as InternalResponsesFunctionTool)?.Description; - //public BinaryData FunctionParameters => (this as InternalResponsesFunctionTool)?.Parameters; - //public bool? FunctionSchemaIsStrict => (this as InternalResponsesFunctionTool)?.Strict; - - //// CUSTOM: Exposed computer tool properties. - //public int? ComputerDisplayWidth => (this as InternalResponsesComputerTool)?.DisplayWidth; - //public int? ComputerDisplayHeight => (this as InternalResponsesComputerTool)?.DisplayHeight; - //public ComputerToolEnvironment? ComputerEnvironment => (this as InternalResponsesComputerTool)?.Environment; - - //// CUSTOM: Exposed file search tool properties. - //public IList FileSearchVectorStoreIds => (this as InternalResponsesFileSearchTool)?.VectorStoreIds; - //public int? FileSearchMaxResultCount => (this as InternalResponsesFileSearchTool)?.MaxNumResults; - - //// CUSTOM: Exposed web search tool properties. - //public IList WebSearchDomains => (this as InternalResponsesWebSearchTool)?.Domains; - //public WebSearchToolUserLocation WebSearchUserLocation => (this as InternalResponsesWebSearchTool)?.UserLocation; - - //// CUSTOM: Exposed code interpreter tool properties. - //// TODO - public static ResponseTool CreateFunctionTool(string functionName, string functionDescription, BinaryData functionParameters, bool functionSchemaIsStrict = false) { - return new InternalResponsesFunctionTool( - type: InternalResponsesToolType.Function, - additionalBinaryDataProperties: null, - functionName, - functionDescription, - functionParameters, - functionSchemaIsStrict); + return new InternalFunctionTool(functionName, functionSchemaIsStrict, functionParameters) + { + Description = functionDescription + }; } [Experimental("OPENAICUA001")] - public static ResponseTool CreateComputerTool(int displayWidth,int displayHeight, ComputerToolEnvironment environment) + public static ResponseTool CreateComputerTool(ComputerToolEnvironment environment, int displayWidth,int displayHeight) { - return new InternalResponsesComputerTool( - type: InternalResponsesToolType.Computer, - additionalBinaryDataProperties: null, - displayWidth, - displayHeight, - environment); + return new InternalComputerUsePreviewTool(environment, displayWidth, displayHeight); } public static ResponseTool CreateFileSearchTool(IEnumerable vectorStoreIds, int? maxResultCount = null, FileSearchToolRankingOptions rankingOptions = null, BinaryData filters = null) { - return new InternalResponsesFileSearchTool( - type: InternalResponsesToolType.FileSearch, - additionalBinaryDataProperties: null, - vectorStoreIds.ToList(), - maxResultCount, - rankingOptions, - filters); + return new InternalFileSearchTool(vectorStoreIds) + { + MaxNumResults = maxResultCount, + RankingOptions = rankingOptions, + Filters = filters, + }; } - public static ResponseTool CreateWebSearchTool(WebSearchToolLocation webSearchToolUserLocation = null, WebSearchToolContextSize? webSearchToolContextSize = null) + public static ResponseTool CreateWebSearchTool(WebSearchUserLocation userLocation = null, WebSearchContextSize? searchContextSize = null) { - return new InternalResponsesWebSearchTool( - type: InternalResponsesToolType.WebSearch, - additionalBinaryDataProperties: null, - webSearchToolUserLocation, - webSearchToolContextSize); + return new InternalWebSearchTool() + { + UserLocation = userLocation, + SearchContextSize = searchContextSize, + }; } } diff --git a/src/Custom/Responses/Tools/ResponseToolChoice.Serialization.cs b/src/Custom/Responses/Tools/ResponseToolChoice.Serialization.cs index a233ae4ef..271c8dfed 100644 --- a/src/Custom/Responses/Tools/ResponseToolChoice.Serialization.cs +++ b/src/Custom/Responses/Tools/ResponseToolChoice.Serialization.cs @@ -1,4 +1,3 @@ - using System; using System.ClientModel.Primitives; using System.Text.Json; @@ -43,13 +42,13 @@ internal static ResponseToolChoice DeserializeResponseToolChoice( if (element.ValueKind == JsonValueKind.String) { return new ResponseToolChoice( - new InternalResponsesToolChoiceOption(element.GetString())); + new InternalToolChoiceOptions(element.GetString())); } else if (element.ValueKind == JsonValueKind.Object) { return new ResponseToolChoice( - InternalResponsesToolChoiceObject - .DeserializeInternalResponsesToolChoiceObject( + InternalToolChoiceObject + .DeserializeInternalToolChoiceObject( element, options)); } diff --git a/src/Custom/Responses/Tools/ResponseToolChoice.cs b/src/Custom/Responses/Tools/ResponseToolChoice.cs index f4263264e..8a8d24617 100644 --- a/src/Custom/Responses/Tools/ResponseToolChoice.cs +++ b/src/Custom/Responses/Tools/ResponseToolChoice.cs @@ -1,53 +1,52 @@ - -using OpenAI.Assistants; -using System; -using System.Collections.Generic; -using System.ComponentModel; using System.Diagnostics.CodeAnalysis; namespace OpenAI.Responses; +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] public partial class ResponseToolChoice { public ResponseToolChoiceKind Kind - => _toolChoiceObject?.Kind - ?? _toolChoiceOption?.Kind + => _toolChoiceOption?.ToResponseToolChoiceKind() + ?? _toolChoiceObject?.Kind.ToResponseToolChoiceKind() ?? ResponseToolChoiceKind.Unknown; public string FunctionName - => (_toolChoiceObject as InternalResponsesToolChoiceObjectFunction)?.Name; + => (_toolChoiceObject as InternalToolChoiceObjectFunction)?.Name; - private readonly InternalResponsesToolChoiceObject _toolChoiceObject; - private readonly InternalResponsesToolChoiceOption? _toolChoiceOption; + private readonly InternalToolChoiceObject _toolChoiceObject; + private readonly InternalToolChoiceOptions? _toolChoiceOption; public static ResponseToolChoice CreateFunctionChoice(string functionName) - => new(new InternalResponsesToolChoiceObjectFunction(functionName)); + => new(new InternalToolChoiceObjectFunction(functionName)); public static ResponseToolChoice CreateFileSearchChoice() - => new(new InternalResponsesToolChoiceObjectFileSearch()); + => new(new InternalToolChoiceObjectFileSearch()); public static ResponseToolChoice CreateWebSearchChoice() - => new(new InternalResponsesToolChoiceObjectWebSearch()); + => new(new InternalToolChoiceObjectWebSearch()); [Experimental("OPENAICUA001")] public static ResponseToolChoice CreateComputerChoice() - => new(new InternalResponsesToolChoiceObjectComputer()); + => new(new InternalToolChoiceObjectComputer()); public static ResponseToolChoice CreateAutoChoice() - => new(InternalResponsesToolChoiceOption.Auto); + => new(InternalToolChoiceOptions.Auto); public static ResponseToolChoice CreateNoneChoice() - => new(InternalResponsesToolChoiceOption.None); + => new(InternalToolChoiceOptions.None); public static ResponseToolChoice CreateRequiredChoice() - => new(InternalResponsesToolChoiceOption.Required); + => new(InternalToolChoiceOptions.Required); - internal ResponseToolChoice(InternalResponsesToolChoiceObject toolChoiceObject) + internal ResponseToolChoice(InternalToolChoiceObject toolChoiceObject) { _toolChoiceObject = toolChoiceObject; } - internal ResponseToolChoice(InternalResponsesToolChoiceOption toolChoiceOption) + internal ResponseToolChoice(InternalToolChoiceOptions toolChoiceOption) { _toolChoiceOption = toolChoiceOption; } diff --git a/src/Custom/Responses/Tools/ResponseToolChoiceKind.Serialization.cs b/src/Custom/Responses/Tools/ResponseToolChoiceKind.Serialization.cs new file mode 100644 index 000000000..1fbbef9e9 --- /dev/null +++ b/src/Custom/Responses/Tools/ResponseToolChoiceKind.Serialization.cs @@ -0,0 +1,52 @@ +using System; + +namespace OpenAI.Responses; + +internal static partial class ResponseToolChoiceKindExtensions +{ + public static string ToSerialString(this ResponseToolChoiceKind value) => value switch + { + ResponseToolChoiceKind.Unknown => "unknown", + ResponseToolChoiceKind.None => "none", + ResponseToolChoiceKind.Auto => "auto", + ResponseToolChoiceKind.Required => "required", + ResponseToolChoiceKind.FileSearch => "file_search", + ResponseToolChoiceKind.Function => "function", + ResponseToolChoiceKind.Computer => "computer_use_preview", + ResponseToolChoiceKind.WebSearch => "web_search_preview", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseToolChoiceKind value.") + }; + + public static ResponseToolChoiceKind ToResponseToolChoiceKind(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "none")) + { + return ResponseToolChoiceKind.None; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "auto")) + { + return ResponseToolChoiceKind.Auto; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "required")) + { + return ResponseToolChoiceKind.Required; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "file_search")) + { + return ResponseToolChoiceKind.FileSearch; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "function")) + { + return ResponseToolChoiceKind.Function; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "computer_use_preview")) + { + return ResponseToolChoiceKind.Computer; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "web_search_preview")) + { + return ResponseToolChoiceKind.WebSearch; + } + return ResponseToolChoiceKind.Unknown; + } +} \ No newline at end of file diff --git a/src/Custom/Responses/Tools/ResponseToolChoiceKind.cs b/src/Custom/Responses/Tools/ResponseToolChoiceKind.cs index 9ee173be9..b8396e73c 100644 --- a/src/Custom/Responses/Tools/ResponseToolChoiceKind.cs +++ b/src/Custom/Responses/Tools/ResponseToolChoiceKind.cs @@ -1,5 +1,11 @@ +using System.Diagnostics.CodeAnalysis; + namespace OpenAI.Responses; +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] public enum ResponseToolChoiceKind { Unknown = 0, diff --git a/src/Custom/Responses/Tools/WebSearchContextSize.cs b/src/Custom/Responses/Tools/WebSearchContextSize.cs new file mode 100644 index 000000000..3fb078090 --- /dev/null +++ b/src/Custom/Responses/Tools/WebSearchContextSize.cs @@ -0,0 +1,12 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("DotNetResponseWebSearchContextSize")] +public readonly partial struct WebSearchContextSize +{ +} diff --git a/src/Custom/Responses/Tools/WebSearchToolContextSize.cs b/src/Custom/Responses/Tools/WebSearchToolContextSize.cs deleted file mode 100644 index eed8c5f8e..000000000 --- a/src/Custom/Responses/Tools/WebSearchToolContextSize.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesWebSearchContextSize")] -public readonly partial struct WebSearchToolContextSize -{ -} diff --git a/src/Custom/Responses/Tools/WebSearchToolLocation.cs b/src/Custom/Responses/Tools/WebSearchToolLocation.cs deleted file mode 100644 index ae4849a9a..000000000 --- a/src/Custom/Responses/Tools/WebSearchToolLocation.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace OpenAI.Responses; - -[CodeGenType("ResponsesWebSearchLocation")] -public partial class WebSearchToolLocation -{ - public static WebSearchToolLocation CreateApproximateLocation(string country = null, string region = null, string city = null, string timezone = null) - { - return new InternalResponsesWebSearchApproximateLocation( - type: "approximate", - additionalBinaryDataProperties: null, - country, - region, - city, - timezone); - } -} \ No newline at end of file diff --git a/src/Custom/Responses/Tools/WebSearchUserLocation.cs b/src/Custom/Responses/Tools/WebSearchUserLocation.cs new file mode 100644 index 000000000..a151e9736 --- /dev/null +++ b/src/Custom/Responses/Tools/WebSearchUserLocation.cs @@ -0,0 +1,22 @@ +using System.Diagnostics.CodeAnalysis; + +namespace OpenAI.Responses; + +// CUSTOM: +// - Added Experimental attribute. +// - Renamed. +[Experimental("OPENAI001")] +[CodeGenType("DotnetResponseWebSearchLocation")] +public partial class WebSearchUserLocation +{ + public static WebSearchUserLocation CreateApproximateLocation(string country = null, string region = null, string city = null, string timezone = null) + { + return new InternalDotnetResponseWebSearchApproximateLocation( + InternalWebSearchUserLocationKind.Approximate, + additionalBinaryDataProperties: null, + country, + region, + city, + timezone); + } +} \ No newline at end of file diff --git a/src/Custom/VectorStores/AddFileToVectorStoreOperation.cs b/src/Custom/VectorStores/AddFileToVectorStoreOperation.cs index 99b9325c7..81521f77f 100644 --- a/src/Custom/VectorStores/AddFileToVectorStoreOperation.cs +++ b/src/Custom/VectorStores/AddFileToVectorStoreOperation.cs @@ -71,7 +71,7 @@ public static async Task RehydrateAsync(VectorSto ClientResult result = await client.GetFileAssociationAsync(token.VectorStoreId, token.FileId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStoreFileAssociation value = (VectorStoreFileAssociation)result; + VectorStoreFileAssociation value = VectorStoreFileAssociation.FromClientResult(result); return client.CreateAddFileToVectorStoreOperation(ClientResult.FromValue(value, response)); } @@ -96,7 +96,7 @@ public static AddFileToVectorStoreOperation Rehydrate(VectorStoreClient client, ClientResult result = client.GetFileAssociation(token.VectorStoreId, token.FileId, cancellationToken.ToRequestOptions()); PipelineResponse response = result.GetRawResponse(); - VectorStoreFileAssociation value = (VectorStoreFileAssociation)result; + VectorStoreFileAssociation value = VectorStoreFileAssociation.FromClientResult(result); return client.CreateAddFileToVectorStoreOperation(ClientResult.FromValue(value, response)); } @@ -107,7 +107,7 @@ public override async ValueTask UpdateStatusAsync(RequestOptions? ClientResult result = await GetFileAssociationAsync(options).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStoreFileAssociation value = (VectorStoreFileAssociation)result; + VectorStoreFileAssociation value = VectorStoreFileAssociation.FromClientResult(result); ApplyUpdate(response, value); @@ -120,7 +120,7 @@ public override ClientResult UpdateStatus(RequestOptions? options = null) ClientResult result = GetFileAssociation(options); PipelineResponse response = result.GetRawResponse(); - VectorStoreFileAssociation value = (VectorStoreFileAssociation)result; + VectorStoreFileAssociation value = VectorStoreFileAssociation.FromClientResult(result); ApplyUpdate(response, value); @@ -167,7 +167,7 @@ public virtual async Task> GetFileAssoc { ClientResult result = await GetFileAssociationAsync(cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStoreFileAssociation value = (VectorStoreFileAssociation)result; + VectorStoreFileAssociation value = VectorStoreFileAssociation.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -181,7 +181,7 @@ public virtual ClientResult GetFileAssociation(Cance { ClientResult result = GetFileAssociation(cancellationToken.ToRequestOptions()); PipelineResponse response = result.GetRawResponse(); - VectorStoreFileAssociation value = (VectorStoreFileAssociation)result; + VectorStoreFileAssociation value = VectorStoreFileAssociation.FromClientResult(result); return ClientResult.FromValue(value, response); } } diff --git a/src/Custom/VectorStores/CreateBatchFileJobOperation.cs b/src/Custom/VectorStores/CreateBatchFileJobOperation.cs index 7b299f28e..9f30a5fa9 100644 --- a/src/Custom/VectorStores/CreateBatchFileJobOperation.cs +++ b/src/Custom/VectorStores/CreateBatchFileJobOperation.cs @@ -74,7 +74,7 @@ public static async Task RehydrateAsync(VectorStore ClientResult result = await client.GetBatchFileJobAsync(token.VectorStoreId, token.BatchId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStoreBatchFileJob job = (VectorStoreBatchFileJob) result; + VectorStoreBatchFileJob job = VectorStoreBatchFileJob.FromClientResult(result); return client.CreateBatchFileJobOperation(ClientResult.FromValue(job, response)); } @@ -99,7 +99,7 @@ public static CreateBatchFileJobOperation Rehydrate(VectorStoreClient client, Co ClientResult result = client.GetBatchFileJob(token.VectorStoreId, token.BatchId, cancellationToken.ToRequestOptions()); PipelineResponse response = result.GetRawResponse(); - VectorStoreBatchFileJob job = (VectorStoreBatchFileJob) result; + VectorStoreBatchFileJob job = VectorStoreBatchFileJob.FromClientResult(result); return client.CreateBatchFileJobOperation(ClientResult.FromValue(job, response)); } @@ -110,7 +110,7 @@ public override async ValueTask UpdateStatusAsync(RequestOptions? ClientResult result = await GetFileBatchAsync(options).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob) result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); ApplyUpdate(response, value); @@ -123,7 +123,7 @@ public override ClientResult UpdateStatus(RequestOptions? options = null) ClientResult result = GetFileBatch(options); PipelineResponse response = result.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob) result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); ApplyUpdate(response, value); @@ -171,7 +171,7 @@ public virtual async Task> GetFileBatchAsy { ClientResult result = await GetFileBatchAsync(cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob) result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -184,7 +184,7 @@ public virtual ClientResult GetFileBatch(CancellationTo { ClientResult result = GetFileBatch(cancellationToken.ToRequestOptions()); PipelineResponse response = result.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob) result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -197,7 +197,7 @@ public virtual async Task> CancelAsync(Can { ClientResult result = await CancelAsync(cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob) result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -210,7 +210,7 @@ public virtual ClientResult Cancel(CancellationToken ca { ClientResult result = Cancel(cancellationToken.ToRequestOptions()); PipelineResponse response = result.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob) result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); return ClientResult.FromValue(value, response); } } \ No newline at end of file diff --git a/src/Custom/VectorStores/CreateVectorStoreOperation.cs b/src/Custom/VectorStores/CreateVectorStoreOperation.cs index 00d71b037..ae88e383c 100644 --- a/src/Custom/VectorStores/CreateVectorStoreOperation.cs +++ b/src/Custom/VectorStores/CreateVectorStoreOperation.cs @@ -66,7 +66,7 @@ public static async Task RehydrateAsync(VectorStoreC ClientResult result = await client.GetVectorStoreAsync(token.VectorStoreId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStore vectorStore = (VectorStore)result; + VectorStore vectorStore = VectorStore.FromClientResult(result); return client.CreateCreateVectorStoreOperation(ClientResult.FromValue(vectorStore, response)); } @@ -91,7 +91,7 @@ public static CreateVectorStoreOperation Rehydrate(VectorStoreClient client, Con ClientResult result = client.GetVectorStore(token.VectorStoreId, cancellationToken.ToRequestOptions()); PipelineResponse response = result.GetRawResponse(); - VectorStore vectorStore = (VectorStore)result; + VectorStore vectorStore = VectorStore.FromClientResult(result); return client.CreateCreateVectorStoreOperation(ClientResult.FromValue(vectorStore, response)); } @@ -102,7 +102,7 @@ public override async ValueTask UpdateStatusAsync(RequestOptions? ClientResult result = await GetVectorStoreAsync(options).ConfigureAwait(false); PipelineResponse response = result.GetRawResponse(); - VectorStore value = (VectorStore)result; + VectorStore value = VectorStore.FromClientResult(result); ApplyUpdate(response, value); @@ -115,7 +115,7 @@ public override ClientResult UpdateStatus(RequestOptions? options = null) ClientResult result = GetVectorStore(options); PipelineResponse response = result.GetRawResponse(); - VectorStore value = (VectorStore)result; + VectorStore value = VectorStore.FromClientResult(result); ApplyUpdate(response, value); @@ -161,7 +161,7 @@ public virtual async Task> GetVectorStoreAsync(Cancell ClientResult result = await GetVectorStoreAsync(cancellationToken.ToRequestOptions()).ConfigureAwait(false); return ClientResult.FromValue( - (VectorStore)result, result.GetRawResponse()); + VectorStore.FromClientResult(result), result.GetRawResponse()); } /// @@ -172,6 +172,6 @@ ClientResult result public virtual ClientResult GetVectorStore(CancellationToken cancellationToken = default) { ClientResult result = GetVectorStore(cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((VectorStore)result, result.GetRawResponse()); + return ClientResult.FromValue(VectorStore.FromClientResult(result), result.GetRawResponse()); } } diff --git a/src/Custom/VectorStores/FileChunkingStrategy.cs b/src/Custom/VectorStores/FileChunkingStrategy.cs index d81146fbb..ad750ce27 100644 --- a/src/Custom/VectorStores/FileChunkingStrategy.cs +++ b/src/Custom/VectorStores/FileChunkingStrategy.cs @@ -3,7 +3,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenType("FileChunkingStrategyResponseParam")] +[CodeGenType("DotNetCombinedChunkingStrategyParam")] public abstract partial class FileChunkingStrategy { /// @@ -22,7 +22,7 @@ public abstract partial class FileChunkingStrategy /// This value is present on responses when no chunking strategy could be found. This is typically only true for /// vector stores created earlier than file chunking strategy availability. /// - public static FileChunkingStrategy Unknown => _unknownValue ??= new(); + public static FileChunkingStrategy Unknown => _otherValue ??= new(); /// public static FileChunkingStrategy CreateStaticStrategy( @@ -34,6 +34,6 @@ public static FileChunkingStrategy CreateStaticStrategy( overlappingTokenCount); } - private static InternalAutoChunkingStrategy _autoValue; - private static InternalUnknownChunkingStrategy _unknownValue; + private static InternalDotNetCombinedAutoChunkingStrategyParam _autoValue; + private static InternalDotNetCombinedOtherChunkingStrategyParam _otherValue; } diff --git a/src/Custom/VectorStores/FileFromStoreRemovalResult.cs b/src/Custom/VectorStores/FileFromStoreRemovalResult.cs index 5945a69e6..fbe114d8d 100644 --- a/src/Custom/VectorStores/FileFromStoreRemovalResult.cs +++ b/src/Custom/VectorStores/FileFromStoreRemovalResult.cs @@ -1,4 +1,7 @@ -using System.Diagnostics.CodeAnalysis; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.VectorStores; @@ -17,5 +20,12 @@ public partial class FileFromStoreRemovalResult // CUSTOM: Made internal. /// The object type, which is always `vector_store.file.deleted`. [CodeGenMember("Object")] - internal InternalDeleteVectorStoreFileResponseObject Object { get; } = InternalDeleteVectorStoreFileResponseObject.VectorStoreFileDeleted; + internal string Object { get; } = "vector_store.file.deleted"; + + internal static FileFromStoreRemovalResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeFileFromStoreRemovalResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/VectorStores/Internal/GeneratorStubs.cs b/src/Custom/VectorStores/Internal/GeneratorStubs.cs index b67385a3c..446b341b6 100644 --- a/src/Custom/VectorStores/Internal/GeneratorStubs.cs +++ b/src/Custom/VectorStores/Internal/GeneratorStubs.cs @@ -1,66 +1,57 @@ +using OpenAI.Containers; +using System.ClientModel; + namespace OpenAI.VectorStores; // CUSTOM: Made internal. - -[CodeGenType("CreateVectorStoreFileBatchRequest")] -internal partial class InternalCreateVectorStoreFileBatchRequest { } - -[CodeGenType("CreateVectorStoreFileRequest")] -internal partial class InternalCreateVectorStoreFileRequest { } - -[CodeGenType("DeleteVectorStoreFileResponseObject")] -internal readonly partial struct InternalDeleteVectorStoreFileResponseObject { } - -[CodeGenType("DeleteVectorStoreResponseObject")] -internal readonly partial struct InternalDeleteVectorStoreResponseObject { } - -[CodeGenType("ListVectorStoreFilesResponse")] -internal partial class InternalListVectorStoreFilesResponse : IInternalListResponse { } - -[CodeGenType("ListVectorStoreFilesResponseObject")] -internal readonly partial struct InternalListVectorStoreFilesResponseObject { } - -[CodeGenType("ListVectorStoresResponse")] -internal partial class InternalListVectorStoresResponse : IInternalListResponse { } - -[CodeGenType("ListVectorStoresResponseObject")] -internal readonly partial struct InternalListVectorStoresResponseObject { } - -[CodeGenType("VectorStoreFileBatchObjectFileCounts")] -internal partial class InternalVectorStoreFileBatchObjectFileCounts { } - -[CodeGenType("VectorStoreFileBatchObjectObject")] -internal readonly partial struct InternalVectorStoreFileBatchObjectObject { } - -[CodeGenType("VectorStoreFileObjectObject")] -internal readonly partial struct InternalVectorStoreFileObjectObject { } - -[CodeGenType("VectorStoreObjectObject")] -internal readonly partial struct InternalVectorStoreObjectObject { } - -[CodeGenType("StaticChunkingStrategy")] -internal partial class InternalStaticChunkingStrategyDetails { } - -[CodeGenType("FileChunkingStrategyRequestParam")] -internal partial class InternalFileChunkingStrategyRequestParam { } - -[CodeGenType("AutoChunkingStrategyRequestParam")] -internal partial class InternalAutoChunkingStrategyRequestParam { } - -[CodeGenType("StaticChunkingStrategyRequestParam")] -internal partial class InternalStaticChunkingStrategyRequestParam { } - -[CodeGenType("UnknownFileChunkingStrategyRequestParam")] -internal partial class InternalUnknownFileChunkingStrategyRequestParamProxy { } - -[CodeGenType("AutoChunkingStrategyResponseParam")] -internal partial class InternalAutoChunkingStrategy { } - -[CodeGenType("OtherChunkingStrategyResponseParam")] -internal partial class InternalUnknownChunkingStrategy { } - -[CodeGenType("UnknownFileChunkingStrategyResponseParam")] -internal partial class InternalUnknownFileChunkingStrategyResponseParamProxy { } - -[CodeGenType("VectorStoreFileAttributes")] -internal partial class InternalVectorStoreFileAttributes { } \ No newline at end of file +[CodeGenType("CreateVectorStoreFileBatchRequest")] internal partial class InternalCreateVectorStoreFileBatchRequest { } +[CodeGenType("CreateVectorStoreFileRequest")] internal partial class InternalCreateVectorStoreFileRequest { } +[CodeGenType("DeleteVectorStoreFileResponseObject")] internal readonly partial struct InternalDeleteVectorStoreFileResponseObject { } +[CodeGenType("DeleteVectorStoreResponseObject")] internal readonly partial struct InternalDeleteVectorStoreResponseObject { } +[CodeGenType("ListVectorStoreFilesResponse")] internal partial class InternalListVectorStoreFilesResponse : IInternalListResponse { } +[CodeGenType("ListVectorStoreFilesResponseObject")] internal readonly partial struct InternalListVectorStoreFilesResponseObject { } +[CodeGenType("ListVectorStoresResponse")] internal partial class InternalListVectorStoresResponse : IInternalListResponse { } +[CodeGenType("ListVectorStoresResponseObject")] internal readonly partial struct InternalListVectorStoresResponseObject { } +[CodeGenType("VectorStoreFileBatchObjectFileCounts")] internal partial class InternalVectorStoreFileBatchObjectFileCounts { } +[CodeGenType("VectorStoreFileBatchObjectObject")] internal readonly partial struct InternalVectorStoreFileBatchObjectObject { } +[CodeGenType("VectorStoreFileObjectObject")] internal readonly partial struct InternalVectorStoreFileObjectObject { } +[CodeGenType("VectorStoreObjectObject")] internal readonly partial struct InternalVectorStoreObjectObject { } +[CodeGenType("StaticChunkingStrategy")] internal partial class InternalStaticChunkingStrategy { } +[CodeGenType("ChunkingStrategyRequestParam")] internal partial class InternalChunkingStrategyRequestParam { } +[CodeGenType("ChunkingStrategyRequestParamType")] internal readonly partial struct InternalChunkingStrategyRequestParamType {} +[CodeGenType("AutoChunkingStrategyRequestParam")] internal partial class InternalAutoChunkingStrategyRequestParam { } +[CodeGenType("StaticChunkingStrategyRequestParam")] internal partial class InternalStaticChunkingStrategyRequestParam { } +[CodeGenType("UnknownChunkingStrategyRequestParam")] internal partial class InternalUnknownChunkingStrategyRequestParamProxy { } +[CodeGenType("ChunkingStrategyResponseParam")] internal partial class InternalChunkingStrategyResponseParam { } +[CodeGenType("ChunkingStrategyResponseParamType")] internal readonly partial struct InternalChunkingStrategyResponseParamType { } +[CodeGenType("StaticChunkingStrategyResponseParam")] internal partial class InternalStaticChunkingStrategyResponseParam { } +[CodeGenType("OtherChunkingStrategyResponseParam")] internal partial class InternalOtherChunkingStrategyResponseParam { } +[CodeGenType("DotNetCombinedAutoChunkingStrategyParam")] internal partial class InternalDotNetCombinedAutoChunkingStrategyParam { } +[CodeGenType("DotNetCombinedChunkingStrategyParamType")] internal readonly partial struct InternalDotNetCombinedChunkingStrategyParamType { } +[CodeGenType("DotNetCombinedChunkingStrategyParamType3")] internal readonly partial struct InternalDotNetCombinedChunkingStrategyParamType3 { } +[CodeGenType("UnknownDotNetCombinedChunkingStrategyParam")] internal partial class InternalUnknownDotNetCombinedChunkingStrategyParam { } +[CodeGenType("DotNetCombinedOtherChunkingStrategyParam")] internal partial class InternalDotNetCombinedOtherChunkingStrategyParam { } +[CodeGenType("UnknownChunkingStrategyResponseParam")] internal partial class InternalUnknownChunkingStrategyResponseParam { } +[CodeGenType("VectorStoreFileAttributes")] internal partial class InternalVectorStoreFileAttributes { } +[CodeGenType("VectorStoreFileContentResponseObject")] internal readonly partial struct InternalVectorStoreFileContentResponseObject {} +[CodeGenType("VectorStoreSearchRequestRankingOptionsRanker")] internal readonly partial struct InternalVectorStoreSearchRequestRankingOptionsRanker {} +[CodeGenType("VectorStoreSearchResultsPageObject")] internal readonly partial struct InternalVectorStoreSearchResultsPageObject {} +[CodeGenType("VectorStoreSearchResultContentObjectType")] internal readonly partial struct InternalVectorStoreSearchResultContentObjectType {} +[CodeGenType("UpdateVectorStoreFileAttributesRequest")] internal partial class InternalUpdateVectorStoreFileAttributesRequest +{ + public static implicit operator BinaryContent(InternalUpdateVectorStoreFileAttributesRequest internalUpdateVectorStoreFileAttributesRequest) + { + if (internalUpdateVectorStoreFileAttributesRequest == null) + { + return null; + } + return BinaryContent.Create(internalUpdateVectorStoreFileAttributesRequest, ModelSerializationExtensions.WireOptions); + } +} +[CodeGenType("VectorStoreFileContentResponse")] internal partial class InternalVectorStoreFileContentResponse {} +[CodeGenType("VectorStoreFileContentResponseDatum")] internal partial class InternalVectorStoreFileContentResponseDatum {} +[CodeGenType("VectorStoreSearchRequestRankingOptions")] internal partial class InternalVectorStoreSearchRequestRankingOptions {} +[CodeGenType("VectorStoreSearchRequest")] internal partial class InternalVectorStoreSearchRequest {} +[CodeGenType("VectorStoreSearchResultsPage")] internal partial class InternalVectorStoreSearchResultsPage {} +[CodeGenType("VectorStoreSearchResultItem")] internal partial class InternalVectorStoreSearchResultItem {} +[CodeGenType("VectorStoreSearchResultContentObject")] internal partial class InternalVectorStoreSearchResultContentObject {} \ No newline at end of file diff --git a/src/Custom/VectorStores/Internal/InternalAutoChunkingStrategy.cs b/src/Custom/VectorStores/Internal/InternalAutoChunkingStrategy.cs new file mode 100644 index 000000000..e69de29bb diff --git a/src/Custom/VectorStores/Internal/InternalCreateVectorStoreFileRequest.cs b/src/Custom/VectorStores/Internal/InternalCreateVectorStoreFileRequest.cs index 7ddc7b78b..6499af4f6 100644 --- a/src/Custom/VectorStores/Internal/InternalCreateVectorStoreFileRequest.cs +++ b/src/Custom/VectorStores/Internal/InternalCreateVectorStoreFileRequest.cs @@ -1,7 +1,11 @@ +using System.ClientModel; + namespace OpenAI.VectorStores; internal partial class InternalCreateVectorStoreFileRequest { [CodeGenMember("ChunkingStrategy")] public FileChunkingStrategy ChunkingStrategy { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreCollectionResult.cs b/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreCollectionResult.cs index 90e260d97..9eb429289 100644 --- a/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreCollectionResult.cs +++ b/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreCollectionResult.cs @@ -83,7 +83,7 @@ public static bool HasNextPage(ClientResult result) internal virtual async Task GetVectorStoresAsync(int? limit, string? order, string? after, string? before, RequestOptions? options) { - using PipelineMessage message = _vectorStoreClient.CreateListVectorStoresRequest(limit, order, after, before, options); + using PipelineMessage message = _vectorStoreClient.CreateGetVectorStoresRequest(limit, order, after, before, options); return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } } diff --git a/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreFileBatchCollectionResult.cs b/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreFileBatchCollectionResult.cs index 5d3af5a96..39caf2f37 100644 --- a/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreFileBatchCollectionResult.cs +++ b/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreFileBatchCollectionResult.cs @@ -95,7 +95,7 @@ internal virtual async Task GetFileAssociationsAsync(string vector Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); - using PipelineMessage message = _vectorStoreClient.CreateListFilesInVectorStoreBatchRequest(vectorStoreId, batchId, limit, order, after, before, filter, options); + using PipelineMessage message = _vectorStoreClient.CreateGetFilesInVectorStoreBatchRequest(vectorStoreId, batchId, limit, order, after, before, filter, options); return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } } diff --git a/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreFileCollectionResult.cs b/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreFileCollectionResult.cs index cf35bff0b..0fdc218fc 100644 --- a/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreFileCollectionResult.cs +++ b/src/Custom/VectorStores/Internal/Pagination/AsyncVectorStoreFileCollectionResult.cs @@ -92,7 +92,7 @@ internal virtual async Task GetFileAssociationsAsync(string vector { Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - using PipelineMessage message = _vectorStoreClient.CreateListVectorStoreFilesRequest(vectorStoreId, limit, order, after, before, filter, options); + using PipelineMessage message = _vectorStoreClient.CreateGetVectorStoreFilesRequest(vectorStoreId, limit, order, after, before, filter, options); return ClientResult.FromResponse(await _pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } } diff --git a/src/Custom/VectorStores/Internal/Pagination/VectorStoreCollectionResult.cs b/src/Custom/VectorStores/Internal/Pagination/VectorStoreCollectionResult.cs index edcefd922..f8faf783f 100644 --- a/src/Custom/VectorStores/Internal/Pagination/VectorStoreCollectionResult.cs +++ b/src/Custom/VectorStores/Internal/Pagination/VectorStoreCollectionResult.cs @@ -90,7 +90,7 @@ public static bool HasNextPage(ClientResult result) internal virtual ClientResult GetVectorStores(int? limit, string? order, string? after, string? before, RequestOptions? options) { - using PipelineMessage message = _vectorStoreClient.CreateListVectorStoresRequest(limit, order, after, before, options); + using PipelineMessage message = _vectorStoreClient.CreateGetVectorStoresRequest(limit, order, after, before, options); return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); } } diff --git a/src/Custom/VectorStores/Internal/Pagination/VectorStoreFileBatchCollectionResult.cs b/src/Custom/VectorStores/Internal/Pagination/VectorStoreFileBatchCollectionResult.cs index 4f76f6337..76a9679db 100644 --- a/src/Custom/VectorStores/Internal/Pagination/VectorStoreFileBatchCollectionResult.cs +++ b/src/Custom/VectorStores/Internal/Pagination/VectorStoreFileBatchCollectionResult.cs @@ -100,7 +100,7 @@ internal virtual ClientResult GetFileAssociations(string vectorStoreId, string b Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); Argument.AssertNotNullOrEmpty(batchId, nameof(batchId)); - using PipelineMessage message = _vectorStoreClient.CreateListFilesInVectorStoreBatchRequest(vectorStoreId, batchId, limit, order, after, before, filter, options); + using PipelineMessage message = _vectorStoreClient.CreateGetFilesInVectorStoreBatchRequest(vectorStoreId, batchId, limit, order, after, before, filter, options); return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); } } diff --git a/src/Custom/VectorStores/Internal/Pagination/VectorStoreFileCollectionResult.cs b/src/Custom/VectorStores/Internal/Pagination/VectorStoreFileCollectionResult.cs index 11536f27c..4b4a038f5 100644 --- a/src/Custom/VectorStores/Internal/Pagination/VectorStoreFileCollectionResult.cs +++ b/src/Custom/VectorStores/Internal/Pagination/VectorStoreFileCollectionResult.cs @@ -97,7 +97,7 @@ internal virtual ClientResult GetFileAssociations(string vectorStoreId, int? lim { Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - using PipelineMessage message = _vectorStoreClient.CreateListVectorStoreFilesRequest(vectorStoreId, limit, order, after, before, filter, options); + using PipelineMessage message = _vectorStoreClient.CreateGetVectorStoreFilesRequest(vectorStoreId, limit, order, after, before, filter, options); return ClientResult.FromResponse(_pipeline.ProcessMessage(message, options)); } } diff --git a/src/Custom/VectorStores/StaticFileChunkingStrategy.cs b/src/Custom/VectorStores/StaticFileChunkingStrategy.cs index a895bc384..f9cdcc64b 100644 --- a/src/Custom/VectorStores/StaticFileChunkingStrategy.cs +++ b/src/Custom/VectorStores/StaticFileChunkingStrategy.cs @@ -3,20 +3,12 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] -[CodeGenType("StaticChunkingStrategyResponseParam")] +[CodeGenType("DotNetCombinedStaticChunkingStrategyParam")] public partial class StaticFileChunkingStrategy : FileChunkingStrategy { [CodeGenMember("Static")] - private InternalStaticChunkingStrategyDetails _internalDetails; + private InternalStaticChunkingStrategy _internalDetails; - // CUSTOM: Made internal. - internal StaticFileChunkingStrategy(InternalStaticChunkingStrategyDetails internalDetails) - { - Argument.AssertNotNull(internalDetails, nameof(internalDetails)); - - Type = "static"; - _internalDetails = internalDetails; - } /// /// Creates a new instance of , which allows for direct specification of @@ -25,7 +17,7 @@ internal StaticFileChunkingStrategy(InternalStaticChunkingStrategyDetails intern /// /// public StaticFileChunkingStrategy(int maxTokensPerChunk, int overlappingTokenCount) - : this(new InternalStaticChunkingStrategyDetails(maxTokensPerChunk, overlappingTokenCount)) + : this(new InternalStaticChunkingStrategy(maxTokensPerChunk, overlappingTokenCount)) { } @@ -36,6 +28,7 @@ public StaticFileChunkingStrategy(int maxTokensPerChunk, int overlappingTokenCou /// If not otherwise specified, a default of 800 will be used. /// public int MaxTokensPerChunk => _internalDetails.MaxChunkSizeTokens; + /// /// The number of shared, overlapping tokens allowed between chunks. /// diff --git a/src/Custom/VectorStores/VectorStore.cs b/src/Custom/VectorStores/VectorStore.cs index 7f05397d0..a3ccb61c7 100644 --- a/src/Custom/VectorStores/VectorStore.cs +++ b/src/Custom/VectorStores/VectorStore.cs @@ -1,4 +1,7 @@ +using System.ClientModel; +using System.ClientModel.Primitives; using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.VectorStores; @@ -12,11 +15,18 @@ public partial class VectorStore // CUSTOM: Made internal. /// The object type, which is always `vector_store`. [CodeGenMember("Object")] - internal InternalVectorStoreObjectObject Object { get; } = InternalVectorStoreObjectObject.VectorStore; + internal string Object { get; } = "vector_store"; /// /// Gets the policy that controls when this vector store will be automatically deleted. /// [CodeGenMember("ExpiresAfter")] public VectorStoreExpirationPolicy ExpirationPolicy { get; } + + internal static VectorStore FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeVectorStore(document.RootElement, ModelSerializationExtensions.WireOptions); + } } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreBatchFileJob.cs b/src/Custom/VectorStores/VectorStoreBatchFileJob.cs index 0e19bd05b..217956cbe 100644 --- a/src/Custom/VectorStores/VectorStoreBatchFileJob.cs +++ b/src/Custom/VectorStores/VectorStoreBatchFileJob.cs @@ -1,4 +1,7 @@ +using System.ClientModel; +using System.ClientModel.Primitives; using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.VectorStores; @@ -20,4 +23,11 @@ public partial class VectorStoreBatchFileJob /// Gets the file counts. [CodeGenMember("Counts")] public VectorStoreFileCounts FileCounts { get; } + + internal static VectorStoreBatchFileJob FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeVectorStoreBatchFileJob(document.RootElement, ModelSerializationExtensions.WireOptions); + } } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreClient.Protocol.cs b/src/Custom/VectorStores/VectorStoreClient.Protocol.cs index f6279e82c..7b179f323 100644 --- a/src/Custom/VectorStores/VectorStoreClient.Protocol.cs +++ b/src/Custom/VectorStores/VectorStoreClient.Protocol.cs @@ -9,8 +9,8 @@ namespace OpenAI.VectorStores; [CodeGenSuppress("ListVectorStoresAsync", typeof(int?), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] [CodeGenSuppress("ListVectorStores", typeof(int?), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListVectorStoreFilesAsync", typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListVectorStoreFiles", typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("GetVectorStoreFilesAsync", typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("GetVectorStoreFiles", typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] [CodeGenSuppress("CreateVectorStoreFileAsync", typeof(string), typeof(BinaryContent), typeof(RequestOptions))] [CodeGenSuppress("CreateVectorStoreFile", typeof(string), typeof(BinaryContent), typeof(RequestOptions))] [CodeGenSuppress("GetVectorStoreFileAsync", typeof(string), typeof(string), typeof(RequestOptions))] @@ -23,8 +23,8 @@ namespace OpenAI.VectorStores; [CodeGenSuppress("GetVectorStoreFileBatch", typeof(string), typeof(string), typeof(RequestOptions))] [CodeGenSuppress("CancelVectorStoreFileBatchAsync", typeof(string), typeof(string), typeof(RequestOptions))] [CodeGenSuppress("CancelVectorStoreFileBatch", typeof(string), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListFilesInVectorStoreBatchAsync", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] -[CodeGenSuppress("ListFilesInVectorStoreBatch", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("GetFilesInVectorStoreBatchAsync", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] +[CodeGenSuppress("GetFilesInVectorStoreBatch", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] [CodeGenSuppress("ListFilesInVectorStoreBatchesAsync", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] [CodeGenSuppress("ListFilesInVectorStoreBatches", typeof(string), typeof(string), typeof(int?), typeof(string), typeof(string), typeof(string), typeof(string), typeof(RequestOptions))] public partial class VectorStoreClient diff --git a/src/Custom/VectorStores/VectorStoreClient.cs b/src/Custom/VectorStores/VectorStoreClient.cs index 545f59ce0..07ec88460 100644 --- a/src/Custom/VectorStores/VectorStoreClient.cs +++ b/src/Custom/VectorStores/VectorStoreClient.cs @@ -14,27 +14,35 @@ namespace OpenAI.VectorStores; /// [Experimental("OPENAI001")] [CodeGenType("VectorStores")] -[CodeGenSuppress("VectorStoreClient", typeof(ClientPipeline), typeof(Uri))] +[CodeGenSuppress("CancelVectorStoreFileBatch", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CancelVectorStoreFileBatchAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("CreateVectorStore", typeof(VectorStoreCreationOptions), typeof(CancellationToken))] [CodeGenSuppress("CreateVectorStoreAsync", typeof(VectorStoreCreationOptions), typeof(CancellationToken))] +[CodeGenSuppress("CreateVectorStoreFile", typeof(string), typeof(InternalCreateVectorStoreFileRequest), typeof(CancellationToken))] [CodeGenSuppress("CreateVectorStore", typeof(VectorStoreCreationOptions), typeof(CancellationToken))] -[CodeGenSuppress("ListVectorStoresAsync", typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListVectorStores", typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListVectorStoreFilesAsync", typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] -[CodeGenSuppress("ListVectorStoreFiles", typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] +[CodeGenSuppress("GetVectorStoresAsync", typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetVectorStores", typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetVectorStoreFilesAsync", typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] +[CodeGenSuppress("GetVectorStoreFiles", typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] [CodeGenSuppress("CreateVectorStoreFileAsync", typeof(string), typeof(InternalCreateVectorStoreFileRequest), typeof(CancellationToken))] -[CodeGenSuppress("CreateVectorStoreFile", typeof(string), typeof(InternalCreateVectorStoreFileRequest), typeof(CancellationToken))] -[CodeGenSuppress("GetVectorStoreFileAsync", typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("GetVectorStoreFile", typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("DeleteVectorStoreFileAsync", typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("DeleteVectorStoreFile", typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("CreateVectorStoreFileBatchAsync", typeof(string), typeof(InternalCreateVectorStoreFileBatchRequest), typeof(CancellationToken))] [CodeGenSuppress("CreateVectorStoreFileBatch", typeof(string), typeof(InternalCreateVectorStoreFileBatchRequest), typeof(CancellationToken))] +[CodeGenSuppress("CreateVectorStoreFileBatchAsync", typeof(string), typeof(InternalCreateVectorStoreFileBatchRequest), typeof(CancellationToken))] +[CodeGenSuppress("DeleteVectorStoreFile", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("DeleteVectorStoreFileAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetVectorStoreFile", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetVectorStoreFileAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("GetVectorStoreFileBatch", typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("GetVectorStoreFileBatchAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("RetrieveVectorStoreFileContent", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("RetrieveVectorStoreFileContentAsync", typeof(string), typeof(string), typeof(CancellationToken))] +[CodeGenSuppress("SearchVectorStore", typeof(string), typeof(BinaryData), typeof(bool?), typeof(int?), typeof(BinaryData), typeof(InternalVectorStoreSearchRequestRankingOptions), typeof(CancellationToken))] +[CodeGenSuppress("SearchVectorStoreAsync", typeof(string), typeof(BinaryData), typeof(bool?), typeof(int?), typeof(BinaryData), typeof(InternalVectorStoreSearchRequestRankingOptions), typeof(CancellationToken))] +[CodeGenSuppress("VectorStoreClient", typeof(ClientPipeline), typeof(Uri))] [CodeGenSuppress("GetVectorStoreFileBatch", typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("CancelVectorStoreFileBatchAsync", typeof(string), typeof(string), typeof(CancellationToken))] [CodeGenSuppress("CancelVectorStoreFileBatch", typeof(string), typeof(string), typeof(CancellationToken))] -[CodeGenSuppress("ListFilesInVectorStoreBatchAsync", typeof(string), typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] -[CodeGenSuppress("ListFilesInVectorStoreBatch", typeof(string), typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] +[CodeGenSuppress("GetFilesInVectorStoreBatchAsync", typeof(string), typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] +[CodeGenSuppress("GetFilesInVectorStoreBatch", typeof(string), typeof(string), typeof(int?), typeof(VectorStoreCollectionOrder?), typeof(string), typeof(string), typeof(VectorStoreFileStatusFilter?), typeof(CancellationToken))] public partial class VectorStoreClient { // CUSTOM: Added as a convenience. @@ -107,14 +115,14 @@ internal virtual CreateBatchFileJobOperation CreateBatchFileJobOperation(ClientR /// should return after the operation has been started and is still running /// on the service, or wait until the operation has completed to return. /// - /// The to use. + /// The to use. /// A token that can be used to cancel this method call. - /// is null. + /// is null. /// A that can be used to wait for /// the vector store creation to complete. - public virtual async Task CreateVectorStoreAsync(bool waitUntilCompleted, VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default) + public virtual async Task CreateVectorStoreAsync(bool waitUntilCompleted, VectorStoreCreationOptions options = null, CancellationToken cancellationToken = default) { - using BinaryContent content = vectorStore; + using BinaryContent content = options?.ToBinaryContent(); return await CreateVectorStoreAsync(content, waitUntilCompleted, cancellationToken.ToRequestOptions()).ConfigureAwait(false); } @@ -123,14 +131,14 @@ public virtual async Task CreateVectorStoreAsync(boo /// should return after the operation has been started and is still running /// on the service, or wait until the operation has completed to return. /// - /// The to use. + /// The to use. /// A token that can be used to cancel this method call. - /// is null. + /// is null. /// A that can be used to wait for /// the vector store creation to complete. - public virtual CreateVectorStoreOperation CreateVectorStore(bool waitUntilCompleted, VectorStoreCreationOptions vectorStore = null, CancellationToken cancellationToken = default) + public virtual CreateVectorStoreOperation CreateVectorStore(bool waitUntilCompleted, VectorStoreCreationOptions options = null, CancellationToken cancellationToken = default) { - using BinaryContent content = vectorStore; + using BinaryContent content = options?.ToBinaryContent(); return CreateVectorStore(content, waitUntilCompleted, cancellationToken.ToRequestOptions()); } @@ -147,7 +155,7 @@ internal virtual async Task> GetVectorStoreAsync(strin ClientResult result = await GetVectorStoreAsync(vectorStoreId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); return ClientResult.FromValue( - (VectorStore)result, result.GetRawResponse()); + VectorStore.FromClientResult(result), result.GetRawResponse()); } /// @@ -161,41 +169,41 @@ public virtual ClientResult GetVectorStore(string vectorStoreId, Ca Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); ClientResult result = GetVectorStore(vectorStoreId, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((VectorStore)result, result.GetRawResponse()); + return ClientResult.FromValue(VectorStore.FromClientResult(result), result.GetRawResponse()); } /// /// Modifies an existing . /// /// The ID of the to modify. - /// The new options to apply to the . + /// The new options to apply to the . /// A token that can be used to cancel this method call. /// An updated representation of the modified . - public virtual async Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default) + public virtual async Task> ModifyVectorStoreAsync(string vectorStoreId, VectorStoreModificationOptions options, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNull(vectorStore, nameof(vectorStore)); + Argument.AssertNotNull(options, nameof(options)); - using BinaryContent content = vectorStore; + using BinaryContent content = options?.ToBinaryContent(); ClientResult result = await ModifyVectorStoreAsync(vectorStoreId, content, cancellationToken.ToRequestOptions()).ConfigureAwait(false); - return ClientResult.FromValue((VectorStore)result, result.GetRawResponse()); + return ClientResult.FromValue(VectorStore.FromClientResult(result), result.GetRawResponse()); } /// /// Modifies an existing . /// /// The ID of the to modify. - /// The new options to apply to the . + /// The new options to apply to the . /// A token that can be used to cancel this method call. /// An updated representation of the modified . - public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions vectorStore, CancellationToken cancellationToken = default) + public virtual ClientResult ModifyVectorStore(string vectorStoreId, VectorStoreModificationOptions options, CancellationToken cancellationToken = default) { Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); - Argument.AssertNotNull(vectorStore, nameof(vectorStore)); + Argument.AssertNotNull(options, nameof(options)); - using BinaryContent content = vectorStore; + using BinaryContent content = options?.ToBinaryContent(); ClientResult result = ModifyVectorStore(vectorStoreId, content, cancellationToken.ToRequestOptions()); - return ClientResult.FromValue((VectorStore)result, result.GetRawResponse()); + return ClientResult.FromValue(VectorStore.FromClientResult(result), result.GetRawResponse()); } /// @@ -210,7 +218,7 @@ public virtual async Task> DeleteVectorS ClientResult protocolResult = await DeleteVectorStoreAsync(vectorStoreId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse rawProtocolResponse = protocolResult?.GetRawResponse(); - VectorStoreDeletionResult value = (VectorStoreDeletionResult)protocolResult; + VectorStoreDeletionResult value = VectorStoreDeletionResult.FromClientResult(protocolResult); return ClientResult.FromValue(value, rawProtocolResponse); } @@ -226,7 +234,7 @@ public virtual ClientResult DeleteVectorStore(string ClientResult protocolResult = DeleteVectorStore(vectorStoreId, cancellationToken.ToRequestOptions()); PipelineResponse rawProtocolResponse = protocolResult?.GetRawResponse(); - VectorStoreDeletionResult value = (VectorStoreDeletionResult)protocolResult; + VectorStoreDeletionResult value = VectorStoreDeletionResult.FromClientResult(protocolResult); return ClientResult.FromValue(value, rawProtocolResponse); } @@ -311,7 +319,7 @@ public virtual async Task AddFileToVectorStoreAsy Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); InternalCreateVectorStoreFileRequest internalRequest = new(fileId); - return await AddFileToVectorStoreAsync(vectorStoreId, internalRequest, waitUntilCompleted, cancellationToken.ToRequestOptions()).ConfigureAwait(false); + return await AddFileToVectorStoreAsync(vectorStoreId, internalRequest.ToBinaryContent(), waitUntilCompleted, cancellationToken.ToRequestOptions()).ConfigureAwait(false); } /// @@ -333,7 +341,27 @@ public virtual AddFileToVectorStoreOperation AddFileToVectorStore(string vectorS Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); InternalCreateVectorStoreFileRequest internalRequest = new(fileId); - return AddFileToVectorStore(vectorStoreId, internalRequest, waitUntilCompleted, cancellationToken.ToRequestOptions()); + return AddFileToVectorStore(vectorStoreId, internalRequest.ToBinaryContent(), waitUntilCompleted, cancellationToken.ToRequestOptions()); + } + + public virtual ClientResult UpdateVectorStoreFileAttributes(string vectorStoreId, string fileId, IDictionary attributes, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + InternalUpdateVectorStoreFileAttributesRequest spreadModel = new InternalUpdateVectorStoreFileAttributesRequest(attributes, null); + ClientResult result = UpdateVectorStoreFileAttributes(vectorStoreId, fileId, spreadModel, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue(VectorStoreFileAssociation.FromClientResult(result), result.GetRawResponse()); + } + + public virtual async Task> UpdateVectorStoreFileAttributesAsync(string vectorStoreId, string fileId, IDictionary attributes, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + InternalUpdateVectorStoreFileAttributesRequest spreadModel = new InternalUpdateVectorStoreFileAttributesRequest(attributes, null); + ClientResult result = await UpdateVectorStoreFileAttributesAsync(vectorStoreId, fileId, spreadModel, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue(VectorStoreFileAssociation.FromClientResult(result), result.GetRawResponse()); } /// @@ -430,7 +458,7 @@ public virtual async Task> GetFileAssoc ClientResult result = await GetFileAssociationAsync(vectorStoreId, fileId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result?.GetRawResponse(); - VectorStoreFileAssociation value = (VectorStoreFileAssociation)result; + VectorStoreFileAssociation value = VectorStoreFileAssociation.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -452,7 +480,7 @@ public virtual ClientResult GetFileAssociation( ClientResult result = GetFileAssociation(vectorStoreId, fileId, cancellationToken.ToRequestOptions()); PipelineResponse response = result?.GetRawResponse(); - VectorStoreFileAssociation value = (VectorStoreFileAssociation)result; + VectorStoreFileAssociation value = VectorStoreFileAssociation.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -471,7 +499,7 @@ public virtual async Task> RemoveFileFr { ClientResult protocolResult = await RemoveFileFromStoreAsync(vectorStoreId, fileId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse protocolResponse = protocolResult?.GetRawResponse(); - FileFromStoreRemovalResult value = (FileFromStoreRemovalResult)protocolResult; + FileFromStoreRemovalResult value = FileFromStoreRemovalResult.FromClientResult(protocolResult); return ClientResult.FromValue(value, protocolResponse); } @@ -490,7 +518,7 @@ public virtual ClientResult RemoveFileFromStore(stri { ClientResult protocolResult = RemoveFileFromStore(vectorStoreId, fileId, cancellationToken.ToRequestOptions()); PipelineResponse protocolResponse = protocolResult?.GetRawResponse(); - FileFromStoreRemovalResult value = (FileFromStoreRemovalResult)protocolResult; + FileFromStoreRemovalResult value = FileFromStoreRemovalResult.FromClientResult(protocolResult); return ClientResult.FromValue(value, protocolResponse); } @@ -515,7 +543,8 @@ public virtual async Task CreateBatchFileJobAsync( Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); Argument.AssertNotNullOrEmpty(fileIds, nameof(fileIds)); - BinaryContent content = new InternalCreateVectorStoreFileBatchRequest(fileIds); + var createFileBatchRequest = new InternalCreateVectorStoreFileBatchRequest(fileIds); + BinaryContent content = BinaryContent.Create(createFileBatchRequest, ModelSerializationExtensions.WireOptions); RequestOptions options = cancellationToken.ToRequestOptions(); return await CreateBatchFileJobAsync(vectorStoreId, content, waitUntilCompleted, options).ConfigureAwait(false); @@ -542,7 +571,8 @@ public virtual CreateBatchFileJobOperation CreateBatchFileJob( Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); Argument.AssertNotNullOrEmpty(fileIds, nameof(fileIds)); - BinaryContent content = new InternalCreateVectorStoreFileBatchRequest(fileIds); + var createFileBatchRequest = new InternalCreateVectorStoreFileBatchRequest(fileIds); + BinaryContent content = BinaryContent.Create(createFileBatchRequest, ModelSerializationExtensions.WireOptions); RequestOptions options = cancellationToken.ToRequestOptions(); return CreateBatchFileJob(vectorStoreId, content, waitUntilCompleted, options); @@ -695,7 +725,7 @@ public virtual async Task> GetBatchFileJob ClientResult result = await GetBatchFileJobAsync(vectorStoreId, batchJobId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob)result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -713,7 +743,7 @@ public virtual ClientResult GetBatchFileJob(string vect ClientResult result = GetBatchFileJob(vectorStoreId, batchJobId, cancellationToken.ToRequestOptions()); PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob)result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -735,7 +765,7 @@ public virtual async Task> CancelBatchFile ClientResult result = await CancelBatchFileJobAsync(vectorStoreId, batchJobId, cancellationToken.ToRequestOptions()).ConfigureAwait(false); PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob)result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); return ClientResult.FromValue(value, response); } @@ -757,7 +787,7 @@ public virtual ClientResult CancelBatchFileJob(string v ClientResult result = CancelBatchFileJob(vectorStoreId, batchJobId, cancellationToken.ToRequestOptions()); PipelineResponse response = result?.GetRawResponse(); - VectorStoreBatchFileJob value = (VectorStoreBatchFileJob)result; + VectorStoreBatchFileJob value = VectorStoreBatchFileJob.FromClientResult(result); return ClientResult.FromValue(value, response); } } diff --git a/src/Custom/VectorStores/VectorStoreCollectionOrder.cs b/src/Custom/VectorStores/VectorStoreCollectionOrder.cs index 447f2bef2..963d468e0 100644 --- a/src/Custom/VectorStores/VectorStoreCollectionOrder.cs +++ b/src/Custom/VectorStores/VectorStoreCollectionOrder.cs @@ -4,7 +4,7 @@ namespace OpenAI.VectorStores; // CUSTOM: Renamed. [Experimental("OPENAI001")] -[CodeGenType("ListVectorStoresRequestOrder")] +[CodeGenType("PageOrderOptions")] public readonly partial struct VectorStoreCollectionOrder { // CUSTOM: Renamed. diff --git a/src/Custom/VectorStores/VectorStoreCreationOptions.cs b/src/Custom/VectorStores/VectorStoreCreationOptions.cs index d9a7d141d..ceaeeded8 100644 --- a/src/Custom/VectorStores/VectorStoreCreationOptions.cs +++ b/src/Custom/VectorStores/VectorStoreCreationOptions.cs @@ -1,3 +1,4 @@ +using System.ClientModel; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -13,4 +14,6 @@ public partial class VectorStoreCreationOptions [CodeGenMember("ChunkingStrategy")] public FileChunkingStrategy ChunkingStrategy { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Custom/VectorStores/VectorStoreDeletionResult.cs b/src/Custom/VectorStores/VectorStoreDeletionResult.cs index 422bef712..539db6332 100644 --- a/src/Custom/VectorStores/VectorStoreDeletionResult.cs +++ b/src/Custom/VectorStores/VectorStoreDeletionResult.cs @@ -1,4 +1,7 @@ -using System.Diagnostics.CodeAnalysis; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.VectorStores; @@ -12,5 +15,12 @@ public partial class VectorStoreDeletionResult // CUSTOM: Made internal. /// The object type, which is always `vector_store.deleted`. - internal InternalDeleteVectorStoreResponseObject Object { get; } = InternalDeleteVectorStoreResponseObject.VectorStoreDeleted; + internal string Object { get; } = "vector_store.deleted"; + + internal static VectorStoreDeletionResult FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeVectorStoreDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); + } } diff --git a/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs b/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs index 0eddc416b..d82f54518 100644 --- a/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs +++ b/src/Custom/VectorStores/VectorStoreExpirationAnchor.cs @@ -7,7 +7,7 @@ namespace OpenAI.VectorStores; /// Represents the available timestamps to which the duration in a will apply. /// [Experimental("OPENAI001")] -[CodeGenType("VectorStoreExpirationAfterAnchor")] +[CodeGenType("VectorStoreExpirationAnchor")] public enum VectorStoreExpirationAnchor { /// diff --git a/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs b/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs index c72227df1..8061c8312 100644 --- a/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs +++ b/src/Custom/VectorStores/VectorStoreExpirationPolicy.cs @@ -10,6 +10,7 @@ namespace OpenAI.VectorStores; [Experimental("OPENAI001")] [CodeGenType("VectorStoreExpirationAfter")] [CodeGenSuppress(nameof(VectorStoreExpirationPolicy), typeof(int))] +[CodeGenSuppress(nameof(VectorStoreExpirationPolicy), typeof(int), typeof(VectorStoreExpirationAnchor))] public partial class VectorStoreExpirationPolicy { [CodeGenMember("Anchor")] diff --git a/src/Custom/VectorStores/VectorStoreFileAssociation.cs b/src/Custom/VectorStores/VectorStoreFileAssociation.cs index d4a51bb0a..f1033d33c 100644 --- a/src/Custom/VectorStores/VectorStoreFileAssociation.cs +++ b/src/Custom/VectorStores/VectorStoreFileAssociation.cs @@ -1,7 +1,10 @@ using System; +using System.ClientModel; +using System.ClientModel.Primitives; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using System.Text.Json; namespace OpenAI.VectorStores; @@ -15,7 +18,7 @@ public partial class VectorStoreFileAssociation // CUSTOM: Made internal. /// The object type, which is always `vector_store.file`. [CodeGenMember("Object")] - internal InternalVectorStoreFileObjectObject Object { get; } = InternalVectorStoreFileObjectObject.VectorStoreFile; + internal string Object { get; } = "vector_store.file"; /// /// The ID of the file that is associated with the vector store. @@ -32,8 +35,15 @@ public partial class VectorStoreFileAssociation // CUSTOM: Changed type. [CodeGenMember("Attributes")] - public IDictionary Attributes { get; } = new ChangeTrackingDictionary(); + public IDictionary Attributes { get; } [CodeGenMember("ChunkingStrategy")] public FileChunkingStrategy ChunkingStrategy { get; } + + internal static VectorStoreFileAssociation FromClientResult(ClientResult result) + { + using PipelineResponse response = result.GetRawResponse(); + using JsonDocument document = JsonDocument.Parse(response.Content); + return DeserializeVectorStoreFileAssociation(document.RootElement, ModelSerializationExtensions.WireOptions); + } } \ No newline at end of file diff --git a/src/Custom/VectorStores/VectorStoreModificationOptions.cs b/src/Custom/VectorStores/VectorStoreModificationOptions.cs index 672fb952a..fe546164e 100644 --- a/src/Custom/VectorStores/VectorStoreModificationOptions.cs +++ b/src/Custom/VectorStores/VectorStoreModificationOptions.cs @@ -1,3 +1,4 @@ +using System.ClientModel; using System.Diagnostics.CodeAnalysis; namespace OpenAI.VectorStores; @@ -9,4 +10,6 @@ public partial class VectorStoreModificationOptions /// Gets or sets the policy that controls when the new vector store will be automatically deleted. [CodeGenMember("ExpiresAfter")] public VectorStoreExpirationPolicy ExpirationPolicy { get; set; } + + internal BinaryContent ToBinaryContent() => BinaryContent.Create(this, ModelSerializationExtensions.WireOptions); } diff --git a/src/Generated/AssistantClient.RestClient.cs b/src/Generated/AssistantClient.RestClient.cs index fb09295ec..9722fb6ab 100644 --- a/src/Generated/AssistantClient.RestClient.cs +++ b/src/Generated/AssistantClient.RestClient.cs @@ -14,25 +14,7 @@ public partial class AssistantClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal virtual PipelineMessage CreateCreateAssistantRequest(BinaryContent content, RequestOptions options) - { - PipelineMessage message = Pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "POST"; - ClientUriBuilder uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/assistants", false); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - request.Headers.Set("OpenAI-Beta", "assistants=v2"); - request.Headers.Set("Content-Type", "application/json"); - request.Content = content; - message.Apply(options); - return message; - } - - internal virtual PipelineMessage CreateListAssistantsRequest(int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateGetAssistantsRequest(int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -64,6 +46,24 @@ internal virtual PipelineMessage CreateListAssistantsRequest(int? limit, string return message; } + internal virtual PipelineMessage CreateCreateAssistantRequest(BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/assistants", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("OpenAI-Beta", "assistants=v2"); + request.Headers.Set("Content-Type", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + internal virtual PipelineMessage CreateGetAssistantRequest(string assistantId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); diff --git a/src/Generated/AudioClient.RestClient.cs b/src/Generated/AudioClient.RestClient.cs index 719788acf..6f2ec1086 100644 --- a/src/Generated/AudioClient.RestClient.cs +++ b/src/Generated/AudioClient.RestClient.cs @@ -41,7 +41,7 @@ internal virtual PipelineMessage CreateCreateTranscriptionRequest(BinaryContent uri.Reset(_endpoint); uri.AppendPath("/audio/transcriptions", false); request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Accept", "application/json, text/event-stream"); request.Headers.Set("Content-Type", contentType); request.Content = content; message.Apply(options); diff --git a/src/Generated/BatchClient.RestClient.cs b/src/Generated/BatchClient.RestClient.cs index 18728659b..3ece99d17 100644 --- a/src/Generated/BatchClient.RestClient.cs +++ b/src/Generated/BatchClient.RestClient.cs @@ -3,7 +3,6 @@ #nullable disable using System.ClientModel.Primitives; -using OpenAI; namespace OpenAI.Batch { @@ -12,28 +11,5 @@ public partial class BatchClient private static PipelineMessageClassifier _pipelineMessageClassifier200; private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - - internal virtual PipelineMessage CreateListBatchesRequest(string after, int? limit, RequestOptions options) - { - PipelineMessage message = Pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "GET"; - ClientUriBuilder uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/batches", false); - if (after != null) - { - uri.AppendQuery("after", after, true); - } - if (limit != null) - { - uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); - } - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } } } diff --git a/src/Generated/ChatClient.RestClient.cs b/src/Generated/ChatClient.RestClient.cs index cebe4507a..2465e85b6 100644 --- a/src/Generated/ChatClient.RestClient.cs +++ b/src/Generated/ChatClient.RestClient.cs @@ -4,6 +4,7 @@ using System.ClientModel; using System.ClientModel.Primitives; +using System.Collections.Generic; using OpenAI; namespace OpenAI.Chat @@ -14,6 +15,47 @@ public partial class ChatClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + internal virtual PipelineMessage CreateGetChatCompletionsRequest(string after, int? limit, string order, IDictionary metadata, string model, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/chat/completions", false); + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (metadata != null && !(metadata is ChangeTrackingDictionary changeTrackingDictionary && changeTrackingDictionary.IsUndefined)) + { + List list = new List(); + foreach (var @param in metadata) + { + list.Add(@param.Key); + list.Add(@param.Value); + } + uri.AppendQueryDelimited("metadata", list, ",", null, true); + } + if (model != null) + { + uri.AppendQuery("model", model, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + internal virtual PipelineMessage CreateCreateChatCompletionRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); @@ -30,5 +72,84 @@ internal virtual PipelineMessage CreateCreateChatCompletionRequest(BinaryContent message.Apply(options); return message; } + + internal virtual PipelineMessage CreateGetChatCompletionRequest(string completionId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/chat/completions/", false); + uri.AppendPath(completionId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateUpdateChatCompletionRequest(string completionId, BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/chat/completions/", false); + uri.AppendPath(completionId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateDeleteChatCompletionRequest(string completionId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "DELETE"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/chat/completions/", false); + uri.AppendPath(completionId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetChatCompletionMessagesRequest(string completionId, string after, int? limit, string order, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/chat/completions/", false); + uri.AppendPath(completionId, true); + uri.AppendPath("/messages", false); + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } } } diff --git a/src/Generated/ContainerClient.RestClient.cs b/src/Generated/ContainerClient.RestClient.cs new file mode 100644 index 000000000..39725815d --- /dev/null +++ b/src/Generated/ContainerClient.RestClient.cs @@ -0,0 +1,196 @@ +// + +#nullable disable + +using System.ClientModel; +using System.ClientModel.Primitives; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class ContainerClient + { + private static PipelineMessageClassifier _pipelineMessageClassifier200; + + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + + internal virtual PipelineMessage CreateGetContainersRequest(int? limit, string order, string after, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers", false); + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (after != null) + { + uri.AppendQuery("after", after, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCreateContainerRequest(BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateRetrieveContainerRequest(string containerId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers/", false); + uri.AppendPath(containerId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateDeleteContainerRequest(string containerId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "DELETE"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers/", false); + uri.AppendPath(containerId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCreateContainerFileRequest(string containerId, BinaryContent content, string contentType, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers/", false); + uri.AppendPath(containerId, true); + uri.AppendPath("/files", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", contentType); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetContainerFilesRequest(string containerId, int? limit, string order, string after, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers/", false); + uri.AppendPath(containerId, true); + uri.AppendPath("/files", false); + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (after != null) + { + uri.AppendQuery("after", after, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateRetrieveContainerFileRequest(string containerId, string fileId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers/", false); + uri.AppendPath(containerId, true); + uri.AppendPath("/files/", false); + uri.AppendPath(fileId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateDeleteContainerFileRequest(string containerId, string fileId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "DELETE"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers/", false); + uri.AppendPath(containerId, true); + uri.AppendPath("/files/", false); + uri.AppendPath(fileId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateRetrieveContainerFileContentRequest(string containerId, string fileId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/containers/", false); + uri.AppendPath(containerId, true); + uri.AppendPath("/files/", false); + uri.AppendPath(fileId, true); + uri.AppendPath("/content", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/octet-stream"); + message.Apply(options); + return message; + } + } +} diff --git a/src/Generated/ContainerClient.cs b/src/Generated/ContainerClient.cs new file mode 100644 index 000000000..1564b7ff1 --- /dev/null +++ b/src/Generated/ContainerClient.cs @@ -0,0 +1,309 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Threading; +using System.Threading.Tasks; +using OpenAI; +using OpenAI.VectorStores; + +namespace OpenAI.Containers +{ + internal partial class ContainerClient + { + private readonly Uri _endpoint; + + protected ContainerClient() + { + } + + internal ContainerClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + + public ClientPipeline Pipeline { get; } + + public virtual ClientResult GetContainers(int? limit, string order, string after, RequestOptions options) + { + using PipelineMessage message = CreateGetContainersRequest(limit, order, after, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetContainersAsync(int? limit, string order, string after, RequestOptions options) + { + using PipelineMessage message = CreateGetContainersRequest(limit, order, after, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetContainers(int? limit = default, VectorStoreCollectionOrder? order = default, string after = default, CancellationToken cancellationToken = default) + { + ClientResult result = GetContainers(limit, order?.ToString(), after, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalContainerListResource)result, result.GetRawResponse()); + } + + public virtual async Task> GetContainersAsync(int? limit = default, VectorStoreCollectionOrder? order = default, string after = default, CancellationToken cancellationToken = default) + { + ClientResult result = await GetContainersAsync(limit, order?.ToString(), after, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalContainerListResource)result, result.GetRawResponse()); + } + + public virtual ClientResult CreateContainer(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateContainerRequest(content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CreateContainerAsync(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateContainerRequest(content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult CreateContainer(InternalCreateContainerBody body, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(body, nameof(body)); + + ClientResult result = CreateContainer(body, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalContainerResource)result, result.GetRawResponse()); + } + + public virtual async Task> CreateContainerAsync(InternalCreateContainerBody body, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(body, nameof(body)); + + ClientResult result = await CreateContainerAsync(body, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalContainerResource)result, result.GetRawResponse()); + } + + public virtual ClientResult RetrieveContainer(string containerId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + using PipelineMessage message = CreateRetrieveContainerRequest(containerId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task RetrieveContainerAsync(string containerId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + using PipelineMessage message = CreateRetrieveContainerRequest(containerId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult RetrieveContainer(string containerId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + ClientResult result = RetrieveContainer(containerId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalContainerResource)result, result.GetRawResponse()); + } + + public virtual async Task> RetrieveContainerAsync(string containerId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + ClientResult result = await RetrieveContainerAsync(containerId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalContainerResource)result, result.GetRawResponse()); + } + + public virtual ClientResult DeleteContainer(string containerId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + using PipelineMessage message = CreateDeleteContainerRequest(containerId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task DeleteContainerAsync(string containerId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + using PipelineMessage message = CreateDeleteContainerRequest(containerId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult DeleteContainer(string containerId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + ClientResult result = DeleteContainer(containerId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalDeleteContainerResponse)result, result.GetRawResponse()); + } + + public virtual async Task> DeleteContainerAsync(string containerId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + ClientResult result = await DeleteContainerAsync(containerId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalDeleteContainerResponse)result, result.GetRawResponse()); + } + + public virtual ClientResult CreateContainerFile(string containerId, BinaryContent content, string contentType, RequestOptions options = null) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateContainerFileRequest(containerId, content, contentType, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CreateContainerFileAsync(string containerId, BinaryContent content, string contentType, RequestOptions options = null) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateContainerFileRequest(containerId, content, contentType, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetContainerFiles(string containerId, int? limit, string order, string after, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + using PipelineMessage message = CreateGetContainerFilesRequest(containerId, limit, order, after, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetContainerFilesAsync(string containerId, int? limit, string order, string after, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + using PipelineMessage message = CreateGetContainerFilesRequest(containerId, limit, order, after, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult GetContainerFiles(string containerId, int? limit = default, VectorStoreCollectionOrder? order = default, string after = default, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + ClientResult result = GetContainerFiles(containerId, limit, order?.ToString(), after, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalContainerFileListResource)result, result.GetRawResponse()); + } + + public virtual async Task> GetContainerFilesAsync(string containerId, int? limit = default, VectorStoreCollectionOrder? order = default, string after = default, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + + ClientResult result = await GetContainerFilesAsync(containerId, limit, order?.ToString(), after, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalContainerFileListResource)result, result.GetRawResponse()); + } + + public virtual ClientResult RetrieveContainerFile(string containerId, string fileId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + using PipelineMessage message = CreateRetrieveContainerFileRequest(containerId, fileId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task RetrieveContainerFileAsync(string containerId, string fileId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + using PipelineMessage message = CreateRetrieveContainerFileRequest(containerId, fileId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult RetrieveContainerFile(string containerId, string fileId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + ClientResult result = RetrieveContainerFile(containerId, fileId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalContainerFileResource)result, result.GetRawResponse()); + } + + public virtual async Task> RetrieveContainerFileAsync(string containerId, string fileId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + ClientResult result = await RetrieveContainerFileAsync(containerId, fileId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalContainerFileResource)result, result.GetRawResponse()); + } + + public virtual ClientResult DeleteContainerFile(string containerId, string fileId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + using PipelineMessage message = CreateDeleteContainerFileRequest(containerId, fileId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task DeleteContainerFileAsync(string containerId, string fileId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + using PipelineMessage message = CreateDeleteContainerFileRequest(containerId, fileId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult DeleteContainerFile(string containerId, string fileId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + ClientResult result = DeleteContainerFile(containerId, fileId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalDeleteContainerFileResponse)result, result.GetRawResponse()); + } + + public virtual async Task> DeleteContainerFileAsync(string containerId, string fileId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + ClientResult result = await DeleteContainerFileAsync(containerId, fileId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalDeleteContainerFileResponse)result, result.GetRawResponse()); + } + + public virtual ClientResult RetrieveContainerFileContent(string containerId, string fileId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + using PipelineMessage message = CreateRetrieveContainerFileContentRequest(containerId, fileId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task RetrieveContainerFileContentAsync(string containerId, string fileId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + using PipelineMessage message = CreateRetrieveContainerFileContentRequest(containerId, fileId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult RetrieveContainerFileContent(string containerId, string fileId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + ClientResult result = RetrieveContainerFileContent(containerId, fileId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue(result.GetRawResponse().Content, result.GetRawResponse()); + } + + public virtual async Task> RetrieveContainerFileContentAsync(string containerId, string fileId, CancellationToken cancellationToken = default) + { + Argument.AssertNotNullOrEmpty(containerId, nameof(containerId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + ClientResult result = await RetrieveContainerFileContentAsync(containerId, fileId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue(result.GetRawResponse().Content, result.GetRawResponse()); + } + } +} diff --git a/src/Generated/EvaluationClient.RestClient.cs b/src/Generated/EvaluationClient.RestClient.cs new file mode 100644 index 000000000..6512fa0e7 --- /dev/null +++ b/src/Generated/EvaluationClient.RestClient.cs @@ -0,0 +1,279 @@ +// + +#nullable disable + +using System.ClientModel; +using System.ClientModel.Primitives; +using OpenAI; + +namespace OpenAI.Evals +{ + public partial class EvaluationClient + { + private static PipelineMessageClassifier _pipelineMessageClassifier200; + private static PipelineMessageClassifier _pipelineMessageClassifier201; + + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + + private static PipelineMessageClassifier PipelineMessageClassifier201 => _pipelineMessageClassifier201 = PipelineMessageClassifier.Create(stackalloc ushort[] { 201 }); + + internal virtual PipelineMessage CreateGetEvalsRequest(string after, int? limit, string order, string orderBy, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals", false); + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (orderBy != null) + { + uri.AppendQuery("order_by", orderBy, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCreateEvalRequest(BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier201; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetEvalRequest(string evalId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateUpdateEvalRequest(string evalId, BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateDeleteEvalRequest(string evalId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "DELETE"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetEvalRunsRequest(string evalId, string after, int? limit, string order, string status, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + uri.AppendPath("/runs", false); + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (status != null) + { + uri.AppendQuery("status", status, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCreateEvalRunRequest(string evalId, BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier201; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + uri.AppendPath("/runs", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetEvalRunRequest(string evalId, string runId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCancelEvalRunRequest(string evalId, string runId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateDeleteEvalRunRequest(string evalId, string runId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "DELETE"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetEvalRunOutputItemsRequest(string evalId, string runId, string after, int? limit, string status, string order, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + uri.AppendPath("/output_items", false); + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (status != null) + { + uri.AppendQuery("status", status, true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetEvalRunOutputItemRequest(string evalId, string runId, string outputItemId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/evals/", false); + uri.AppendPath(evalId, true); + uri.AppendPath("/runs/", false); + uri.AppendPath(runId, true); + uri.AppendPath("/output_items/", false); + uri.AppendPath(outputItemId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + } +} diff --git a/src/Generated/EvaluationClient.cs b/src/Generated/EvaluationClient.cs new file mode 100644 index 000000000..f2b954a60 --- /dev/null +++ b/src/Generated/EvaluationClient.cs @@ -0,0 +1,26 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; + +namespace OpenAI.Evals +{ + public partial class EvaluationClient + { + private readonly Uri _endpoint; + + protected EvaluationClient() + { + } + + internal EvaluationClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + + public ClientPipeline Pipeline { get; } + } +} diff --git a/src/Generated/FineTuningClient.RestClient.cs b/src/Generated/FineTuningClient.RestClient.cs index 2997b3f6c..5208a4590 100644 --- a/src/Generated/FineTuningClient.RestClient.cs +++ b/src/Generated/FineTuningClient.RestClient.cs @@ -2,6 +2,7 @@ #nullable disable +using System.ClientModel; using System.ClientModel.Primitives; using OpenAI; @@ -13,7 +14,94 @@ public partial class FineTuningClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal virtual PipelineMessage CreateListPaginatedFineTuningJobsRequest(string after, int? limit, RequestOptions options) + internal virtual PipelineMessage CreateGetFineTuningCheckpointPermissionsRequest(string fineTunedModelCheckpoint, string after, int? limit, string order, string projectId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/checkpoints/", false); + uri.AppendPath(fineTunedModelCheckpoint, true); + uri.AppendPath("/permissions", false); + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (projectId != null) + { + uri.AppendQuery("project_id", projectId, true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCreateFineTuningCheckpointPermissionRequest(string fineTunedModelCheckpoint, BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/checkpoints/", false); + uri.AppendPath(fineTunedModelCheckpoint, true); + uri.AppendPath("/permissions", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateDeleteFineTuningCheckpointPermissionRequest(string fineTunedModelCheckpoint, string permissionId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "DELETE"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/checkpoints/", false); + uri.AppendPath(fineTunedModelCheckpoint, true); + uri.AppendPath("/permissions/", false); + uri.AppendPath(permissionId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCreateFineTuningJobRequest(BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Content-Type", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetPaginatedFineTuningJobsRequest(string after, int? limit, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -36,6 +124,22 @@ internal virtual PipelineMessage CreateListPaginatedFineTuningJobsRequest(string return message; } + internal virtual PipelineMessage CreateRetrieveFineTuningJobRequest(string fineTuningJobId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs/", false); + uri.AppendPath(fineTuningJobId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + internal virtual PipelineMessage CreateCancelFineTuningJobRequest(string fineTuningJobId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); @@ -53,7 +157,7 @@ internal virtual PipelineMessage CreateCancelFineTuningJobRequest(string fineTun return message; } - internal virtual PipelineMessage CreateListFineTuningJobCheckpointsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) + internal virtual PipelineMessage CreateGetFineTuningJobCheckpointsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -78,7 +182,7 @@ internal virtual PipelineMessage CreateListFineTuningJobCheckpointsRequest(strin return message; } - internal virtual PipelineMessage CreateListFineTuningEventsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) + internal virtual PipelineMessage CreateGetFineTuningEventsRequest(string fineTuningJobId, string after, int? limit, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -102,5 +206,39 @@ internal virtual PipelineMessage CreateListFineTuningEventsRequest(string fineTu message.Apply(options); return message; } + + internal virtual PipelineMessage CreatePauseFineTuningJobRequest(string fineTuningJobId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs/", false); + uri.AppendPath(fineTuningJobId, true); + uri.AppendPath("/pause", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateResumeFineTuningJobRequest(string fineTuningJobId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/jobs/", false); + uri.AppendPath(fineTuningJobId, true); + uri.AppendPath("/resume", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } } } diff --git a/src/Generated/FineTuningClient.cs b/src/Generated/FineTuningClient.cs index 28be3ec06..e76b28fd8 100644 --- a/src/Generated/FineTuningClient.cs +++ b/src/Generated/FineTuningClient.cs @@ -3,7 +3,10 @@ #nullable disable using System; +using System.ClientModel; using System.ClientModel.Primitives; +using System.Threading.Tasks; +using OpenAI; namespace OpenAI.FineTuning { @@ -16,5 +19,89 @@ protected FineTuningClient() } public ClientPipeline Pipeline { get; } + + public virtual ClientResult GetFineTuningCheckpointPermissions(string fineTunedModelCheckpoint, string after, int? limit, string order, string projectId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTunedModelCheckpoint, nameof(fineTunedModelCheckpoint)); + + using PipelineMessage message = CreateGetFineTuningCheckpointPermissionsRequest(fineTunedModelCheckpoint, after, limit, order, projectId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task GetFineTuningCheckpointPermissionsAsync(string fineTunedModelCheckpoint, string after, int? limit, string order, string projectId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTunedModelCheckpoint, nameof(fineTunedModelCheckpoint)); + + using PipelineMessage message = CreateGetFineTuningCheckpointPermissionsRequest(fineTunedModelCheckpoint, after, limit, order, projectId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult CreateFineTuningCheckpointPermission(string fineTunedModelCheckpoint, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNullOrEmpty(fineTunedModelCheckpoint, nameof(fineTunedModelCheckpoint)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateFineTuningCheckpointPermissionRequest(fineTunedModelCheckpoint, content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CreateFineTuningCheckpointPermissionAsync(string fineTunedModelCheckpoint, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNullOrEmpty(fineTunedModelCheckpoint, nameof(fineTunedModelCheckpoint)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateFineTuningCheckpointPermissionRequest(fineTunedModelCheckpoint, content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult DeleteFineTuningCheckpointPermission(string fineTunedModelCheckpoint, string permissionId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTunedModelCheckpoint, nameof(fineTunedModelCheckpoint)); + Argument.AssertNotNullOrEmpty(permissionId, nameof(permissionId)); + + using PipelineMessage message = CreateDeleteFineTuningCheckpointPermissionRequest(fineTunedModelCheckpoint, permissionId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task DeleteFineTuningCheckpointPermissionAsync(string fineTunedModelCheckpoint, string permissionId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTunedModelCheckpoint, nameof(fineTunedModelCheckpoint)); + Argument.AssertNotNullOrEmpty(permissionId, nameof(permissionId)); + + using PipelineMessage message = CreateDeleteFineTuningCheckpointPermissionRequest(fineTunedModelCheckpoint, permissionId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult PauseFineTuningJob(string fineTuningJobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); + + using PipelineMessage message = CreatePauseFineTuningJobRequest(fineTuningJobId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task PauseFineTuningJobAsync(string fineTuningJobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); + + using PipelineMessage message = CreatePauseFineTuningJobRequest(fineTuningJobId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult ResumeFineTuningJob(string fineTuningJobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); + + using PipelineMessage message = CreateResumeFineTuningJobRequest(fineTuningJobId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task ResumeFineTuningJobAsync(string fineTuningJobId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(fineTuningJobId, nameof(fineTuningJobId)); + + using PipelineMessage message = CreateResumeFineTuningJobRequest(fineTuningJobId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } } } diff --git a/src/Generated/GraderClient.RestClient.cs b/src/Generated/GraderClient.RestClient.cs new file mode 100644 index 000000000..1f7273b73 --- /dev/null +++ b/src/Generated/GraderClient.RestClient.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System.ClientModel; +using System.ClientModel.Primitives; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class GraderClient + { + private static PipelineMessageClassifier _pipelineMessageClassifier200; + + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + + internal virtual PipelineMessage CreateRunGraderRequest(BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/alpha/graders/run", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateValidateGraderRequest(BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/fine_tuning/alpha/graders/validate", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + } +} diff --git a/src/Generated/GraderClient.cs b/src/Generated/GraderClient.cs new file mode 100644 index 000000000..204bc99c8 --- /dev/null +++ b/src/Generated/GraderClient.cs @@ -0,0 +1,94 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Threading; +using System.Threading.Tasks; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class GraderClient + { + private readonly Uri _endpoint; + + protected GraderClient() + { + } + + internal GraderClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + + public ClientPipeline Pipeline { get; } + + public virtual ClientResult RunGrader(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateRunGraderRequest(content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task RunGraderAsync(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateRunGraderRequest(content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult RunGrader(InternalRunGraderRequest request, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(request, nameof(request)); + + ClientResult result = RunGrader(request, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalRunGraderResponse)result, result.GetRawResponse()); + } + + public virtual async Task> RunGraderAsync(InternalRunGraderRequest request, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(request, nameof(request)); + + ClientResult result = await RunGraderAsync(request, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalRunGraderResponse)result, result.GetRawResponse()); + } + + public virtual ClientResult ValidateGrader(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateValidateGraderRequest(content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task ValidateGraderAsync(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateValidateGraderRequest(content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult ValidateGrader(InternalValidateGraderRequest request, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(request, nameof(request)); + + ClientResult result = ValidateGrader(request, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); + return ClientResult.FromValue((InternalValidateGraderResponse)result, result.GetRawResponse()); + } + + public virtual async Task> ValidateGraderAsync(InternalValidateGraderRequest request, CancellationToken cancellationToken = default) + { + Argument.AssertNotNull(request, nameof(request)); + + ClientResult result = await ValidateGraderAsync(request, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); + return ClientResult.FromValue((InternalValidateGraderResponse)result, result.GetRawResponse()); + } + } +} diff --git a/src/Generated/Internal/Argument.cs b/src/Generated/Internal/Argument.cs index 6e8945dda..9cd60eb9e 100644 --- a/src/Generated/Internal/Argument.cs +++ b/src/Generated/Internal/Argument.cs @@ -19,7 +19,7 @@ public static void AssertNotNull(T value, string name) } public static void AssertNotNull(T? value, string name) - where T : struct + where T : struct { if (!value.HasValue) { @@ -59,68 +59,5 @@ public static void AssertNotNullOrEmpty(string value, string name) throw new ArgumentException("Value cannot be an empty string.", name); } } - - public static void AssertNotNullOrWhiteSpace(string value, string name) - { - if (value is null) - { - throw new ArgumentNullException(name); - } - if (string.IsNullOrWhiteSpace(value)) - { - throw new ArgumentException("Value cannot be empty or contain only white-space characters.", name); - } - } - - public static void AssertNotDefault(ref T value, string name) - where T : struct, IEquatable - { - if (value.Equals(default)) - { - throw new ArgumentException("Value cannot be empty.", name); - } - } - - public static void AssertInRange(T value, T minimum, T maximum, string name) - where T : notnull, IComparable - { - if (minimum.CompareTo(value) > 0) - { - throw new ArgumentOutOfRangeException(name, "Value is less than the minimum allowed."); - } - if (maximum.CompareTo(value) < 0) - { - throw new ArgumentOutOfRangeException(name, "Value is greater than the maximum allowed."); - } - } - - public static void AssertEnumDefined(Type enumType, object value, string name) - { - if (!Enum.IsDefined(enumType, value)) - { - throw new ArgumentException($"Value not defined for {enumType.FullName}.", name); - } - } - - public static T CheckNotNull(T value, string name) - where T : class - { - AssertNotNull(value, name); - return value; - } - - public static string CheckNotNullOrEmpty(string value, string name) - { - AssertNotNullOrEmpty(value, name); - return value; - } - - public static void AssertNull(T value, string name, string message = null) - { - if (value != null) - { - throw new ArgumentException(message ?? "Value must be null.", name); - } - } } } diff --git a/src/Generated/Internal/BinaryContentHelper.cs b/src/Generated/Internal/BinaryContentHelper.cs index a3f8eae20..2f0b69855 100644 --- a/src/Generated/Internal/BinaryContentHelper.cs +++ b/src/Generated/Internal/BinaryContentHelper.cs @@ -12,7 +12,7 @@ namespace OpenAI internal static partial class BinaryContentHelper { public static BinaryContent FromEnumerable(IEnumerable enumerable) - where T : notnull + where T : notnull { Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); content.JsonWriter.WriteStartArray(); @@ -53,7 +53,7 @@ public static BinaryContent FromEnumerable(IEnumerable enumerable) } public static BinaryContent FromEnumerable(ReadOnlySpan span) - where T : notnull + where T : notnull { Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); content.JsonWriter.WriteStartArray(); @@ -68,7 +68,7 @@ public static BinaryContent FromEnumerable(ReadOnlySpan span) } public static BinaryContent FromDictionary(IDictionary dictionary) - where TValue : notnull + where TValue : notnull { Utf8JsonBinaryContent content = new Utf8JsonBinaryContent(); content.JsonWriter.WriteStartObject(); diff --git a/src/Generated/Internal/Optional.cs b/src/Generated/Internal/Optional.cs index e4ae0dc30..78fe712b6 100644 --- a/src/Generated/Internal/Optional.cs +++ b/src/Generated/Internal/Optional.cs @@ -25,7 +25,7 @@ public static bool IsCollectionDefined(IReadOnlyDictionary(T? value) - where T : struct + where T : struct { return value.HasValue; } diff --git a/src/Generated/InternalAssistantMessageClient.RestClient.cs b/src/Generated/InternalAssistantMessageClient.RestClient.cs index d095f507b..7647347f1 100644 --- a/src/Generated/InternalAssistantMessageClient.RestClient.cs +++ b/src/Generated/InternalAssistantMessageClient.RestClient.cs @@ -34,7 +34,7 @@ internal virtual PipelineMessage CreateCreateMessageRequest(string threadId, Bin return message; } - internal virtual PipelineMessage CreateListMessagesRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateGetMessagesRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/InternalAssistantMessageClient.cs b/src/Generated/InternalAssistantMessageClient.cs index 4d1925265..e73a03db7 100644 --- a/src/Generated/InternalAssistantMessageClient.cs +++ b/src/Generated/InternalAssistantMessageClient.cs @@ -26,19 +26,19 @@ internal InternalAssistantMessageClient(ClientPipeline pipeline, Uri endpoint) public ClientPipeline Pipeline { get; } - public virtual ClientResult ListMessages(string threadId, int? limit = null, string order = null, string after = null, string before = null, RequestOptions options = null) + public virtual ClientResult GetMessages(string threadId, int? limit, string order, string after, string before, RequestOptions options) { - Argument.AssertNotNull(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - using PipelineMessage message = CreateListMessagesRequest(threadId, limit, order, after, before, options); + using PipelineMessage message = CreateGetMessagesRequest(threadId, limit, order, after, before, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } - public virtual async Task ListMessagesAsync(string threadId, int? limit = null, string order = null, string after = null, string before = null, RequestOptions options = null) + public virtual async Task GetMessagesAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options) { - Argument.AssertNotNull(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - using PipelineMessage message = CreateListMessagesRequest(threadId, limit, order, after, before, options); + using PipelineMessage message = CreateGetMessagesRequest(threadId, limit, order, after, before, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } } diff --git a/src/Generated/InternalAssistantRunClient.RestClient.cs b/src/Generated/InternalAssistantRunClient.RestClient.cs index ae66bbf15..2474836b9 100644 --- a/src/Generated/InternalAssistantRunClient.RestClient.cs +++ b/src/Generated/InternalAssistantRunClient.RestClient.cs @@ -15,7 +15,7 @@ internal partial class InternalAssistantRunClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal virtual PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent content, string accept, RequestOptions options) + internal virtual PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -25,7 +25,7 @@ internal virtual PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent c uri.Reset(_endpoint); uri.AppendPath("/threads/runs", false); request.Uri = uri.ToUri(); - request.Headers.Set("Accept", accept); + request.Headers.Set("Accept", "application/json, text/event-stream"); request.Headers.Set("OpenAI-Beta", "assistants=v2"); request.Headers.Set("Content-Type", "application/json"); request.Content = content; @@ -33,7 +33,7 @@ internal virtual PipelineMessage CreateCreateThreadAndRunRequest(BinaryContent c return message; } - internal virtual PipelineMessage CreateCreateRunRequest(string threadId, BinaryContent content, string accept, IEnumerable include, RequestOptions options) + internal virtual PipelineMessage CreateCreateRunRequest(string threadId, BinaryContent content, IEnumerable include, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -49,7 +49,7 @@ internal virtual PipelineMessage CreateCreateRunRequest(string threadId, BinaryC uri.AppendQueryDelimited("include[]", include, ",", null, true); } request.Uri = uri.ToUri(); - request.Headers.Set("Accept", accept); + request.Headers.Set("Accept", "application/json, text/event-stream"); request.Headers.Set("OpenAI-Beta", "assistants=v2"); request.Headers.Set("Content-Type", "application/json"); request.Content = content; @@ -57,7 +57,7 @@ internal virtual PipelineMessage CreateCreateRunRequest(string threadId, BinaryC return message; } - internal virtual PipelineMessage CreateListRunsRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateGetRunsRequest(string threadId, int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -151,7 +151,7 @@ internal virtual PipelineMessage CreateCancelRunRequest(string threadId, string return message; } - internal virtual PipelineMessage CreateSubmitToolOutputsToRunRequest(string threadId, string runId, BinaryContent content, string accept, RequestOptions options) + internal virtual PipelineMessage CreateSubmitToolOutputsToRunRequest(string threadId, string runId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -165,7 +165,7 @@ internal virtual PipelineMessage CreateSubmitToolOutputsToRunRequest(string thre uri.AppendPath(runId, true); uri.AppendPath("/submit_tool_outputs", false); request.Uri = uri.ToUri(); - request.Headers.Set("Accept", accept); + request.Headers.Set("Accept", "application/json, text/event-stream"); request.Headers.Set("OpenAI-Beta", "assistants=v2"); request.Headers.Set("Content-Type", "application/json"); request.Content = content; @@ -173,7 +173,7 @@ internal virtual PipelineMessage CreateSubmitToolOutputsToRunRequest(string thre return message; } - internal virtual PipelineMessage CreateListRunStepsRequest(string threadId, string runId, int? limit, string order, string after, string before, IEnumerable include, RequestOptions options) + internal virtual PipelineMessage CreateGetRunStepsRequest(string threadId, string runId, int? limit, string order, string after, string before, IEnumerable include, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/InternalAssistantRunClient.cs b/src/Generated/InternalAssistantRunClient.cs index d976b6417..5081352c2 100644 --- a/src/Generated/InternalAssistantRunClient.cs +++ b/src/Generated/InternalAssistantRunClient.cs @@ -26,19 +26,19 @@ internal InternalAssistantRunClient(ClientPipeline pipeline, Uri endpoint) public ClientPipeline Pipeline { get; } - public virtual ClientResult ListRuns(string threadId, int? limit = null, string order = null, string after = null, string before = null, RequestOptions options = null) + public virtual ClientResult GetRuns(string threadId, int? limit, string order, string after, string before, RequestOptions options) { - Argument.AssertNotNull(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - using PipelineMessage message = CreateListRunsRequest(threadId, limit, order, after, before, options); + using PipelineMessage message = CreateGetRunsRequest(threadId, limit, order, after, before, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); } - public virtual async Task ListRunsAsync(string threadId, int? limit = null, string order = null, string after = null, string before = null, RequestOptions options = null) + public virtual async Task GetRunsAsync(string threadId, int? limit, string order, string after, string before, RequestOptions options) { - Argument.AssertNotNull(threadId, nameof(threadId)); + Argument.AssertNotNullOrEmpty(threadId, nameof(threadId)); - using PipelineMessage message = CreateListRunsRequest(threadId, limit, order, after, before, options); + using PipelineMessage message = CreateGetRunsRequest(threadId, limit, order, after, before, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } } diff --git a/src/Generated/InternalUploadsClient.cs b/src/Generated/InternalUploadsClient.cs index 63059cd66..7f851752c 100644 --- a/src/Generated/InternalUploadsClient.cs +++ b/src/Generated/InternalUploadsClient.cs @@ -61,7 +61,7 @@ public virtual async Task> CreateUploadAsync(Intern public virtual ClientResult AddUploadPart(string uploadId, BinaryContent content, string contentType, RequestOptions options = null) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateAddUploadPartRequest(uploadId, content, contentType, options); @@ -70,7 +70,7 @@ public virtual ClientResult AddUploadPart(string uploadId, BinaryContent content public virtual async Task AddUploadPartAsync(string uploadId, BinaryContent content, string contentType, RequestOptions options = null) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateAddUploadPartRequest(uploadId, content, contentType, options); @@ -79,7 +79,7 @@ public virtual async Task AddUploadPartAsync(string uploadId, Bina public virtual ClientResult CompleteUpload(string uploadId, BinaryContent content, RequestOptions options = null) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateCompleteUploadRequest(uploadId, content, options); @@ -88,7 +88,7 @@ public virtual ClientResult CompleteUpload(string uploadId, BinaryContent conten public virtual async Task CompleteUploadAsync(string uploadId, BinaryContent content, RequestOptions options = null) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); Argument.AssertNotNull(content, nameof(content)); using PipelineMessage message = CreateCompleteUploadRequest(uploadId, content, options); @@ -97,7 +97,7 @@ public virtual async Task CompleteUploadAsync(string uploadId, Bin public virtual ClientResult CompleteUpload(string uploadId, InternalCompleteUploadRequest requestBody, CancellationToken cancellationToken = default) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); Argument.AssertNotNull(requestBody, nameof(requestBody)); ClientResult result = CompleteUpload(uploadId, requestBody, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); @@ -106,7 +106,7 @@ public virtual ClientResult CompleteUpload(string uploadId, Inte public virtual async Task> CompleteUploadAsync(string uploadId, InternalCompleteUploadRequest requestBody, CancellationToken cancellationToken = default) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); Argument.AssertNotNull(requestBody, nameof(requestBody)); ClientResult result = await CompleteUploadAsync(uploadId, requestBody, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); @@ -115,7 +115,7 @@ public virtual async Task> CompleteUploadAsync(stri public virtual ClientResult CancelUpload(string uploadId, RequestOptions options) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); using PipelineMessage message = CreateCancelUploadRequest(uploadId, options); return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); @@ -123,7 +123,7 @@ public virtual ClientResult CancelUpload(string uploadId, RequestOptions options public virtual async Task CancelUploadAsync(string uploadId, RequestOptions options) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); using PipelineMessage message = CreateCancelUploadRequest(uploadId, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); @@ -131,7 +131,7 @@ public virtual async Task CancelUploadAsync(string uploadId, Reque public virtual ClientResult CancelUpload(string uploadId, CancellationToken cancellationToken = default) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); ClientResult result = CancelUpload(uploadId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null); return ClientResult.FromValue((InternalUpload)result, result.GetRawResponse()); @@ -139,7 +139,7 @@ public virtual ClientResult CancelUpload(string uploadId, Cancel public virtual async Task> CancelUploadAsync(string uploadId, CancellationToken cancellationToken = default) { - Argument.AssertNotNull(uploadId, nameof(uploadId)); + Argument.AssertNotNullOrEmpty(uploadId, nameof(uploadId)); ClientResult result = await CancelUploadAsync(uploadId, cancellationToken.CanBeCanceled ? new RequestOptions { CancellationToken = cancellationToken } : null).ConfigureAwait(false); return ClientResult.FromValue((InternalUpload)result, result.GetRawResponse()); diff --git a/src/Generated/Models/AcceptHeaderValue.cs b/src/Generated/Models/AcceptHeaderValue.cs deleted file mode 100644 index ce043dc26..000000000 --- a/src/Generated/Models/AcceptHeaderValue.cs +++ /dev/null @@ -1,43 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; - -namespace OpenAI -{ - internal readonly partial struct AcceptHeaderValue : IEquatable - { - private readonly string _value; - private const string ApplicationJsonValue = "application/json"; - private const string TextEventStreamValue = "text/event-stream"; - - public AcceptHeaderValue(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static AcceptHeaderValue ApplicationJson { get; } = new AcceptHeaderValue(ApplicationJsonValue); - - public static AcceptHeaderValue TextEventStream { get; } = new AcceptHeaderValue(TextEventStreamValue); - - public static bool operator ==(AcceptHeaderValue left, AcceptHeaderValue right) => left.Equals(right); - - public static bool operator !=(AcceptHeaderValue left, AcceptHeaderValue right) => !left.Equals(right); - - public static implicit operator AcceptHeaderValue(string value) => new AcceptHeaderValue(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is AcceptHeaderValue other && Equals(other); - - public bool Equals(AcceptHeaderValue 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/Assistant.Serialization.cs b/src/Generated/Models/Assistant.Serialization.cs index f94ab4875..8a605b693 100644 --- a/src/Generated/Models/Assistant.Serialization.cs +++ b/src/Generated/Models/Assistant.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { public partial class Assistant : IJsonModel { - internal Assistant() + internal Assistant() : this(null, default, null, null, null, null, null, null, null, default, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,6 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("instructions"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); @@ -97,28 +99,22 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("tool_resources"u8); writer.WriteObjectValue(ToolResources, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + writer.WritePropertyName(item.Key); + if (item.Value == null) { - writer.WritePropertyName(item.Key); - if (item.Value == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item.Value); + writer.WriteNullValue(); + continue; } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"u8); + writer.WriteStringValue(item.Value); } + writer.WriteEndObject(); } if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) { @@ -128,7 +124,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { @@ -140,6 +136,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("top_p"u8); writer.WriteNumberValue(NucleusSamplingFactor.Value); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -163,6 +160,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit Assistant IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual Assistant JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -190,7 +188,7 @@ internal static Assistant DeserializeAssistant(JsonElement element, ModelReaderW ToolResources toolResources = default; IReadOnlyDictionary metadata = default; float? temperature = default; - InternalAssistantObjectObject @object = default; + string @object = default; AssistantResponseFormat responseFormat = default; float? nucleusSamplingFactor = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -295,7 +293,7 @@ internal static Assistant DeserializeAssistant(JsonElement element, ModelReaderW } if (prop.NameEquals("object"u8)) { - @object = new InternalAssistantObjectObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("response_format"u8)) @@ -318,6 +316,7 @@ internal static Assistant DeserializeAssistant(JsonElement element, ModelReaderW nucleusSamplingFactor = prop.Value.GetSingle(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new Assistant( @@ -339,13 +338,14 @@ internal static Assistant DeserializeAssistant(JsonElement element, ModelReaderW BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(Assistant)} does not support writing '{options.Format}' format."); } @@ -353,6 +353,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions Assistant IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual Assistant PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -369,21 +370,5 @@ protected virtual Assistant PersistableModelCreateCore(BinaryData data, ModelRea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(Assistant assistant) - { - if (assistant == null) - { - return null; - } - return BinaryContent.Create(assistant, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator Assistant(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAssistant(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/Assistant.cs b/src/Generated/Models/Assistant.cs index f5c71e82e..6f56133aa 100644 --- a/src/Generated/Models/Assistant.cs +++ b/src/Generated/Models/Assistant.cs @@ -24,17 +24,18 @@ internal Assistant(string id, DateTimeOffset createdAt, string name, string desc Metadata = new ChangeTrackingDictionary(); } - internal Assistant(string id, DateTimeOffset createdAt, string name, string description, string model, string instructions, IReadOnlyList tools, ToolResources toolResources, IReadOnlyDictionary metadata, float? temperature, InternalAssistantObjectObject @object, AssistantResponseFormat responseFormat, float? nucleusSamplingFactor, IDictionary additionalBinaryDataProperties) + internal Assistant(string id, DateTimeOffset createdAt, string name, string description, string model, string instructions, IReadOnlyList tools, ToolResources toolResources, IReadOnlyDictionary metadata, float? temperature, string @object, AssistantResponseFormat responseFormat, float? nucleusSamplingFactor, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; CreatedAt = createdAt; Name = name; Description = description; Model = model; Instructions = instructions; - Tools = tools; + Tools = tools ?? new ChangeTrackingList(); ToolResources = toolResources; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); Temperature = temperature; Object = @object; ResponseFormat = responseFormat; diff --git a/src/Generated/Models/AssistantChatMessage.Serialization.cs b/src/Generated/Models/AssistantChatMessage.Serialization.cs index b8e47bbaa..5d1387d9d 100644 --- a/src/Generated/Models/AssistantChatMessage.Serialization.cs +++ b/src/Generated/Models/AssistantChatMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,7 @@ namespace OpenAI.Chat { public partial class AssistantChatMessage : IJsonModel { + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -55,6 +56,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri AssistantChatMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (AssistantChatMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -141,6 +143,7 @@ internal static AssistantChatMessage DeserializeAssistantChatMessage(JsonElement outputAudioReference = ChatOutputAudioReference.DeserializeChatOutputAudioReference(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantChatMessage( @@ -156,13 +159,14 @@ internal static AssistantChatMessage DeserializeAssistantChatMessage(JsonElement BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AssistantChatMessage)} does not support writing '{options.Format}' format."); } @@ -170,6 +174,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AssistantChatMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (AssistantChatMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -186,21 +191,5 @@ protected override ChatMessage PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AssistantChatMessage assistantChatMessage) - { - if (assistantChatMessage == null) - { - return null; - } - return BinaryContent.Create(assistantChatMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AssistantChatMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAssistantChatMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AssistantChatMessage.cs b/src/Generated/Models/AssistantChatMessage.cs index ef3c5688f..2ffaddcb1 100644 --- a/src/Generated/Models/AssistantChatMessage.cs +++ b/src/Generated/Models/AssistantChatMessage.cs @@ -4,16 +4,22 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Chat { public partial class AssistantChatMessage : ChatMessage { + internal AssistantChatMessage() : this(null, ChatMessageRole.Assistant, null, null, null, null, null, null) + { + } + internal AssistantChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties, string refusal, string participantName, IList toolCalls, ChatFunctionCall functionCall, ChatOutputAudioReference outputAudioReference) : base(content, role, additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Refusal = refusal; ParticipantName = participantName; - ToolCalls = toolCalls; + ToolCalls = toolCalls ?? new ChangeTrackingList(); FunctionCall = functionCall; OutputAudioReference = outputAudioReference; } diff --git a/src/Generated/Models/AssistantCreationOptions.Serialization.cs b/src/Generated/Models/AssistantCreationOptions.Serialization.cs index 0af1b78b6..fcb8c382d 100644 --- a/src/Generated/Models/AssistantCreationOptions.Serialization.cs +++ b/src/Generated/Models/AssistantCreationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.Chat; @@ -14,6 +14,10 @@ namespace OpenAI.Assistants { public partial class AssistantCreationOptions : IJsonModel { + public AssistantCreationOptions() : this(null, null, null, null, default, null, null, null, null, default, default, null) + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -21,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -99,6 +104,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reasoning_effort"u8); writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -122,6 +128,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit AssistantCreationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual AssistantCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -273,6 +280,7 @@ internal static AssistantCreationOptions DeserializeAssistantCreationOptions(Jso reasoningEffortLevel = new ChatReasoningEffortLevel(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantCreationOptions( @@ -292,13 +300,14 @@ internal static AssistantCreationOptions DeserializeAssistantCreationOptions(Jso BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AssistantCreationOptions)} does not support writing '{options.Format}' format."); } @@ -306,6 +315,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AssistantCreationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual AssistantCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -322,21 +332,5 @@ protected virtual AssistantCreationOptions PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AssistantCreationOptions assistantCreationOptions) - { - if (assistantCreationOptions == null) - { - return null; - } - return BinaryContent.Create(assistantCreationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AssistantCreationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAssistantCreationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AssistantCreationOptions.cs b/src/Generated/Models/AssistantCreationOptions.cs index 86a5307cf..8c2b46c8a 100644 --- a/src/Generated/Models/AssistantCreationOptions.cs +++ b/src/Generated/Models/AssistantCreationOptions.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; using OpenAI.Chat; namespace OpenAI.Assistants @@ -14,13 +15,14 @@ public partial class AssistantCreationOptions internal AssistantCreationOptions(string name, string description, string instructions, IDictionary metadata, float? temperature, string model, IList tools, ToolResources toolResources, AssistantResponseFormat responseFormat, float? nucleusSamplingFactor, ChatReasoningEffortLevel? reasoningEffortLevel, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Name = name; Description = description; Instructions = instructions; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); Temperature = temperature; Model = model; - Tools = tools; + Tools = tools ?? new ChangeTrackingList(); ToolResources = toolResources; ResponseFormat = responseFormat; NucleusSamplingFactor = nucleusSamplingFactor; diff --git a/src/Generated/Models/AssistantDeletionResult.Serialization.cs b/src/Generated/Models/AssistantDeletionResult.Serialization.cs index 82226bb17..67c0f98de 100644 --- a/src/Generated/Models/AssistantDeletionResult.Serialization.cs +++ b/src/Generated/Models/AssistantDeletionResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,8 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit AssistantDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual AssistantDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,7 +91,7 @@ internal static AssistantDeletionResult DeserializeAssistantDeletionResult(JsonE } bool deleted = default; string assistantId = default; - InternalDeleteAssistantResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -104,9 +107,10 @@ internal static AssistantDeletionResult DeserializeAssistantDeletionResult(JsonE } if (prop.NameEquals("object"u8)) { - @object = new InternalDeleteAssistantResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantDeletionResult(deleted, assistantId, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static AssistantDeletionResult DeserializeAssistantDeletionResult(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AssistantDeletionResult)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AssistantDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual AssistantDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual AssistantDeletionResult PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AssistantDeletionResult assistantDeletionResult) - { - if (assistantDeletionResult == null) - { - return null; - } - return BinaryContent.Create(assistantDeletionResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AssistantDeletionResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAssistantDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AssistantDeletionResult.cs b/src/Generated/Models/AssistantDeletionResult.cs index 73bc08fa0..09a870ee9 100644 --- a/src/Generated/Models/AssistantDeletionResult.cs +++ b/src/Generated/Models/AssistantDeletionResult.cs @@ -17,7 +17,7 @@ internal AssistantDeletionResult(bool deleted, string assistantId) AssistantId = assistantId; } - internal AssistantDeletionResult(bool deleted, string assistantId, InternalDeleteAssistantResponseObject @object, IDictionary additionalBinaryDataProperties) + internal AssistantDeletionResult(bool deleted, string assistantId, string @object, IDictionary additionalBinaryDataProperties) { Deleted = deleted; AssistantId = assistantId; diff --git a/src/Generated/Models/AssistantModificationOptions.Serialization.cs b/src/Generated/Models/AssistantModificationOptions.Serialization.cs index 3aaf61c60..ba1e226b3 100644 --- a/src/Generated/Models/AssistantModificationOptions.Serialization.cs +++ b/src/Generated/Models/AssistantModificationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.Chat; @@ -21,6 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -99,6 +100,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reasoning_effort"u8); writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -122,6 +124,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit AssistantModificationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual AssistantModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -273,6 +276,7 @@ internal static AssistantModificationOptions DeserializeAssistantModificationOpt reasoningEffortLevel = new ChatReasoningEffortLevel(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantModificationOptions( @@ -292,13 +296,14 @@ internal static AssistantModificationOptions DeserializeAssistantModificationOpt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AssistantModificationOptions)} does not support writing '{options.Format}' format."); } @@ -306,6 +311,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AssistantModificationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual AssistantModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -322,21 +328,5 @@ protected virtual AssistantModificationOptions PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AssistantModificationOptions assistantModificationOptions) - { - if (assistantModificationOptions == null) - { - return null; - } - return BinaryContent.Create(assistantModificationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AssistantModificationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAssistantModificationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AssistantModificationOptions.cs b/src/Generated/Models/AssistantModificationOptions.cs index ddbda2bb9..33a2eefb0 100644 --- a/src/Generated/Models/AssistantModificationOptions.cs +++ b/src/Generated/Models/AssistantModificationOptions.cs @@ -13,21 +13,20 @@ public partial class AssistantModificationOptions { private protected IDictionary _additionalBinaryDataProperties; - public AssistantModificationOptions() + public AssistantModificationOptions() : this(null, null, null, null, default, null, null, null, null, default, default, null) { - Metadata = new ChangeTrackingDictionary(); - DefaultTools = new ChangeTrackingList(); } internal AssistantModificationOptions(string name, string description, string instructions, IDictionary metadata, float? temperature, string model, IList defaultTools, ToolResources toolResources, AssistantResponseFormat responseFormat, float? nucleusSamplingFactor, ChatReasoningEffortLevel? reasoningEffortLevel, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Name = name; Description = description; Instructions = instructions; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); Temperature = temperature; Model = model; - DefaultTools = defaultTools; + DefaultTools = defaultTools ?? new ChangeTrackingList(); ToolResources = toolResources; ResponseFormat = responseFormat; NucleusSamplingFactor = nucleusSamplingFactor; diff --git a/src/Generated/Models/AssistantResponseFormat.Serialization.cs b/src/Generated/Models/AssistantResponseFormat.Serialization.cs index cbad6d8a5..e0a3a8777 100644 --- a/src/Generated/Models/AssistantResponseFormat.Serialization.cs +++ b/src/Generated/Models/AssistantResponseFormat.Serialization.cs @@ -3,19 +3,21 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Assistants { + [PersistableModelProxy(typeof(InternalUnknownDotNetAssistantResponseFormat))] public partial class AssistantResponseFormat : IJsonModel { internal AssistantResponseFormat() { } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -26,8 +28,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -49,6 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } } + [Experimental("OPENAI001")] protected virtual AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -60,18 +64,20 @@ protected virtual AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader return DeserializeAssistantResponseFormat(document.RootElement, options); } + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support writing '{options.Format}' format."); } } + [Experimental("OPENAI001")] protected virtual AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -86,21 +92,5 @@ protected virtual AssistantResponseFormat PersistableModelCreateCore(BinaryData throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{options.Format}' format."); } } - - public static implicit operator BinaryContent(AssistantResponseFormat assistantResponseFormat) - { - if (assistantResponseFormat == null) - { - return null; - } - return BinaryContent.Create(assistantResponseFormat, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AssistantResponseFormat(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAssistantResponseFormat(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AssistantResponseFormat.cs b/src/Generated/Models/AssistantResponseFormat.cs index 77a152a39..f6f06c2a9 100644 --- a/src/Generated/Models/AssistantResponseFormat.cs +++ b/src/Generated/Models/AssistantResponseFormat.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI.Internal; namespace OpenAI.Assistants { @@ -11,18 +12,18 @@ public partial class AssistantResponseFormat { private protected IDictionary _additionalBinaryDataProperties; - private protected AssistantResponseFormat(string @type) + private protected AssistantResponseFormat(InternalResponseFormatType kind) { - Type = @type; + Kind = kind; } - internal AssistantResponseFormat(string @type, IDictionary additionalBinaryDataProperties) + internal AssistantResponseFormat(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalResponseFormatType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/AssistantThread.Serialization.cs b/src/Generated/Models/AssistantThread.Serialization.cs index 5d7239b66..6dd804fd4 100644 --- a/src/Generated/Models/AssistantThread.Serialization.cs +++ b/src/Generated/Models/AssistantThread.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { public partial class AssistantThread : IJsonModel { - internal AssistantThread() + internal AssistantThread() : this(null, default, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,33 +42,27 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("created_at"u8); writer.WriteNumberValue(CreatedAt, "U"); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + writer.WritePropertyName(item.Key); + if (item.Value == null) { - writer.WritePropertyName(item.Key); - if (item.Value == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item.Value); + writer.WriteNullValue(); + continue; } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"u8); + writer.WriteStringValue(item.Value); } + writer.WriteEndObject(); } if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("tool_resources") != true) { @@ -81,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("tool_resources"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -104,6 +100,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit AssistantThread IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual AssistantThread JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -124,7 +121,7 @@ internal static AssistantThread DeserializeAssistantThread(JsonElement element, string id = default; DateTimeOffset createdAt = default; IReadOnlyDictionary metadata = default; - InternalThreadObjectObject @object = default; + string @object = default; ToolResources toolResources = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -163,7 +160,7 @@ internal static AssistantThread DeserializeAssistantThread(JsonElement element, } if (prop.NameEquals("object"u8)) { - @object = new InternalThreadObjectObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("tool_resources"u8)) @@ -176,6 +173,7 @@ internal static AssistantThread DeserializeAssistantThread(JsonElement element, toolResources = ToolResources.DeserializeToolResources(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AssistantThread( @@ -189,13 +187,14 @@ internal static AssistantThread DeserializeAssistantThread(JsonElement element, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AssistantThread)} does not support writing '{options.Format}' format."); } @@ -203,6 +202,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AssistantThread IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual AssistantThread PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -219,21 +219,5 @@ protected virtual AssistantThread PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AssistantThread assistantThread) - { - if (assistantThread == null) - { - return null; - } - return BinaryContent.Create(assistantThread, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AssistantThread(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAssistantThread(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AssistantThread.cs b/src/Generated/Models/AssistantThread.cs index c30482a99..e31a015af 100644 --- a/src/Generated/Models/AssistantThread.cs +++ b/src/Generated/Models/AssistantThread.cs @@ -20,11 +20,12 @@ internal AssistantThread(string id, DateTimeOffset createdAt, ToolResources tool ToolResources = toolResources; } - internal AssistantThread(string id, DateTimeOffset createdAt, IReadOnlyDictionary metadata, InternalThreadObjectObject @object, ToolResources toolResources, IDictionary additionalBinaryDataProperties) + internal AssistantThread(string id, DateTimeOffset createdAt, IReadOnlyDictionary metadata, string @object, ToolResources toolResources, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; CreatedAt = createdAt; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); Object = @object; ToolResources = toolResources; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/AudioTokenLogProbabilityDetails.Serialization.cs b/src/Generated/Models/AudioTokenLogProbabilityDetails.Serialization.cs new file mode 100644 index 000000000..33e5a9cd7 --- /dev/null +++ b/src/Generated/Models/AudioTokenLogProbabilityDetails.Serialization.cs @@ -0,0 +1,170 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Audio +{ + public partial class AudioTokenLogProbabilityDetails : IJsonModel + { + internal AudioTokenLogProbabilityDetails() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(AudioTokenLogProbabilityDetails)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("token") != true) + { + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); + } + if (_additionalBinaryDataProperties?.ContainsKey("logprob") != true) + { + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(LogProbability); + } + if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (byte item in Utf8Bytes.Span) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + AudioTokenLogProbabilityDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual AudioTokenLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(AudioTokenLogProbabilityDetails)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeAudioTokenLogProbabilityDetails(document.RootElement, options); + } + + internal static AudioTokenLogProbabilityDetails DeserializeAudioTokenLogProbabilityDetails(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string token = default; + float logProbability = default; + ReadOnlyMemory utf8Bytes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("token"u8)) + { + token = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprob"u8)) + { + logProbability = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + int index = 0; + byte[] array = new byte[prop.Value.GetArrayLength()]; + foreach (var item in prop.Value.EnumerateArray()) + { + array[index] = item.GetByte(); + index++; + } + utf8Bytes = new ReadOnlyMemory(array); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new AudioTokenLogProbabilityDetails(token, logProbability, utf8Bytes, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(AudioTokenLogProbabilityDetails)} does not support writing '{options.Format}' format."); + } + } + + AudioTokenLogProbabilityDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual AudioTokenLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeAudioTokenLogProbabilityDetails(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(AudioTokenLogProbabilityDetails)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/AudioTokenLogProbabilityDetails.cs b/src/Generated/Models/AudioTokenLogProbabilityDetails.cs new file mode 100644 index 000000000..9da3683e7 --- /dev/null +++ b/src/Generated/Models/AudioTokenLogProbabilityDetails.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Audio +{ + public partial class AudioTokenLogProbabilityDetails + { + private protected IDictionary _additionalBinaryDataProperties; + + internal AudioTokenLogProbabilityDetails(string token, float logProbability, ReadOnlyMemory utf8Bytes) + { + Token = token; + LogProbability = logProbability; + Utf8Bytes = utf8Bytes; + } + + internal AudioTokenLogProbabilityDetails(string token, float logProbability, ReadOnlyMemory utf8Bytes, IDictionary additionalBinaryDataProperties) + { + Token = token; + LogProbability = logProbability; + Utf8Bytes = utf8Bytes; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Token { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/AudioTranscription.Serialization.cs b/src/Generated/Models/AudioTranscription.Serialization.cs index a77693edc..dcbbaeb09 100644 --- a/src/Generated/Models/AudioTranscription.Serialization.cs +++ b/src/Generated/Models/AudioTranscription.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Audio { public partial class AudioTranscription : IJsonModel { - internal AudioTranscription() + internal AudioTranscription() : this(null, null, null, null, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(Words) && _additionalBinaryDataProperties?.ContainsKey("words") != true) { writer.WritePropertyName("words"u8); @@ -51,6 +53,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(Segments) && _additionalBinaryDataProperties?.ContainsKey("segments") != true) { writer.WritePropertyName("segments"u8); @@ -64,13 +67,24 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("task") != true) { writer.WritePropertyName("task"u8); - writer.WriteStringValue(Task.ToString()); + writer.WriteStringValue(Task); } if (_additionalBinaryDataProperties?.ContainsKey("duration") != true) { writer.WritePropertyName("duration"u8); writer.WriteNumberValue(Convert.ToDouble(Duration.Value.ToString("s\\.FFF"))); } + if (Optional.IsCollectionDefined(TranscriptionTokenLogProbabilities) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) + { + writer.WritePropertyName("logprobs"u8); + writer.WriteStartArray(); + foreach (AudioTokenLogProbabilityDetails item in TranscriptionTokenLogProbabilities) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -94,6 +108,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit AudioTranscription IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual AudioTranscription JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -115,8 +130,9 @@ internal static AudioTranscription DeserializeAudioTranscription(JsonElement ele string text = default; IReadOnlyList words = default; IReadOnlyList segments = default; - InternalCreateTranscriptionResponseVerboseJsonTask task = default; + string task = default; TimeSpan? duration = default; + IReadOnlyList transcriptionTokenLogProbabilities = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -160,7 +176,7 @@ internal static AudioTranscription DeserializeAudioTranscription(JsonElement ele } if (prop.NameEquals("task"u8)) { - task = new InternalCreateTranscriptionResponseVerboseJsonTask(prop.Value.GetString()); + task = prop.Value.GetString(); continue; } if (prop.NameEquals("duration"u8)) @@ -168,6 +184,21 @@ internal static AudioTranscription DeserializeAudioTranscription(JsonElement ele duration = TimeSpan.FromSeconds(prop.Value.GetDouble()); continue; } + if (prop.NameEquals("logprobs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(AudioTokenLogProbabilityDetails.DeserializeAudioTokenLogProbabilityDetails(item, options)); + } + transcriptionTokenLogProbabilities = array; + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AudioTranscription( @@ -177,18 +208,20 @@ internal static AudioTranscription DeserializeAudioTranscription(JsonElement ele segments ?? new ChangeTrackingList(), task, duration, + transcriptionTokenLogProbabilities ?? new ChangeTrackingList(), additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AudioTranscription)} does not support writing '{options.Format}' format."); } @@ -196,6 +229,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AudioTranscription IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual AudioTranscription PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -212,21 +246,5 @@ protected virtual AudioTranscription PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AudioTranscription audioTranscription) - { - if (audioTranscription == null) - { - return null; - } - return BinaryContent.Create(audioTranscription, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AudioTranscription(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAudioTranscription(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AudioTranscription.cs b/src/Generated/Models/AudioTranscription.cs index 687b2f3cb..1e3557696 100644 --- a/src/Generated/Models/AudioTranscription.cs +++ b/src/Generated/Models/AudioTranscription.cs @@ -19,16 +19,19 @@ internal AudioTranscription(string language, string text, TimeSpan? duration) Words = new ChangeTrackingList(); Segments = new ChangeTrackingList(); Duration = duration; + TranscriptionTokenLogProbabilities = new ChangeTrackingList(); } - internal AudioTranscription(string language, string text, IReadOnlyList words, IReadOnlyList segments, InternalCreateTranscriptionResponseVerboseJsonTask task, TimeSpan? duration, IDictionary additionalBinaryDataProperties) + internal AudioTranscription(string language, string text, IReadOnlyList words, IReadOnlyList segments, string task, TimeSpan? duration, IReadOnlyList transcriptionTokenLogProbabilities, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Language = language; Text = text; - Words = words; - Segments = segments; + Words = words ?? new ChangeTrackingList(); + Segments = segments ?? new ChangeTrackingList(); Task = task; Duration = duration; + TranscriptionTokenLogProbabilities = transcriptionTokenLogProbabilities ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs b/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs index d86d686df..706b5a2a4 100644 --- a/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs +++ b/src/Generated/Models/AudioTranscriptionOptions.Serialization.cs @@ -3,11 +3,12 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; +using OpenAI.Realtime; namespace OpenAI.Audio { @@ -20,6 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -47,6 +49,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("temperature"u8); writer.WriteNumberValue(Temperature.Value); } + if (Optional.IsDefined(ChunkingStrategy) && _additionalBinaryDataProperties?.ContainsKey("chunking_strategy") != true) + { + writer.WritePropertyName("chunking_strategy"u8); + writer.WriteObjectValue(ChunkingStrategy, options); + } if (_additionalBinaryDataProperties?.ContainsKey("file") != true) { writer.WritePropertyName("file"u8); @@ -79,6 +86,22 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + if (Optional.IsDefined(Stream) && _additionalBinaryDataProperties?.ContainsKey("stream") != true) + { + writer.WritePropertyName("stream"u8); + writer.WriteBooleanValue(Stream.Value); + } + if (Optional.IsCollectionDefined(InternalInclude) && _additionalBinaryDataProperties?.ContainsKey("include[]") != true) + { + writer.WritePropertyName("include[]"u8); + writer.WriteStartArray(); + foreach (InternalTranscriptionInclude item in InternalInclude) + { + writer.WriteStringValue(item.ToString()); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -102,6 +125,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit AudioTranscriptionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual AudioTranscriptionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -123,9 +147,12 @@ internal static AudioTranscriptionOptions DeserializeAudioTranscriptionOptions(J string prompt = default; AudioTranscriptionFormat? responseFormat = default; float? temperature = default; + InternalVadConfig chunkingStrategy = default; BinaryData @file = default; InternalCreateTranscriptionRequestModel model = default; IList internalTimestampGranularities = default; + bool? stream = default; + IList internalInclude = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -157,6 +184,16 @@ internal static AudioTranscriptionOptions DeserializeAudioTranscriptionOptions(J temperature = prop.Value.GetSingle(); continue; } + if (prop.NameEquals("chunking_strategy"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + chunkingStrategy = null; + continue; + } + chunkingStrategy = InternalVadConfig.DeserializeInternalVadConfig(prop.Value, options); + continue; + } if (prop.NameEquals("file"u8)) { @file = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); @@ -188,6 +225,31 @@ internal static AudioTranscriptionOptions DeserializeAudioTranscriptionOptions(J internalTimestampGranularities = array; continue; } + if (prop.NameEquals("stream"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + stream = null; + continue; + } + stream = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("include[]"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(new InternalTranscriptionInclude(item.GetString())); + } + internalInclude = array; + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AudioTranscriptionOptions( @@ -195,21 +257,25 @@ internal static AudioTranscriptionOptions DeserializeAudioTranscriptionOptions(J prompt, responseFormat, temperature, + chunkingStrategy, @file, model, internalTimestampGranularities ?? new ChangeTrackingList(), + stream, + internalInclude ?? new ChangeTrackingList(), additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AudioTranscriptionOptions)} does not support writing '{options.Format}' format."); } @@ -217,6 +283,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AudioTranscriptionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual AudioTranscriptionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -233,21 +300,5 @@ protected virtual AudioTranscriptionOptions PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AudioTranscriptionOptions audioTranscriptionOptions) - { - if (audioTranscriptionOptions == null) - { - return null; - } - return BinaryContent.Create(audioTranscriptionOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AudioTranscriptionOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAudioTranscriptionOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AudioTranscriptionOptions.cs b/src/Generated/Models/AudioTranscriptionOptions.cs index bad6872f1..5ba1b6b3f 100644 --- a/src/Generated/Models/AudioTranscriptionOptions.cs +++ b/src/Generated/Models/AudioTranscriptionOptions.cs @@ -4,6 +4,8 @@ using System; using System.Collections.Generic; +using OpenAI; +using OpenAI.Realtime; namespace OpenAI.Audio { @@ -11,15 +13,19 @@ public partial class AudioTranscriptionOptions { private protected IDictionary _additionalBinaryDataProperties; - internal AudioTranscriptionOptions(string language, string prompt, AudioTranscriptionFormat? responseFormat, float? temperature, BinaryData @file, InternalCreateTranscriptionRequestModel model, IList internalTimestampGranularities, IDictionary additionalBinaryDataProperties) + internal AudioTranscriptionOptions(string language, string prompt, AudioTranscriptionFormat? responseFormat, float? temperature, InternalVadConfig chunkingStrategy, BinaryData @file, InternalCreateTranscriptionRequestModel model, IList internalTimestampGranularities, bool? stream, IList internalInclude, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Language = language; Prompt = prompt; ResponseFormat = responseFormat; Temperature = temperature; + ChunkingStrategy = chunkingStrategy; File = @file; Model = model; - InternalTimestampGranularities = internalTimestampGranularities; + InternalTimestampGranularities = internalTimestampGranularities ?? new ChangeTrackingList(); + Stream = stream; + InternalInclude = internalInclude ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -31,6 +37,8 @@ internal AudioTranscriptionOptions(string language, string prompt, AudioTranscri public float? Temperature { get; set; } + internal InternalVadConfig ChunkingStrategy { get; set; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/AudioTranslation.Serialization.cs b/src/Generated/Models/AudioTranslation.Serialization.cs index 109b0e848..339027a21 100644 --- a/src/Generated/Models/AudioTranslation.Serialization.cs +++ b/src/Generated/Models/AudioTranslation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Audio { public partial class AudioTranslation : IJsonModel { - internal AudioTranslation() + internal AudioTranslation() : this(null, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(Segments) && _additionalBinaryDataProperties?.ContainsKey("segments") != true) { writer.WritePropertyName("segments"u8); @@ -54,13 +56,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("task") != true) { writer.WritePropertyName("task"u8); - writer.WriteStringValue(Task.ToString()); + writer.WriteStringValue(Task); } if (_additionalBinaryDataProperties?.ContainsKey("duration") != true) { writer.WritePropertyName("duration"u8); writer.WriteNumberValue(Convert.ToDouble(Duration.Value.ToString("s\\.FFF"))); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +87,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit AudioTranslation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual AudioTranslation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -104,7 +108,7 @@ internal static AudioTranslation DeserializeAudioTranslation(JsonElement element string language = default; string text = default; IReadOnlyList segments = default; - InternalCreateTranslationResponseVerboseJsonTask task = default; + string task = default; TimeSpan? duration = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -135,7 +139,7 @@ internal static AudioTranslation DeserializeAudioTranslation(JsonElement element } if (prop.NameEquals("task"u8)) { - task = new InternalCreateTranslationResponseVerboseJsonTask(prop.Value.GetString()); + task = prop.Value.GetString(); continue; } if (prop.NameEquals("duration"u8)) @@ -143,6 +147,7 @@ internal static AudioTranslation DeserializeAudioTranslation(JsonElement element duration = TimeSpan.FromSeconds(prop.Value.GetDouble()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AudioTranslation( @@ -156,13 +161,14 @@ internal static AudioTranslation DeserializeAudioTranslation(JsonElement element BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AudioTranslation)} does not support writing '{options.Format}' format."); } @@ -170,6 +176,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AudioTranslation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual AudioTranslation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -186,21 +193,5 @@ protected virtual AudioTranslation PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AudioTranslation audioTranslation) - { - if (audioTranslation == null) - { - return null; - } - return BinaryContent.Create(audioTranslation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AudioTranslation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAudioTranslation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/AudioTranslation.cs b/src/Generated/Models/AudioTranslation.cs index 77f6d43eb..76e91b268 100644 --- a/src/Generated/Models/AudioTranslation.cs +++ b/src/Generated/Models/AudioTranslation.cs @@ -20,11 +20,12 @@ internal AudioTranslation(string language, string text, TimeSpan? duration) Duration = duration; } - internal AudioTranslation(string language, string text, IReadOnlyList segments, InternalCreateTranslationResponseVerboseJsonTask task, TimeSpan? duration, IDictionary additionalBinaryDataProperties) + internal AudioTranslation(string language, string text, IReadOnlyList segments, string task, TimeSpan? duration, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Language = language; Text = text; - Segments = segments; + Segments = segments ?? new ChangeTrackingList(); Task = task; Duration = duration; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/AudioTranslationOptions.Serialization.cs b/src/Generated/Models/AudioTranslationOptions.Serialization.cs index 40112fc66..b3b79dbff 100644 --- a/src/Generated/Models/AudioTranslationOptions.Serialization.cs +++ b/src/Generated/Models/AudioTranslationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Audio { public partial class AudioTranslationOptions : IJsonModel { + public AudioTranslationOptions() + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("model"u8); writer.WriteStringValue(Model.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -75,6 +81,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit AudioTranslationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual AudioTranslationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,6 +140,7 @@ internal static AudioTranslationOptions DeserializeAudioTranslationOptions(JsonE model = new InternalCreateTranslationRequestModel(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new AudioTranslationOptions( @@ -146,13 +154,14 @@ internal static AudioTranslationOptions DeserializeAudioTranslationOptions(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(AudioTranslationOptions)} does not support writing '{options.Format}' format."); } @@ -160,6 +169,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions AudioTranslationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual AudioTranslationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -176,21 +186,5 @@ protected virtual AudioTranslationOptions PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(AudioTranslationOptions audioTranslationOptions) - { - if (audioTranslationOptions == null) - { - return null; - } - return BinaryContent.Create(audioTranslationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator AudioTranslationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeAudioTranslationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatAudioOptions.Serialization.cs b/src/Generated/Models/ChatAudioOptions.Serialization.cs index cfe940a89..cdf912c64 100644 --- a/src/Generated/Models/ChatAudioOptions.Serialization.cs +++ b/src/Generated/Models/ChatAudioOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("format"u8); writer.WriteStringValue(OutputAudioFormat.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatAudioOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatAudioOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static ChatAudioOptions DeserializeChatAudioOptions(JsonElement element outputAudioFormat = new ChatOutputAudioFormat(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatAudioOptions(outputAudioVoice, outputAudioFormat, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static ChatAudioOptions DeserializeChatAudioOptions(JsonElement element BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatAudioOptions)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatAudioOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatAudioOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual ChatAudioOptions PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatAudioOptions chatAudioOptions) - { - if (chatAudioOptions == null) - { - return null; - } - return BinaryContent.Create(chatAudioOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatAudioOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatAudioOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatCompletion.Serialization.cs b/src/Generated/Models/ChatCompletion.Serialization.cs index d2b54f345..9d410de8e 100644 --- a/src/Generated/Models/ChatCompletion.Serialization.cs +++ b/src/Generated/Models/ChatCompletion.Serialization.cs @@ -3,17 +3,18 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; +using OpenAI.Internal; namespace OpenAI.Chat { public partial class ChatCompletion : IJsonModel { - internal ChatCompletion() + internal ChatCompletion() : this(null, null, null, null, null, default, null, default, null) { } @@ -24,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -54,7 +56,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (Optional.IsDefined(ServiceTier) && _additionalBinaryDataProperties?.ContainsKey("service_tier") != true) { @@ -76,6 +78,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("created"u8); writer.WriteNumberValue(CreatedAt, "U"); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -99,6 +102,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatCompletion IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatCompletion JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -120,8 +124,8 @@ internal static ChatCompletion DeserializeChatCompletion(JsonElement element, Mo string model = default; string systemFingerprint = default; ChatTokenUsage usage = default; - InternalCreateChatCompletionResponseObject @object = default; - InternalCreateChatCompletionResponseServiceTier? serviceTier = default; + string @object = default; + InternalServiceTier? serviceTier = default; IReadOnlyList choices = default; DateTimeOffset createdAt = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -153,7 +157,7 @@ internal static ChatCompletion DeserializeChatCompletion(JsonElement element, Mo } if (prop.NameEquals("object"u8)) { - @object = new InternalCreateChatCompletionResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("service_tier"u8)) @@ -163,7 +167,7 @@ internal static ChatCompletion DeserializeChatCompletion(JsonElement element, Mo serviceTier = null; continue; } - serviceTier = new InternalCreateChatCompletionResponseServiceTier(prop.Value.GetString()); + serviceTier = new InternalServiceTier(prop.Value.GetString()); continue; } if (prop.NameEquals("choices"u8)) @@ -181,6 +185,7 @@ internal static ChatCompletion DeserializeChatCompletion(JsonElement element, Mo createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatCompletion( @@ -197,13 +202,14 @@ internal static ChatCompletion DeserializeChatCompletion(JsonElement element, Mo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatCompletion)} does not support writing '{options.Format}' format."); } @@ -211,6 +217,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatCompletion IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatCompletion PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -227,21 +234,5 @@ protected virtual ChatCompletion PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatCompletion chatCompletion) - { - if (chatCompletion == null) - { - return null; - } - return BinaryContent.Create(chatCompletion, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatCompletion(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatCompletion(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatCompletion.cs b/src/Generated/Models/ChatCompletion.cs index 90ecd562a..b8a3fac24 100644 --- a/src/Generated/Models/ChatCompletion.cs +++ b/src/Generated/Models/ChatCompletion.cs @@ -5,6 +5,8 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; +using OpenAI.Internal; namespace OpenAI.Chat { @@ -20,15 +22,16 @@ internal ChatCompletion(string id, string model, IEnumerable choices, DateTimeOffset createdAt, IDictionary additionalBinaryDataProperties) + internal ChatCompletion(string id, string model, string systemFingerprint, ChatTokenUsage usage, string @object, InternalServiceTier? serviceTier, IReadOnlyList choices, DateTimeOffset createdAt, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; Model = model; SystemFingerprint = systemFingerprint; Usage = usage; Object = @object; ServiceTier = serviceTier; - Choices = choices; + Choices = choices ?? new ChangeTrackingList(); CreatedAt = createdAt; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ChatCompletionDeletionResult.Serialization.cs b/src/Generated/Models/ChatCompletionDeletionResult.Serialization.cs new file mode 100644 index 000000000..ddb4abfd8 --- /dev/null +++ b/src/Generated/Models/ChatCompletionDeletionResult.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Chat +{ + public partial class ChatCompletionDeletionResult : IJsonModel + { + internal ChatCompletionDeletionResult() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ChatCompletionDeletionResult)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(ChatCompletionId); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + ChatCompletionDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual ChatCompletionDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ChatCompletionDeletionResult)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeChatCompletionDeletionResult(document.RootElement, options); + } + + internal static ChatCompletionDeletionResult DeserializeChatCompletionDeletionResult(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + bool deleted = default; + string @object = default; + string chatCompletionId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("deleted"u8)) + { + deleted = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("id"u8)) + { + chatCompletionId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ChatCompletionDeletionResult(deleted, @object, chatCompletionId, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ChatCompletionDeletionResult)} does not support writing '{options.Format}' format."); + } + } + + ChatCompletionDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual ChatCompletionDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeChatCompletionDeletionResult(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ChatCompletionDeletionResult)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ChatCompletionDeletionResult.cs b/src/Generated/Models/ChatCompletionDeletionResult.cs new file mode 100644 index 000000000..804ec7a55 --- /dev/null +++ b/src/Generated/Models/ChatCompletionDeletionResult.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Chat +{ + public partial class ChatCompletionDeletionResult + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ChatCompletionDeletionResult(bool deleted, string chatCompletionId) + { + Deleted = deleted; + ChatCompletionId = chatCompletionId; + } + + internal ChatCompletionDeletionResult(bool deleted, string @object, string chatCompletionId, IDictionary additionalBinaryDataProperties) + { + Deleted = deleted; + Object = @object; + ChatCompletionId = chatCompletionId; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public bool Deleted { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ChatCompletionOptions.Serialization.cs b/src/Generated/Models/ChatCompletionOptions.Serialization.cs index 899fc289c..f0a4976fd 100644 --- a/src/Generated/Models/ChatCompletionOptions.Serialization.cs +++ b/src/Generated/Models/ChatCompletionOptions.Serialization.cs @@ -3,16 +3,21 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; +using OpenAI.Internal; namespace OpenAI.Chat { public partial class ChatCompletionOptions : IJsonModel { + public ChatCompletionOptions() : this(default, default, default, default, null, default, null, null, null, default, default, null, default, default, null, null, null, null, default, null, default, default, null, null, default, default, null, null, null, null, default, null) + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,10 +58,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("web_search_options"u8); writer.WriteObjectValue(WebSearchOptions, options); } - if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) + if (Optional.IsDefined(Seed) && _additionalBinaryDataProperties?.ContainsKey("seed") != true) { - writer.WritePropertyName("response_format"u8); - writer.WriteObjectValue(ResponseFormat, options); + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed.Value); } if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) { @@ -67,15 +73,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup if (Optional.IsCollectionDefined(Messages) && _additionalBinaryDataProperties?.ContainsKey("messages") != true) { writer.WritePropertyName("messages"u8); SerializeMessagesValue(writer, options); } + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.Value.ToString()); + writer.WriteStringValue(Model); } if (Optional.IsDefined(N) && _additionalBinaryDataProperties?.ContainsKey("n") != true) { @@ -132,11 +140,6 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } - if (Optional.IsDefined(Seed) && _additionalBinaryDataProperties?.ContainsKey("seed") != true) - { - writer.WritePropertyName("seed"u8); - writer.WriteNumberValue(Seed.Value); - } if (Optional.IsDefined(_deprecatedMaxTokens) && _additionalBinaryDataProperties?.ContainsKey("max_tokens") != true) { writer.WritePropertyName("max_tokens"u8); @@ -193,6 +196,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) + { + writer.WritePropertyName("response_format"u8); + writer.WriteObjectValue(ResponseFormat, options); + } if (Optional.IsDefined(AudioOptions) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) { writer.WritePropertyName("audio"u8); @@ -208,6 +216,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("service_tier"u8); writer.WriteStringValue(_serviceTier.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -231,6 +240,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatCompletionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatCompletionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -253,10 +263,10 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme float? frequencyPenalty = default; float? presencePenalty = default; ChatWebSearchOptions webSearchOptions = default; - ChatResponseFormat responseFormat = default; + long? seed = default; IList tools = default; IList messages = default; - InternalCreateChatCompletionRequestModel? model = default; + string model = default; int? n = default; bool? stream = default; InternalChatCompletionStreamOptions streamOptions = default; @@ -268,7 +278,6 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme ChatFunctionChoice functionChoice = default; bool? allowParallelToolCalls = default; string endUserId = default; - long? seed = default; int? deprecatedMaxTokens = default; int? maxOutputTokenCount = default; IList functions = default; @@ -276,9 +285,10 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme bool? storedOutputEnabled = default; ChatReasoningEffortLevel? reasoningEffortLevel = default; IList internalModalities = default; + ChatResponseFormat responseFormat = default; ChatAudioOptions audioOptions = default; ChatOutputPrediction outputPrediction = default; - InternalCreateChatCompletionRequestServiceTier? serviceTier = default; + InternalServiceTier? serviceTier = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -331,13 +341,14 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme webSearchOptions = ChatWebSearchOptions.DeserializeChatWebSearchOptions(prop.Value, options); continue; } - if (prop.NameEquals("response_format"u8)) + if (prop.NameEquals("seed"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { + seed = null; continue; } - responseFormat = ChatResponseFormat.DeserializeChatResponseFormat(prop.Value, options); + seed = prop.Value.GetInt64(); continue; } if (prop.NameEquals("tools"u8)) @@ -366,7 +377,7 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme } if (prop.NameEquals("model"u8)) { - model = new InternalCreateChatCompletionRequestModel(prop.Value.GetString()); + model = prop.Value.GetString(); continue; } if (prop.NameEquals("n"u8)) @@ -461,16 +472,6 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme endUserId = prop.Value.GetString(); continue; } - if (prop.NameEquals("seed"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - seed = null; - continue; - } - seed = prop.Value.GetInt64(); - continue; - } if (prop.NameEquals("max_tokens"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -560,6 +561,15 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme internalModalities = array; continue; } + if (prop.NameEquals("response_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseFormat = ChatResponseFormat.DeserializeChatResponseFormat(prop.Value, options); + continue; + } if (prop.NameEquals("audio"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -584,12 +594,12 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme { if (prop.Value.ValueKind == JsonValueKind.Null) { - serviceTier = null; continue; } - serviceTier = new InternalCreateChatCompletionRequestServiceTier(prop.Value.GetString()); + serviceTier = new InternalServiceTier(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatCompletionOptions( @@ -598,7 +608,7 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme frequencyPenalty, presencePenalty, webSearchOptions, - responseFormat, + seed, tools ?? new ChangeTrackingList(), messages, model, @@ -613,7 +623,6 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme functionChoice, allowParallelToolCalls, endUserId, - seed, deprecatedMaxTokens, maxOutputTokenCount, functions ?? new ChangeTrackingList(), @@ -621,6 +630,7 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme storedOutputEnabled, reasoningEffortLevel, internalModalities ?? new ChangeTrackingList(), + responseFormat, audioOptions, outputPrediction, serviceTier, @@ -629,13 +639,14 @@ internal static ChatCompletionOptions DeserializeChatCompletionOptions(JsonEleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatCompletionOptions)} does not support writing '{options.Format}' format."); } @@ -643,6 +654,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatCompletionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatCompletionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -659,21 +671,5 @@ protected virtual ChatCompletionOptions PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatCompletionOptions chatCompletionOptions) - { - if (chatCompletionOptions == null) - { - return null; - } - return BinaryContent.Create(chatCompletionOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatCompletionOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatCompletionOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatCompletionOptions.cs b/src/Generated/Models/ChatCompletionOptions.cs index 9afb64d37..c1cffe497 100644 --- a/src/Generated/Models/ChatCompletionOptions.cs +++ b/src/Generated/Models/ChatCompletionOptions.cs @@ -4,7 +4,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using OpenAI; +using OpenAI.Internal; namespace OpenAI.Chat { @@ -12,16 +14,16 @@ public partial class ChatCompletionOptions { private protected IDictionary _additionalBinaryDataProperties; - internal ChatCompletionOptions(float? temperature, float? topP, float? frequencyPenalty, float? presencePenalty, ChatWebSearchOptions webSearchOptions, ChatResponseFormat responseFormat, IList tools, IList messages, InternalCreateChatCompletionRequestModel? model, int? n, bool? stream, InternalChatCompletionStreamOptions streamOptions, bool? includeLogProbabilities, int? topLogProbabilityCount, IList stopSequences, IDictionary logitBiases, ChatToolChoice toolChoice, ChatFunctionChoice functionChoice, bool? allowParallelToolCalls, string endUserId, long? seed, int? deprecatedMaxTokens, int? maxOutputTokenCount, IList functions, IDictionary metadata, bool? storedOutputEnabled, ChatReasoningEffortLevel? reasoningEffortLevel, IList internalModalities, ChatAudioOptions audioOptions, ChatOutputPrediction outputPrediction, InternalCreateChatCompletionRequestServiceTier? serviceTier, IDictionary additionalBinaryDataProperties) + internal ChatCompletionOptions(float? temperature, float? topP, float? frequencyPenalty, float? presencePenalty, ChatWebSearchOptions webSearchOptions, long? seed, IList tools, IList messages, string model, int? n, bool? stream, InternalChatCompletionStreamOptions streamOptions, bool? includeLogProbabilities, int? topLogProbabilityCount, IList stopSequences, IDictionary logitBiases, ChatToolChoice toolChoice, ChatFunctionChoice functionChoice, bool? allowParallelToolCalls, string endUserId, int? deprecatedMaxTokens, int? maxOutputTokenCount, IList functions, IDictionary metadata, bool? storedOutputEnabled, ChatReasoningEffortLevel? reasoningEffortLevel, IList internalModalities, ChatResponseFormat responseFormat, ChatAudioOptions audioOptions, ChatOutputPrediction outputPrediction, InternalServiceTier? serviceTier, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Temperature = temperature; TopP = topP; FrequencyPenalty = frequencyPenalty; PresencePenalty = presencePenalty; WebSearchOptions = webSearchOptions; - ResponseFormat = responseFormat; - Tools = tools; - // Plugin customization: ensure initialization of collection + Seed = seed; + Tools = tools ?? new ChangeTrackingList(); Messages = messages ?? new ChangeTrackingList(); Model = model; N = n; @@ -29,20 +31,20 @@ internal ChatCompletionOptions(float? temperature, float? topP, float? frequency StreamOptions = streamOptions; IncludeLogProbabilities = includeLogProbabilities; TopLogProbabilityCount = topLogProbabilityCount; - StopSequences = stopSequences; - LogitBiases = logitBiases; + StopSequences = stopSequences ?? new ChangeTrackingList(); + LogitBiases = logitBiases ?? new ChangeTrackingDictionary(); ToolChoice = toolChoice; FunctionChoice = functionChoice; AllowParallelToolCalls = allowParallelToolCalls; EndUserId = endUserId; - Seed = seed; _deprecatedMaxTokens = deprecatedMaxTokens; MaxOutputTokenCount = maxOutputTokenCount; - Functions = functions; - Metadata = metadata; + Functions = functions ?? new ChangeTrackingList(); + Metadata = metadata ?? new ChangeTrackingDictionary(); StoredOutputEnabled = storedOutputEnabled; ReasoningEffortLevel = reasoningEffortLevel; - InternalModalities = internalModalities; + InternalModalities = internalModalities ?? new ChangeTrackingList(); + ResponseFormat = responseFormat; AudioOptions = audioOptions; OutputPrediction = outputPrediction; _serviceTier = serviceTier; @@ -57,9 +59,11 @@ internal ChatCompletionOptions(float? temperature, float? topP, float? frequency public float? PresencePenalty { get; set; } + [Experimental("OPENAI001")] public ChatWebSearchOptions WebSearchOptions { get; set; } - public ChatResponseFormat ResponseFormat { get; set; } + [Experimental("OPENAI001")] + public long? Seed { get; set; } public IList Tools { get; } diff --git a/src/Generated/Models/ChatFunction.Serialization.cs b/src/Generated/Models/ChatFunction.Serialization.cs index 0e0d35158..be7145f15 100644 --- a/src/Generated/Models/ChatFunction.Serialization.cs +++ b/src/Generated/Models/ChatFunction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,6 +54,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -76,6 +78,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,6 +121,7 @@ internal static ChatFunction DeserializeChatFunction(JsonElement element, ModelR functionParameters = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatFunction(functionName, functionDescription, functionParameters, additionalBinaryDataProperties); @@ -125,13 +129,14 @@ internal static ChatFunction DeserializeChatFunction(JsonElement element, ModelR BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatFunction)} does not support writing '{options.Format}' format."); } @@ -139,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +161,5 @@ protected virtual ChatFunction PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatFunction chatFunction) - { - if (chatFunction == null) - { - return null; - } - return BinaryContent.Create(chatFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatFunctionCall.Serialization.cs b/src/Generated/Models/ChatFunctionCall.Serialization.cs index f10d4a17a..8ea7b1598 100644 --- a/src/Generated/Models/ChatFunctionCall.Serialization.cs +++ b/src/Generated/Models/ChatFunctionCall.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("arguments"u8); SerializeFunctionArgumentsValue(writer, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatFunctionCall IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatFunctionCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static ChatFunctionCall DeserializeChatFunctionCall(JsonElement element DeserializeFunctionArgumentsValue(prop, ref functionArguments); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatFunctionCall(functionName, functionArguments, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static ChatFunctionCall DeserializeChatFunctionCall(JsonElement element BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatFunctionCall)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatFunctionCall IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatFunctionCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual ChatFunctionCall PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatFunctionCall chatFunctionCall) - { - if (chatFunctionCall == null) - { - return null; - } - return BinaryContent.Create(chatFunctionCall, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatFunctionCall(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatFunctionCall(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatFunctionChoice.Serialization.cs b/src/Generated/Models/ChatFunctionChoice.Serialization.cs index 5ddfa7c67..8afc67e64 100644 --- a/src/Generated/Models/ChatFunctionChoice.Serialization.cs +++ b/src/Generated/Models/ChatFunctionChoice.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,6 +12,7 @@ namespace OpenAI.Chat { public partial class ChatFunctionChoice : IJsonModel { + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -19,6 +20,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatFunctionChoice)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -42,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatFunctionChoice IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatFunctionChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -55,13 +58,14 @@ protected virtual ChatFunctionChoice JsonModelCreateCore(ref Utf8JsonReader read BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatFunctionChoice)} does not support writing '{options.Format}' format."); } @@ -69,6 +73,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatFunctionChoice IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatFunctionChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,21 +90,5 @@ protected virtual ChatFunctionChoice PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatFunctionChoice chatFunctionChoice) - { - if (chatFunctionChoice == null) - { - return null; - } - return BinaryContent.Create(chatFunctionChoice, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatFunctionChoice(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatFunctionChoice(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatInputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ChatInputTokenUsageDetails.Serialization.cs index ec496985c..460a5b06f 100644 --- a/src/Generated/Models/ChatInputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ChatInputTokenUsageDetails.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("cached_tokens"u8); writer.WriteNumberValue(CachedTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatInputTokenUsageDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static ChatInputTokenUsageDetails DeserializeChatInputTokenUsageDetails cachedTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatInputTokenUsageDetails(audioTokenCount, cachedTokenCount, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static ChatInputTokenUsageDetails DeserializeChatInputTokenUsageDetails BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatInputTokenUsageDetails)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatInputTokenUsageDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual ChatInputTokenUsageDetails PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatInputTokenUsageDetails chatInputTokenUsageDetails) - { - if (chatInputTokenUsageDetails == null) - { - return null; - } - return BinaryContent.Create(chatInputTokenUsageDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatInputTokenUsageDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatInputTokenUsageDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatMessage.Serialization.cs b/src/Generated/Models/ChatMessage.Serialization.cs index cd8a6a0a1..4f683f685 100644 --- a/src/Generated/Models/ChatMessage.Serialization.cs +++ b/src/Generated/Models/ChatMessage.Serialization.cs @@ -3,15 +3,21 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Chat { + [PersistableModelProxy(typeof(InternalUnknownChatMessage))] public partial class ChatMessage : IJsonModel { + internal ChatMessage() : this(null, default, null) + { + } + + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -19,6 +25,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatMessage)} does not support writing '{format}' format."); } + // Plugin customization: add Content.IsInnerCollectionDefined() check if (Optional.IsDefined(Content) && Content.IsInnerCollectionDefined() && _additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); @@ -29,6 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("role"u8); writer.WriteStringValue(Role.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -52,6 +60,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,13 +101,14 @@ internal static ChatMessage DeserializeChatMessage(JsonElement element, ModelRea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatMessage)} does not support writing '{options.Format}' format."); } @@ -106,6 +116,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +133,5 @@ protected virtual ChatMessage PersistableModelCreateCore(BinaryData data, ModelR } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatMessage chatMessage) - { - if (chatMessage == null) - { - return null; - } - return BinaryContent.Create(chatMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatMessage.cs b/src/Generated/Models/ChatMessage.cs index 378e59d71..98bd79962 100644 --- a/src/Generated/Models/ChatMessage.cs +++ b/src/Generated/Models/ChatMessage.cs @@ -13,7 +13,7 @@ public partial class ChatMessage internal ChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties) { - // Plugin customization: ensure initialization of collection + // Plugin customization: ensure initialization of collections Content = content ?? new ChatMessageContent(); Role = role; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/ChatMessageAnnotation.Serialization.cs b/src/Generated/Models/ChatMessageAnnotation.Serialization.cs index 46081e30a..9b2b3a3fa 100644 --- a/src/Generated/Models/ChatMessageAnnotation.Serialization.cs +++ b/src/Generated/Models/ChatMessageAnnotation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,11 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("url_citation"u8); writer.WriteObjectValue(UrlCitation, options); } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatMessageAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,7 +80,6 @@ internal static ChatMessageAnnotation DeserializeChatMessageAnnotation(JsonEleme return null; } InternalChatCompletionResponseMessageAnnotationUrlCitation urlCitation = default; - InternalChatCompletionResponseMessageAnnotationType @type = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -91,25 +88,22 @@ internal static ChatMessageAnnotation DeserializeChatMessageAnnotation(JsonEleme urlCitation = InternalChatCompletionResponseMessageAnnotationUrlCitation.DeserializeInternalChatCompletionResponseMessageAnnotationUrlCitation(prop.Value, options); continue; } - if (prop.NameEquals("type"u8)) - { - @type = new InternalChatCompletionResponseMessageAnnotationType(prop.Value.GetString()); - continue; - } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new ChatMessageAnnotation(urlCitation, @type, additionalBinaryDataProperties); + return new ChatMessageAnnotation(urlCitation, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatMessageAnnotation)} does not support writing '{options.Format}' format."); } @@ -117,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatMessageAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +128,5 @@ protected virtual ChatMessageAnnotation PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatMessageAnnotation chatMessageAnnotation) - { - if (chatMessageAnnotation == null) - { - return null; - } - return BinaryContent.Create(chatMessageAnnotation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatMessageAnnotation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatMessageAnnotation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatMessageAnnotation.cs b/src/Generated/Models/ChatMessageAnnotation.cs index f5283347f..8935768e1 100644 --- a/src/Generated/Models/ChatMessageAnnotation.cs +++ b/src/Generated/Models/ChatMessageAnnotation.cs @@ -16,10 +16,9 @@ internal ChatMessageAnnotation(InternalChatCompletionResponseMessageAnnotationUr UrlCitation = urlCitation; } - internal ChatMessageAnnotation(InternalChatCompletionResponseMessageAnnotationUrlCitation urlCitation, InternalChatCompletionResponseMessageAnnotationType @type, IDictionary additionalBinaryDataProperties) + internal ChatMessageAnnotation(InternalChatCompletionResponseMessageAnnotationUrlCitation urlCitation, IDictionary additionalBinaryDataProperties) { UrlCitation = urlCitation; - Type = @type; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ChatMessageContentPart.Serialization.cs b/src/Generated/Models/ChatMessageContentPart.Serialization.cs index 068b012b8..74425d208 100644 --- a/src/Generated/Models/ChatMessageContentPart.Serialization.cs +++ b/src/Generated/Models/ChatMessageContentPart.Serialization.cs @@ -3,15 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Chat { + [PersistableModelProxy(typeof(InternalUnknownChatCompletionRequestMessageContentPart))] public partial class ChatMessageContentPart : IJsonModel { + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -19,6 +21,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatMessageContentPart)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -42,6 +45,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatMessageContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -55,13 +59,14 @@ protected virtual ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatMessageContentPart)} does not support writing '{options.Format}' format."); } @@ -69,6 +74,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatMessageContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,21 +91,5 @@ protected virtual ChatMessageContentPart PersistableModelCreateCore(BinaryData d } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatMessageContentPart chatMessageContentPart) - { - if (chatMessageContentPart == null) - { - return null; - } - return BinaryContent.Create(chatMessageContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatMessageContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatMessageContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatMessageContentPart.cs b/src/Generated/Models/ChatMessageContentPart.cs index d6450c68e..d282dd837 100644 --- a/src/Generated/Models/ChatMessageContentPart.cs +++ b/src/Generated/Models/ChatMessageContentPart.cs @@ -11,6 +11,11 @@ public partial class ChatMessageContentPart { private protected IDictionary _additionalBinaryDataProperties; + internal ChatMessageContentPart(IDictionary additionalBinaryDataProperties) + { + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ChatMessageContentPartKind.Serialization.cs b/src/Generated/Models/ChatMessageContentPartKind.Serialization.cs new file mode 100644 index 000000000..249443cd3 --- /dev/null +++ b/src/Generated/Models/ChatMessageContentPartKind.Serialization.cs @@ -0,0 +1,10 @@ +// + +#nullable disable + +namespace OpenAI.Chat +{ + internal static partial class ChatMessageContentPartKindExtensions + { + } +} diff --git a/src/Generated/Models/ChatOutputAudio.Serialization.cs b/src/Generated/Models/ChatOutputAudio.Serialization.cs index a52263dc5..f89485ec4 100644 --- a/src/Generated/Models/ChatOutputAudio.Serialization.cs +++ b/src/Generated/Models/ChatOutputAudio.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("data"u8); writer.WriteBase64StringValue(AudioBytes.ToArray(), "D"); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatOutputAudio IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatOutputAudio JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,6 +121,7 @@ internal static ChatOutputAudio DeserializeChatOutputAudio(JsonElement element, audioBytes = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatOutputAudio(id, expiresAt, transcript, audioBytes, additionalBinaryDataProperties); @@ -125,13 +129,14 @@ internal static ChatOutputAudio DeserializeChatOutputAudio(JsonElement element, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatOutputAudio)} does not support writing '{options.Format}' format."); } @@ -139,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatOutputAudio IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatOutputAudio PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +161,5 @@ protected virtual ChatOutputAudio PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatOutputAudio chatOutputAudio) - { - if (chatOutputAudio == null) - { - return null; - } - return BinaryContent.Create(chatOutputAudio, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatOutputAudio(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatOutputAudio(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatOutputAudioFormat.cs b/src/Generated/Models/ChatOutputAudioFormat.cs index bb9b98365..0b4209f87 100644 --- a/src/Generated/Models/ChatOutputAudioFormat.cs +++ b/src/Generated/Models/ChatOutputAudioFormat.cs @@ -12,6 +12,7 @@ namespace OpenAI.Chat { private readonly string _value; private const string WavValue = "wav"; + private const string AacValue = "aac"; private const string Mp3Value = "mp3"; private const string FlacValue = "flac"; private const string OpusValue = "opus"; @@ -26,6 +27,8 @@ public ChatOutputAudioFormat(string value) public static ChatOutputAudioFormat Wav { get; } = new ChatOutputAudioFormat(WavValue); + public static ChatOutputAudioFormat Aac { get; } = new ChatOutputAudioFormat(AacValue); + public static ChatOutputAudioFormat Mp3 { get; } = new ChatOutputAudioFormat(Mp3Value); public static ChatOutputAudioFormat Flac { get; } = new ChatOutputAudioFormat(FlacValue); diff --git a/src/Generated/Models/ChatOutputAudioReference.Serialization.cs b/src/Generated/Models/ChatOutputAudioReference.Serialization.cs index c63cb315f..ededf4b9a 100644 --- a/src/Generated/Models/ChatOutputAudioReference.Serialization.cs +++ b/src/Generated/Models/ChatOutputAudioReference.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatOutputAudioReference IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatOutputAudioReference JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static ChatOutputAudioReference DeserializeChatOutputAudioReference(Jso id = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatOutputAudioReference(id, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static ChatOutputAudioReference DeserializeChatOutputAudioReference(Jso BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatOutputAudioReference)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatOutputAudioReference IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatOutputAudioReference PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual ChatOutputAudioReference PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatOutputAudioReference chatOutputAudioReference) - { - if (chatOutputAudioReference == null) - { - return null; - } - return BinaryContent.Create(chatOutputAudioReference, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatOutputAudioReference(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatOutputAudioReference(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatOutputAudioVoice.cs b/src/Generated/Models/ChatOutputAudioVoice.cs index fdaf1c90e..022c4b7ec 100644 --- a/src/Generated/Models/ChatOutputAudioVoice.cs +++ b/src/Generated/Models/ChatOutputAudioVoice.cs @@ -16,6 +16,9 @@ namespace OpenAI.Chat private const string BalladValue = "ballad"; private const string CoralValue = "coral"; private const string EchoValue = "echo"; + private const string FableValue = "fable"; + private const string OnyxValue = "onyx"; + private const string NovaValue = "nova"; private const string SageValue = "sage"; private const string ShimmerValue = "shimmer"; private const string VerseValue = "verse"; @@ -37,6 +40,12 @@ public ChatOutputAudioVoice(string value) public static ChatOutputAudioVoice Echo { get; } = new ChatOutputAudioVoice(EchoValue); + public static ChatOutputAudioVoice Fable { get; } = new ChatOutputAudioVoice(FableValue); + + public static ChatOutputAudioVoice Onyx { get; } = new ChatOutputAudioVoice(OnyxValue); + + public static ChatOutputAudioVoice Nova { get; } = new ChatOutputAudioVoice(NovaValue); + public static ChatOutputAudioVoice Sage { get; } = new ChatOutputAudioVoice(SageValue); public static ChatOutputAudioVoice Shimmer { get; } = new ChatOutputAudioVoice(ShimmerValue); diff --git a/src/Generated/Models/ChatOutputPrediction.Serialization.cs b/src/Generated/Models/ChatOutputPrediction.Serialization.cs index e77abbbed..50d108406 100644 --- a/src/Generated/Models/ChatOutputPrediction.Serialization.cs +++ b/src/Generated/Models/ChatOutputPrediction.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Chat { + [PersistableModelProxy(typeof(InternalUnknownChatOutputPrediction))] public partial class ChatOutputPrediction : IJsonModel { internal ChatOutputPrediction() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -33,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatOutputPrediction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatOutputPrediction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,13 +92,14 @@ internal static ChatOutputPrediction DeserializeChatOutputPrediction(JsonElement BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatOutputPrediction)} does not support writing '{options.Format}' format."); } @@ -102,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatOutputPrediction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatOutputPrediction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,21 +124,5 @@ protected virtual ChatOutputPrediction PersistableModelCreateCore(BinaryData dat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatOutputPrediction chatOutputPrediction) - { - if (chatOutputPrediction == null) - { - return null; - } - return BinaryContent.Create(chatOutputPrediction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatOutputPrediction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatOutputPrediction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatOutputPrediction.cs b/src/Generated/Models/ChatOutputPrediction.cs index 380f12d3f..9f10b8f0c 100644 --- a/src/Generated/Models/ChatOutputPrediction.cs +++ b/src/Generated/Models/ChatOutputPrediction.cs @@ -11,18 +11,18 @@ public partial class ChatOutputPrediction { private protected IDictionary _additionalBinaryDataProperties; - private protected ChatOutputPrediction(InternalChatOutputPredictionKind @type) + private protected ChatOutputPrediction(InternalChatOutputPredictionKind kind) { - Type = @type; + Kind = kind; } - internal ChatOutputPrediction(InternalChatOutputPredictionKind @type, IDictionary additionalBinaryDataProperties) + internal ChatOutputPrediction(InternalChatOutputPredictionKind kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal InternalChatOutputPredictionKind Type { get; set; } + internal InternalChatOutputPredictionKind Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/ChatOutputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ChatOutputTokenUsageDetails.Serialization.cs index 7f73cbb75..249fdf68e 100644 --- a/src/Generated/Models/ChatOutputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ChatOutputTokenUsageDetails.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -47,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("rejected_prediction_tokens"u8); writer.WriteNumberValue(RejectedPredictionTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -70,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatOutputTokenUsageDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -130,6 +133,7 @@ internal static ChatOutputTokenUsageDetails DeserializeChatOutputTokenUsageDetai rejectedPredictionTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatOutputTokenUsageDetails(reasoningTokenCount, audioTokenCount, acceptedPredictionTokenCount, rejectedPredictionTokenCount, additionalBinaryDataProperties); @@ -137,13 +141,14 @@ internal static ChatOutputTokenUsageDetails DeserializeChatOutputTokenUsageDetai BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatOutputTokenUsageDetails)} does not support writing '{options.Format}' format."); } @@ -151,6 +156,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatOutputTokenUsageDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -167,21 +173,5 @@ protected virtual ChatOutputTokenUsageDetails PersistableModelCreateCore(BinaryD } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatOutputTokenUsageDetails chatOutputTokenUsageDetails) - { - if (chatOutputTokenUsageDetails == null) - { - return null; - } - return BinaryContent.Create(chatOutputTokenUsageDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatOutputTokenUsageDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatOutputTokenUsageDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatResponseFormat.Serialization.cs b/src/Generated/Models/ChatResponseFormat.Serialization.cs index 6190268bd..c13169f74 100644 --- a/src/Generated/Models/ChatResponseFormat.Serialization.cs +++ b/src/Generated/Models/ChatResponseFormat.Serialization.cs @@ -3,15 +3,21 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Chat { + [PersistableModelProxy(typeof(InternalUnknownChatResponseFormat))] public partial class ChatResponseFormat : IJsonModel { + internal ChatResponseFormat() + { + } + + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -22,8 +28,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -47,6 +54,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatResponseFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -69,11 +77,11 @@ internal static ChatResponseFormat DeserializeChatResponseFormat(JsonElement ele switch (discriminator.GetString()) { case "text": - return InternalChatResponseFormatText.DeserializeInternalChatResponseFormatText(element, options); + return InternalDotNetChatResponseFormatText.DeserializeInternalDotNetChatResponseFormatText(element, options); case "json_object": - return InternalChatResponseFormatJsonObject.DeserializeInternalChatResponseFormatJsonObject(element, options); + return InternalDotNetChatResponseFormatJsonObject.DeserializeInternalDotNetChatResponseFormatJsonObject(element, options); case "json_schema": - return InternalChatResponseFormatJsonSchema.DeserializeInternalChatResponseFormatJsonSchema(element, options); + return InternalDotNetChatResponseFormatJsonSchema.DeserializeInternalDotNetChatResponseFormatJsonSchema(element, options); } } return InternalUnknownChatResponseFormat.DeserializeInternalUnknownChatResponseFormat(element, options); @@ -81,13 +89,14 @@ internal static ChatResponseFormat DeserializeChatResponseFormat(JsonElement ele BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatResponseFormat)} does not support writing '{options.Format}' format."); } @@ -95,6 +104,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatResponseFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,21 +121,5 @@ protected virtual ChatResponseFormat PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatResponseFormat chatResponseFormat) - { - if (chatResponseFormat == null) - { - return null; - } - return BinaryContent.Create(chatResponseFormat, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatResponseFormat(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatResponseFormat(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatResponseFormat.cs b/src/Generated/Models/ChatResponseFormat.cs index a904c8862..c39173210 100644 --- a/src/Generated/Models/ChatResponseFormat.cs +++ b/src/Generated/Models/ChatResponseFormat.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI.Internal; namespace OpenAI.Chat { @@ -11,18 +12,18 @@ public partial class ChatResponseFormat { private protected IDictionary _additionalBinaryDataProperties; - private protected ChatResponseFormat(string @type) + private protected ChatResponseFormat(InternalResponseFormatType kind) { - Type = @type; + Kind = kind; } - internal ChatResponseFormat(string @type, IDictionary additionalBinaryDataProperties) + internal ChatResponseFormat(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalResponseFormatType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/ChatTokenLogProbabilityDetails.Serialization.cs b/src/Generated/Models/ChatTokenLogProbabilityDetails.Serialization.cs index 54834fd6b..21dc5bbf6 100644 --- a/src/Generated/Models/ChatTokenLogProbabilityDetails.Serialization.cs +++ b/src/Generated/Models/ChatTokenLogProbabilityDetails.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Chat { public partial class ChatTokenLogProbabilityDetails : IJsonModel { - internal ChatTokenLogProbabilityDetails() + internal ChatTokenLogProbabilityDetails() : this(null, default, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,6 +69,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -91,6 +93,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatTokenLogProbabilityDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatTokenLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -151,6 +154,7 @@ internal static ChatTokenLogProbabilityDetails DeserializeChatTokenLogProbabilit topLogProbabilities = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatTokenLogProbabilityDetails(token, logProbability, utf8Bytes, topLogProbabilities, additionalBinaryDataProperties); @@ -158,13 +162,14 @@ internal static ChatTokenLogProbabilityDetails DeserializeChatTokenLogProbabilit BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatTokenLogProbabilityDetails)} does not support writing '{options.Format}' format."); } @@ -172,6 +177,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatTokenLogProbabilityDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatTokenLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -188,21 +194,5 @@ protected virtual ChatTokenLogProbabilityDetails PersistableModelCreateCore(Bina } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatTokenLogProbabilityDetails chatTokenLogProbabilityDetails) - { - if (chatTokenLogProbabilityDetails == null) - { - return null; - } - return BinaryContent.Create(chatTokenLogProbabilityDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatTokenLogProbabilityDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatTokenLogProbabilityDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatTokenLogProbabilityDetails.cs b/src/Generated/Models/ChatTokenLogProbabilityDetails.cs index 4c27601ea..dcb124032 100644 --- a/src/Generated/Models/ChatTokenLogProbabilityDetails.cs +++ b/src/Generated/Models/ChatTokenLogProbabilityDetails.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; namespace OpenAI.Chat { @@ -22,10 +23,11 @@ internal ChatTokenLogProbabilityDetails(string token, float logProbability, Read internal ChatTokenLogProbabilityDetails(string token, float logProbability, ReadOnlyMemory? utf8Bytes, IReadOnlyList topLogProbabilities, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Token = token; LogProbability = logProbability; Utf8Bytes = utf8Bytes; - TopLogProbabilities = topLogProbabilities; + TopLogProbabilities = topLogProbabilities ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ChatTokenTopLogProbabilityDetails.Serialization.cs b/src/Generated/Models/ChatTokenTopLogProbabilityDetails.Serialization.cs index 0ecf8c3f1..47ee59489 100644 --- a/src/Generated/Models/ChatTokenTopLogProbabilityDetails.Serialization.cs +++ b/src/Generated/Models/ChatTokenTopLogProbabilityDetails.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,6 +59,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("bytes"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -81,6 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatTokenTopLogProbabilityDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatTokenTopLogProbabilityDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -130,6 +133,7 @@ internal static ChatTokenTopLogProbabilityDetails DeserializeChatTokenTopLogProb utf8Bytes = new ReadOnlyMemory(array); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatTokenTopLogProbabilityDetails(token, logProbability, utf8Bytes, additionalBinaryDataProperties); @@ -137,13 +141,14 @@ internal static ChatTokenTopLogProbabilityDetails DeserializeChatTokenTopLogProb BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatTokenTopLogProbabilityDetails)} does not support writing '{options.Format}' format."); } @@ -151,6 +156,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatTokenTopLogProbabilityDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatTokenTopLogProbabilityDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -167,21 +173,5 @@ protected virtual ChatTokenTopLogProbabilityDetails PersistableModelCreateCore(B } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatTokenTopLogProbabilityDetails chatTokenTopLogProbabilityDetails) - { - if (chatTokenTopLogProbabilityDetails == null) - { - return null; - } - return BinaryContent.Create(chatTokenTopLogProbabilityDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatTokenTopLogProbabilityDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatTokenTopLogProbabilityDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatTokenUsage.Serialization.cs b/src/Generated/Models/ChatTokenUsage.Serialization.cs index fb222dc1f..c269a1839 100644 --- a/src/Generated/Models/ChatTokenUsage.Serialization.cs +++ b/src/Generated/Models/ChatTokenUsage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("prompt_tokens_details"u8); writer.WriteObjectValue(InputTokenDetails, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -79,6 +81,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatTokenUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,6 +140,7 @@ internal static ChatTokenUsage DeserializeChatTokenUsage(JsonElement element, Mo inputTokenDetails = ChatInputTokenUsageDetails.DeserializeChatInputTokenUsageDetails(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatTokenUsage( @@ -150,13 +154,14 @@ internal static ChatTokenUsage DeserializeChatTokenUsage(JsonElement element, Mo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatTokenUsage)} does not support writing '{options.Format}' format."); } @@ -164,6 +169,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatTokenUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -180,21 +186,5 @@ protected virtual ChatTokenUsage PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatTokenUsage chatTokenUsage) - { - if (chatTokenUsage == null) - { - return null; - } - return BinaryContent.Create(chatTokenUsage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatTokenUsage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatTokenUsage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatTool.Serialization.cs b/src/Generated/Models/ChatTool.Serialization.cs index 4463b7902..a07349947 100644 --- a/src/Generated/Models/ChatTool.Serialization.cs +++ b/src/Generated/Models/ChatTool.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static ChatTool DeserializeChatTool(JsonElement element, ModelReaderWri kind = prop.Value.GetString().ToChatToolKind(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatTool(function, kind, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static ChatTool DeserializeChatTool(JsonElement element, ModelReaderWri BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatTool)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual ChatTool PersistableModelCreateCore(BinaryData data, ModelRead } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatTool chatTool) - { - if (chatTool == null) - { - return null; - } - return BinaryContent.Create(chatTool, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatTool(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatTool(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatTool.cs b/src/Generated/Models/ChatTool.cs index fbb6bcf26..daeab3340 100644 --- a/src/Generated/Models/ChatTool.cs +++ b/src/Generated/Models/ChatTool.cs @@ -12,6 +12,14 @@ public partial class ChatTool { private protected IDictionary _additionalBinaryDataProperties; + internal ChatTool(InternalFunctionDefinition function, ChatToolKind kind) + { + Argument.AssertNotNull(function, nameof(function)); + + Function = function; + Kind = kind; + } + internal ChatTool(InternalFunctionDefinition function, ChatToolKind kind, IDictionary additionalBinaryDataProperties) { Function = function; diff --git a/src/Generated/Models/ChatToolCall.Serialization.cs b/src/Generated/Models/ChatToolCall.Serialization.cs index c6feda16b..007c4d709 100644 --- a/src/Generated/Models/ChatToolCall.Serialization.cs +++ b/src/Generated/Models/ChatToolCall.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatToolCall IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatToolCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static ChatToolCall DeserializeChatToolCall(JsonElement element, ModelR kind = prop.Value.GetString().ToChatToolCallKind(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatToolCall(id, function, kind, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static ChatToolCall DeserializeChatToolCall(JsonElement element, ModelR BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatToolCall)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatToolCall IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatToolCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual ChatToolCall PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatToolCall chatToolCall) - { - if (chatToolCall == null) - { - return null; - } - return BinaryContent.Create(chatToolCall, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatToolCall(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatToolCall(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatToolCall.cs b/src/Generated/Models/ChatToolCall.cs index 3e3fe3032..113f51949 100644 --- a/src/Generated/Models/ChatToolCall.cs +++ b/src/Generated/Models/ChatToolCall.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Chat { @@ -11,6 +12,16 @@ public partial class ChatToolCall { private protected IDictionary _additionalBinaryDataProperties; + internal ChatToolCall(string id, InternalChatCompletionMessageToolCallFunction function, ChatToolCallKind kind) + { + Argument.AssertNotNull(id, nameof(id)); + Argument.AssertNotNull(function, nameof(function)); + + Id = id; + Function = function; + Kind = kind; + } + internal ChatToolCall(string id, InternalChatCompletionMessageToolCallFunction function, ChatToolCallKind kind, IDictionary additionalBinaryDataProperties) { Id = id; diff --git a/src/Generated/Models/ChatToolChoice.Serialization.cs b/src/Generated/Models/ChatToolChoice.Serialization.cs index 58be8eeaf..7188a5ebc 100644 --- a/src/Generated/Models/ChatToolChoice.Serialization.cs +++ b/src/Generated/Models/ChatToolChoice.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,6 +12,7 @@ namespace OpenAI.Chat { public partial class ChatToolChoice : IJsonModel { + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -19,6 +20,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ChatToolChoice)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -42,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatToolChoice IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatToolChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -55,13 +58,14 @@ protected virtual ChatToolChoice JsonModelCreateCore(ref Utf8JsonReader reader, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatToolChoice)} does not support writing '{options.Format}' format."); } @@ -69,6 +73,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatToolChoice IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatToolChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,21 +90,5 @@ protected virtual ChatToolChoice PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatToolChoice chatToolChoice) - { - if (chatToolChoice == null) - { - return null; - } - return BinaryContent.Create(chatToolChoice, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatToolChoice(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatToolChoice(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ChatWebSearchOptions.Serialization.cs b/src/Generated/Models/ChatWebSearchOptions.Serialization.cs index 8286978f7..b9836c23e 100644 --- a/src/Generated/Models/ChatWebSearchOptions.Serialization.cs +++ b/src/Generated/Models/ChatWebSearchOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.Internal; @@ -21,6 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -38,6 +39,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("search_context_size"u8); writer.WriteStringValue(SearchContextSize.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -61,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ChatWebSearchOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ChatWebSearchOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -102,6 +105,7 @@ internal static ChatWebSearchOptions DeserializeChatWebSearchOptions(JsonElement searchContextSize = new InternalWebSearchContextSize(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ChatWebSearchOptions(userLocation, searchContextSize, additionalBinaryDataProperties); @@ -109,13 +113,14 @@ internal static ChatWebSearchOptions DeserializeChatWebSearchOptions(JsonElement BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatWebSearchOptions)} does not support writing '{options.Format}' format."); } @@ -123,6 +128,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatWebSearchOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ChatWebSearchOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -139,21 +145,5 @@ protected virtual ChatWebSearchOptions PersistableModelCreateCore(BinaryData dat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ChatWebSearchOptions chatWebSearchOptions) - { - if (chatWebSearchOptions == null) - { - return null; - } - return BinaryContent.Create(chatWebSearchOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ChatWebSearchOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeChatWebSearchOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs b/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs index ba5eac264..ac8638f50 100644 --- a/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs +++ b/src/Generated/Models/CodeInterpreterToolDefinition.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,14 @@ namespace OpenAI.Assistants { public partial class CodeInterpreterToolDefinition : IJsonModel { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -25,6 +33,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri CodeInterpreterToolDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (CodeInterpreterToolDefinition)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,29 +51,31 @@ internal static CodeInterpreterToolDefinition DeserializeCodeInterpreterToolDefi { return null; } - string @type = "code_interpreter"; + InternalAssistantToolDefinitionType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalAssistantToolDefinitionType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new CodeInterpreterToolDefinition(@type, additionalBinaryDataProperties); + return new CodeInterpreterToolDefinition(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(CodeInterpreterToolDefinition)} does not support writing '{options.Format}' format."); } @@ -72,6 +83,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions CodeInterpreterToolDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (CodeInterpreterToolDefinition)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,21 +100,5 @@ protected override ToolDefinition PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(CodeInterpreterToolDefinition codeInterpreterToolDefinition) - { - if (codeInterpreterToolDefinition == null) - { - return null; - } - return BinaryContent.Create(codeInterpreterToolDefinition, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator CodeInterpreterToolDefinition(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeCodeInterpreterToolDefinition(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/CodeInterpreterToolDefinition.cs b/src/Generated/Models/CodeInterpreterToolDefinition.cs index 05f625b85..11f1278b9 100644 --- a/src/Generated/Models/CodeInterpreterToolDefinition.cs +++ b/src/Generated/Models/CodeInterpreterToolDefinition.cs @@ -9,11 +9,11 @@ namespace OpenAI.Assistants { public partial class CodeInterpreterToolDefinition : ToolDefinition { - public CodeInterpreterToolDefinition() : base("code_interpreter") + public CodeInterpreterToolDefinition() : this(InternalAssistantToolDefinitionType.CodeInterpreter, null) { } - internal CodeInterpreterToolDefinition(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) + internal CodeInterpreterToolDefinition(InternalAssistantToolDefinitionType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs b/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs index 654b7a04f..5e5687dcd 100644 --- a/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs +++ b/src/Generated/Models/CodeInterpreterToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit CodeInterpreterToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual CodeInterpreterToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static CodeInterpreterToolResources DeserializeCodeInterpreterToolResou fileIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new CodeInterpreterToolResources(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static CodeInterpreterToolResources DeserializeCodeInterpreterToolResou BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(CodeInterpreterToolResources)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions CodeInterpreterToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual CodeInterpreterToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual CodeInterpreterToolResources PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(CodeInterpreterToolResources codeInterpreterToolResources) - { - if (codeInterpreterToolResources == null) - { - return null; - } - return BinaryContent.Create(codeInterpreterToolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator CodeInterpreterToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeCodeInterpreterToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/CodeInterpreterToolResources.cs b/src/Generated/Models/CodeInterpreterToolResources.cs index 5eedc9577..1c7a8dfac 100644 --- a/src/Generated/Models/CodeInterpreterToolResources.cs +++ b/src/Generated/Models/CodeInterpreterToolResources.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Assistants { @@ -11,12 +12,19 @@ public partial class CodeInterpreterToolResources { private protected IDictionary _additionalBinaryDataProperties; + public CodeInterpreterToolResources() : this(null, null) + { + } + internal CodeInterpreterToolResources(IList fileIds, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } + public IList FileIds { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ComputerCallAction.Serialization.cs b/src/Generated/Models/ComputerCallAction.Serialization.cs index 58acd7239..454ef45c3 100644 --- a/src/Generated/Models/ComputerCallAction.Serialization.cs +++ b/src/Generated/Models/ComputerCallAction.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Responses { + [PersistableModelProxy(typeof(InternalUnknownComputerAction))] public partial class ComputerCallAction : IJsonModel { internal ComputerCallAction() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ComputerCallAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -80,37 +84,38 @@ internal static ComputerCallAction DeserializeComputerCallAction(JsonElement ele switch (discriminator.GetString()) { case "click": - return InternalResponsesComputerCallClickAction.DeserializeInternalResponsesComputerCallClickAction(element, options); + return InternalComputerActionClick.DeserializeInternalComputerActionClick(element, options); case "double_click": - return InternalResponsesComputerCallDoubleClickAction.DeserializeInternalResponsesComputerCallDoubleClickAction(element, options); - case "scroll": - return InternalResponsesComputerCallScrollAction.DeserializeInternalResponsesComputerCallScrollAction(element, options); + return InternalComputerActionDoubleClick.DeserializeInternalComputerActionDoubleClick(element, options); + case "drag": + return InternalComputerActionDrag.DeserializeInternalComputerActionDrag(element, options); + case "move": + return InternalComputerActionMove.DeserializeInternalComputerActionMove(element, options); case "screenshot": - return InternalResponsesComputerCallScreenshotAction.DeserializeInternalResponsesComputerCallScreenshotAction(element, options); + return InternalComputerActionScreenshot.DeserializeInternalComputerActionScreenshot(element, options); + case "scroll": + return InternalComputerActionScroll.DeserializeInternalComputerActionScroll(element, options); case "type": - return InternalResponsesComputerCallTypeAction.DeserializeInternalResponsesComputerCallTypeAction(element, options); + return InternalComputerActionTypeKeys.DeserializeInternalComputerActionTypeKeys(element, options); case "wait": - return InternalResponsesComputerCallWaitAction.DeserializeInternalResponsesComputerCallWaitAction(element, options); + return InternalComputerActionWait.DeserializeInternalComputerActionWait(element, options); case "keypress": - return InternalResponsesComputerCallKeyPressAction.DeserializeInternalResponsesComputerCallKeyPressAction(element, options); - case "drag": - return InternalResponsesComputerCallDragAction.DeserializeInternalResponsesComputerCallDragAction(element, options); - case "move": - return InternalResponsesComputerCallMoveAction.DeserializeInternalResponsesComputerCallMoveAction(element, options); + return InternalComputerActionKeyPress.DeserializeInternalComputerActionKeyPress(element, options); } } - return UnknownResponsesComputerCallItemAction.DeserializeUnknownResponsesComputerCallItemAction(element, options); + return InternalUnknownComputerAction.DeserializeInternalUnknownComputerAction(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ComputerCallAction)} does not support writing '{options.Format}' format."); } @@ -118,6 +123,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ComputerCallAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -134,21 +140,5 @@ protected virtual ComputerCallAction PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ComputerCallAction computerCallAction) - { - if (computerCallAction == null) - { - return null; - } - return BinaryContent.Create(computerCallAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ComputerCallAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeComputerCallAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ComputerCallAction.cs b/src/Generated/Models/ComputerCallAction.cs index 8106f6fa4..f1c421757 100644 --- a/src/Generated/Models/ComputerCallAction.cs +++ b/src/Generated/Models/ComputerCallAction.cs @@ -22,6 +22,8 @@ internal ComputerCallAction(ComputerCallActionKind kind, IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ComputerCallActionMouseButton.Serialization.cs b/src/Generated/Models/ComputerCallActionMouseButton.Serialization.cs index 11dfe658c..6889ff832 100644 --- a/src/Generated/Models/ComputerCallActionMouseButton.Serialization.cs +++ b/src/Generated/Models/ComputerCallActionMouseButton.Serialization.cs @@ -14,7 +14,7 @@ internal static partial class ComputerCallActionMouseButtonExtensions ComputerCallActionMouseButton.Right => "right", ComputerCallActionMouseButton.Wheel => "wheel", ComputerCallActionMouseButton.Back => "back", - ComputerCallActionMouseButton.Forward => "forward,", + ComputerCallActionMouseButton.Forward => "forward", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ComputerCallActionMouseButton value.") }; @@ -36,7 +36,7 @@ public static ComputerCallActionMouseButton ToComputerCallActionMouseButton(this { return ComputerCallActionMouseButton.Back; } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "forward,")) + if (StringComparer.OrdinalIgnoreCase.Equals(value, "forward")) { return ComputerCallActionMouseButton.Forward; } diff --git a/src/Generated/Models/ComputerCallOutputResponseItem.Serialization.cs b/src/Generated/Models/ComputerCallOutputResponseItem.Serialization.cs index 4b4c2fb91..640acf9b7 100644 --- a/src/Generated/Models/ComputerCallOutputResponseItem.Serialization.cs +++ b/src/Generated/Models/ComputerCallOutputResponseItem.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class ComputerCallOutputResponseItem : IJsonModel { - internal ComputerCallOutputResponseItem() + internal ComputerCallOutputResponseItem() : this(InternalItemType.ComputerCallOutput, null, null, null, null, null, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,7 +38,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri writer.WritePropertyName("call_id"u8); writer.WriteStringValue(CallId); } - if (_additionalBinaryDataProperties?.ContainsKey("acknowledged_safety_checks") != true) + if (Optional.IsCollectionDefined(AcknowledgedSafetyChecks) && _additionalBinaryDataProperties?.ContainsKey("acknowledged_safety_checks") != true) { writer.WritePropertyName("acknowledged_safety_checks"u8); writer.WriteStartArray(); @@ -52,6 +53,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri writer.WritePropertyName("output"u8); writer.WriteObjectValue(Output, options); } + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) { writer.WritePropertyName("status"u8); @@ -61,6 +63,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ComputerCallOutputResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ComputerCallOutputResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -78,7 +81,7 @@ internal static ComputerCallOutputResponseItem DeserializeComputerCallOutputResp { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string callId = default; @@ -89,7 +92,7 @@ internal static ComputerCallOutputResponseItem DeserializeComputerCallOutputResp { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -104,6 +107,10 @@ internal static ComputerCallOutputResponseItem DeserializeComputerCallOutputResp } if (prop.NameEquals("acknowledged_safety_checks"u8)) { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { @@ -119,34 +126,32 @@ internal static ComputerCallOutputResponseItem DeserializeComputerCallOutputResp } if (prop.NameEquals("status"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } status = prop.Value.GetString().ToComputerCallOutputStatus(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ComputerCallOutputResponseItem( - @type, + kind, id, additionalBinaryDataProperties, callId, - acknowledgedSafetyChecks, + acknowledgedSafetyChecks ?? new ChangeTrackingList(), output, status); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ComputerCallOutputResponseItem)} does not support writing '{options.Format}' format."); } @@ -154,6 +159,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ComputerCallOutputResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ComputerCallOutputResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -170,21 +176,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ComputerCallOutputResponseItem computerCallOutputResponseItem) - { - if (computerCallOutputResponseItem == null) - { - return null; - } - return BinaryContent.Create(computerCallOutputResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ComputerCallOutputResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeComputerCallOutputResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ComputerCallOutputResponseItem.cs b/src/Generated/Models/ComputerCallOutputResponseItem.cs index b045d3eb6..555d4dc1f 100644 --- a/src/Generated/Models/ComputerCallOutputResponseItem.cs +++ b/src/Generated/Models/ComputerCallOutputResponseItem.cs @@ -4,38 +4,33 @@ using System; using System.Collections.Generic; -using System.Linq; using OpenAI; namespace OpenAI.Responses { public partial class ComputerCallOutputResponseItem : ResponseItem { - public ComputerCallOutputResponseItem(string callId, IEnumerable acknowledgedSafetyChecks, ComputerOutput output) : base(InternalResponsesItemType.ComputerCallOutput) + internal ComputerCallOutputResponseItem(string id, string callId, ComputerOutput output, ComputerCallOutputStatus? status) : base(InternalItemType.ComputerCallOutput, id) { - Argument.AssertNotNull(callId, nameof(callId)); - Argument.AssertNotNull(acknowledgedSafetyChecks, nameof(acknowledgedSafetyChecks)); - Argument.AssertNotNull(output, nameof(output)); - CallId = callId; - AcknowledgedSafetyChecks = acknowledgedSafetyChecks.ToList(); + AcknowledgedSafetyChecks = new ChangeTrackingList(); Output = output; + Status = status; } - internal ComputerCallOutputResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, string callId, IList acknowledgedSafetyChecks, ComputerOutput output, ComputerCallOutputStatus? status) : base(@type, id, additionalBinaryDataProperties) + internal ComputerCallOutputResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string callId, IList acknowledgedSafetyChecks, ComputerOutput output, ComputerCallOutputStatus? status) : base(kind, id, additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections CallId = callId; - AcknowledgedSafetyChecks = acknowledgedSafetyChecks; + AcknowledgedSafetyChecks = acknowledgedSafetyChecks ?? new ChangeTrackingList(); Output = output; Status = status; } - public string CallId { get; set; } + public string CallId { get; } public IList AcknowledgedSafetyChecks { get; } - public ComputerOutput Output { get; set; } - - public ComputerCallOutputStatus? Status { get; } + public ComputerOutput Output { get; } } } diff --git a/src/Generated/Models/ComputerCallResponseItem.Serialization.cs b/src/Generated/Models/ComputerCallResponseItem.Serialization.cs index a9e1bd82f..8ea4322e8 100644 --- a/src/Generated/Models/ComputerCallResponseItem.Serialization.cs +++ b/src/Generated/Models/ComputerCallResponseItem.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class ComputerCallResponseItem : IJsonModel { - internal ComputerCallResponseItem() + internal ComputerCallResponseItem() : this(InternalItemType.ComputerCall, null, null, null, null, null, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,15 +53,17 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri } writer.WriteEndArray(); } - if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup + if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) { writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToSerialString()); + writer.WriteStringValue(Status.Value.ToSerialString()); } } ComputerCallResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ComputerCallResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -78,18 +81,18 @@ internal static ComputerCallResponseItem DeserializeComputerCallResponseItem(Jso { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string callId = default; ComputerCallAction action = default; IList pendingSafetyChecks = default; - ComputerCallStatus status = default; + ComputerCallStatus? status = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -122,10 +125,11 @@ internal static ComputerCallResponseItem DeserializeComputerCallResponseItem(Jso status = prop.Value.GetString().ToComputerCallStatus(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ComputerCallResponseItem( - @type, + kind, id, additionalBinaryDataProperties, callId, @@ -136,13 +140,14 @@ internal static ComputerCallResponseItem DeserializeComputerCallResponseItem(Jso BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ComputerCallResponseItem)} does not support writing '{options.Format}' format."); } @@ -150,6 +155,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ComputerCallResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ComputerCallResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -166,21 +172,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ComputerCallResponseItem computerCallResponseItem) - { - if (computerCallResponseItem == null) - { - return null; - } - return BinaryContent.Create(computerCallResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ComputerCallResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeComputerCallResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ComputerCallResponseItem.cs b/src/Generated/Models/ComputerCallResponseItem.cs index a05d55f3f..0fff52825 100644 --- a/src/Generated/Models/ComputerCallResponseItem.cs +++ b/src/Generated/Models/ComputerCallResponseItem.cs @@ -11,31 +11,27 @@ namespace OpenAI.Responses { public partial class ComputerCallResponseItem : ResponseItem { - public ComputerCallResponseItem(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks) : base(InternalResponsesItemType.ComputerCall) + internal ComputerCallResponseItem(string id, string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks, ComputerCallStatus? status) : base(InternalItemType.ComputerCall, id) { - Argument.AssertNotNull(callId, nameof(callId)); - Argument.AssertNotNull(action, nameof(action)); - Argument.AssertNotNull(pendingSafetyChecks, nameof(pendingSafetyChecks)); - CallId = callId; Action = action; PendingSafetyChecks = pendingSafetyChecks.ToList(); + Status = status; } - internal ComputerCallResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, string callId, ComputerCallAction action, IList pendingSafetyChecks, ComputerCallStatus status) : base(@type, id, additionalBinaryDataProperties) + internal ComputerCallResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string callId, ComputerCallAction action, IList pendingSafetyChecks, ComputerCallStatus? status) : base(kind, id, additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections CallId = callId; Action = action; - PendingSafetyChecks = pendingSafetyChecks; + PendingSafetyChecks = pendingSafetyChecks ?? new ChangeTrackingList(); Status = status; } - public string CallId { get; set; } + public string CallId { get; } - public ComputerCallAction Action { get; set; } + public ComputerCallAction Action { get; } public IList PendingSafetyChecks { get; } - - public ComputerCallStatus Status { get; } } } diff --git a/src/Generated/Models/ComputerCallSafetyCheck.Serialization.cs b/src/Generated/Models/ComputerCallSafetyCheck.Serialization.cs index c16597217..5ea843354 100644 --- a/src/Generated/Models/ComputerCallSafetyCheck.Serialization.cs +++ b/src/Generated/Models/ComputerCallSafetyCheck.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ComputerCallSafetyCheck IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ComputerCallSafetyCheck JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static ComputerCallSafetyCheck DeserializeComputerCallSafetyCheck(JsonE message = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ComputerCallSafetyCheck(id, code, message, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static ComputerCallSafetyCheck DeserializeComputerCallSafetyCheck(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ComputerCallSafetyCheck)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ComputerCallSafetyCheck IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ComputerCallSafetyCheck PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual ComputerCallSafetyCheck PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ComputerCallSafetyCheck computerCallSafetyCheck) - { - if (computerCallSafetyCheck == null) - { - return null; - } - return BinaryContent.Create(computerCallSafetyCheck, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ComputerCallSafetyCheck(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeComputerCallSafetyCheck(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ComputerOutput.Serialization.cs b/src/Generated/Models/ComputerOutput.Serialization.cs index 7a02edd2b..958296e6d 100644 --- a/src/Generated/Models/ComputerOutput.Serialization.cs +++ b/src/Generated/Models/ComputerOutput.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Responses { + [PersistableModelProxy(typeof(InternalUnknownComputerToolCallOutputItemOutput))] public partial class ComputerOutput : IJsonModel { internal ComputerOutput() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -33,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ComputerOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ComputerOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -80,21 +84,22 @@ internal static ComputerOutput DeserializeComputerOutput(JsonElement element, Mo switch (discriminator.GetString()) { case "computer_screenshot": - return InternalResponsesComputerCallOutputItemScreenshot.DeserializeInternalResponsesComputerCallOutputItemScreenshot(element, options); + return InternalComputerToolCallOutputItemOutputComputerScreenshot.DeserializeInternalComputerToolCallOutputItemOutputComputerScreenshot(element, options); } } - return UnknownResponsesComputerCallOutputItemOutput.DeserializeUnknownResponsesComputerCallOutputItemOutput(element, options); + return InternalUnknownComputerToolCallOutputItemOutput.DeserializeInternalUnknownComputerToolCallOutputItemOutput(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ComputerOutput)} does not support writing '{options.Format}' format."); } @@ -102,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ComputerOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ComputerOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,21 +124,5 @@ protected virtual ComputerOutput PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ComputerOutput computerOutput) - { - if (computerOutput == null) - { - return null; - } - return BinaryContent.Create(computerOutput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ComputerOutput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeComputerOutput(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ComputerOutput.cs b/src/Generated/Models/ComputerOutput.cs index 7f71bbc0f..d20f2979b 100644 --- a/src/Generated/Models/ComputerOutput.cs +++ b/src/Generated/Models/ComputerOutput.cs @@ -11,18 +11,18 @@ public partial class ComputerOutput { private protected IDictionary _additionalBinaryDataProperties; - private protected ComputerOutput(InternalResponsesComputerCallOutputItemOutputType @type) + private protected ComputerOutput(InternalComputerUsePreviewToolCallOutputOutputType kind) { - Type = @type; + Kind = kind; } - internal ComputerOutput(InternalResponsesComputerCallOutputItemOutputType @type, IDictionary additionalBinaryDataProperties) + internal ComputerOutput(InternalComputerUsePreviewToolCallOutputOutputType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal InternalResponsesComputerCallOutputItemOutputType Type { get; set; } + internal InternalComputerUsePreviewToolCallOutputOutputType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/ComputerToolEnvironment.cs b/src/Generated/Models/ComputerToolEnvironment.cs index 7a38cc801..9101d9fdd 100644 --- a/src/Generated/Models/ComputerToolEnvironment.cs +++ b/src/Generated/Models/ComputerToolEnvironment.cs @@ -13,6 +13,7 @@ namespace OpenAI.Responses private readonly string _value; private const string WindowsValue = "windows"; private const string MacValue = "mac"; + private const string LinuxValue = "linux"; private const string UbuntuValue = "ubuntu"; private const string BrowserValue = "browser"; @@ -27,6 +28,8 @@ public ComputerToolEnvironment(string value) public static ComputerToolEnvironment Mac { get; } = new ComputerToolEnvironment(MacValue); + public static ComputerToolEnvironment Linux { get; } = new ComputerToolEnvironment(LinuxValue); + public static ComputerToolEnvironment Ubuntu { get; } = new ComputerToolEnvironment(UbuntuValue); public static ComputerToolEnvironment Browser { get; } = new ComputerToolEnvironment(BrowserValue); diff --git a/src/Generated/Models/ConversationAudioFormat.cs b/src/Generated/Models/ConversationAudioFormat.cs deleted file mode 100644 index 110006816..000000000 --- a/src/Generated/Models/ConversationAudioFormat.cs +++ /dev/null @@ -1,47 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public readonly partial struct ConversationAudioFormat : IEquatable - { - private readonly string _value; - private const string Pcm16Value = "pcm16"; - private const string G711UlawValue = "g711_ulaw"; - private const string G711AlawValue = "g711_alaw"; - - public ConversationAudioFormat(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static ConversationAudioFormat Pcm16 { get; } = new ConversationAudioFormat(Pcm16Value); - - public static ConversationAudioFormat G711Ulaw { get; } = new ConversationAudioFormat(G711UlawValue); - - public static ConversationAudioFormat G711Alaw { get; } = new ConversationAudioFormat(G711AlawValue); - - public static bool operator ==(ConversationAudioFormat left, ConversationAudioFormat right) => left.Equals(right); - - public static bool operator !=(ConversationAudioFormat left, ConversationAudioFormat right) => !left.Equals(right); - - public static implicit operator ConversationAudioFormat(string value) => new ConversationAudioFormat(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is ConversationAudioFormat other && Equals(other); - - public bool Equals(ConversationAudioFormat 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/ConversationContentPart.Serialization.cs b/src/Generated/Models/ConversationContentPart.Serialization.cs index 0aed7054a..d6c51b46a 100644 --- a/src/Generated/Models/ConversationContentPart.Serialization.cs +++ b/src/Generated/Models/ConversationContentPart.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { + [PersistableModelProxy(typeof(UnknownRealtimeContentPart))] public partial class ConversationContentPart : IJsonModel { internal ConversationContentPart() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -94,13 +98,14 @@ internal static ConversationContentPart DeserializeConversationContentPart(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationContentPart)} does not support writing '{options.Format}' format."); } @@ -108,6 +113,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -124,21 +130,5 @@ protected virtual ConversationContentPart PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationContentPart conversationContentPart) - { - if (conversationContentPart == null) - { - return null; - } - return BinaryContent.Create(conversationContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationContentPart.cs b/src/Generated/Models/ConversationContentPart.cs index 492258a0b..a0ef394cb 100644 --- a/src/Generated/Models/ConversationContentPart.cs +++ b/src/Generated/Models/ConversationContentPart.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationContentPart { diff --git a/src/Generated/Models/ConversationContentPartKind.cs b/src/Generated/Models/ConversationContentPartKind.cs index a754da730..7d652e37e 100644 --- a/src/Generated/Models/ConversationContentPartKind.cs +++ b/src/Generated/Models/ConversationContentPartKind.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public readonly partial struct ConversationContentPartKind : IEquatable { diff --git a/src/Generated/Models/ConversationErrorUpdate.Serialization.cs b/src/Generated/Models/ConversationErrorUpdate.Serialization.cs deleted file mode 100644 index 78e6e7ebc..000000000 --- a/src/Generated/Models/ConversationErrorUpdate.Serialization.cs +++ /dev/null @@ -1,136 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationErrorUpdate : IJsonModel - { - internal ConversationErrorUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationErrorUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("error") != true) - { - writer.WritePropertyName("error"u8); - writer.WriteObjectValue(_error, options); - } - } - - ConversationErrorUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationErrorUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationErrorUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationErrorUpdate(document.RootElement, options); - } - - internal static ConversationErrorUpdate DeserializeConversationErrorUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalRealtimeServerEventErrorError error = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("error"u8)) - { - error = InternalRealtimeServerEventErrorError.DeserializeInternalRealtimeServerEventErrorError(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationErrorUpdate(eventId, kind, additionalBinaryDataProperties, error); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationErrorUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationErrorUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationErrorUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationErrorUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationErrorUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationErrorUpdate conversationErrorUpdate) - { - if (conversationErrorUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationErrorUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationErrorUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationErrorUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationErrorUpdate.cs b/src/Generated/Models/ConversationErrorUpdate.cs deleted file mode 100644 index 92308e209..000000000 --- a/src/Generated/Models/ConversationErrorUpdate.cs +++ /dev/null @@ -1,22 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationErrorUpdate : ConversationUpdate - { - internal ConversationErrorUpdate(string eventId, InternalRealtimeServerEventErrorError error) : base(eventId, ConversationUpdateKind.Error) - { - _error = error; - } - - internal ConversationErrorUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeServerEventErrorError error) : base(eventId, kind, additionalBinaryDataProperties) - { - _error = error; - } - } -} diff --git a/src/Generated/Models/ConversationFunctionTool.Serialization.cs b/src/Generated/Models/ConversationFunctionTool.Serialization.cs index 78fd492d1..9f8753187 100644 --- a/src/Generated/Models/ConversationFunctionTool.Serialization.cs +++ b/src/Generated/Models/ConversationFunctionTool.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationFunctionTool : IJsonModel { - internal ConversationFunctionTool() + internal ConversationFunctionTool() : this(ConversationToolKind.Function, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,6 +59,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ConversationFunctionTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationFunctionTool)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ConversationTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -106,6 +108,7 @@ internal static ConversationFunctionTool DeserializeConversationFunctionTool(Jso parameters = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationFunctionTool(kind, additionalBinaryDataProperties, name, description, parameters); @@ -113,13 +116,14 @@ internal static ConversationFunctionTool DeserializeConversationFunctionTool(Jso BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationFunctionTool)} does not support writing '{options.Format}' format."); } @@ -127,6 +131,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationFunctionTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationFunctionTool)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ConversationTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -143,21 +148,5 @@ protected override ConversationTool PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationFunctionTool conversationFunctionTool) - { - if (conversationFunctionTool == null) - { - return null; - } - return BinaryContent.Create(conversationFunctionTool, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationFunctionTool(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationFunctionTool(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationFunctionTool.cs b/src/Generated/Models/ConversationFunctionTool.cs index 29c1c465a..801f3a64b 100644 --- a/src/Generated/Models/ConversationFunctionTool.cs +++ b/src/Generated/Models/ConversationFunctionTool.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationFunctionTool : ConversationTool { diff --git a/src/Generated/Models/ConversationIncompleteReason.cs b/src/Generated/Models/ConversationIncompleteReason.cs index 16e7c9a93..e67cdd8ed 100644 --- a/src/Generated/Models/ConversationIncompleteReason.cs +++ b/src/Generated/Models/ConversationIncompleteReason.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public readonly partial struct ConversationIncompleteReason : IEquatable { diff --git a/src/Generated/Models/ConversationInputAudioClearedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputAudioClearedUpdate.Serialization.cs deleted file mode 100644 index 33ab7c70c..000000000 --- a/src/Generated/Models/ConversationInputAudioClearedUpdate.Serialization.cs +++ /dev/null @@ -1,125 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputAudioClearedUpdate : IJsonModel - { - internal ConversationInputAudioClearedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputAudioClearedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - ConversationInputAudioClearedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationInputAudioClearedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputAudioClearedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationInputAudioClearedUpdate(document.RootElement, options); - } - - internal static ConversationInputAudioClearedUpdate DeserializeConversationInputAudioClearedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationInputAudioClearedUpdate(eventId, kind, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationInputAudioClearedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationInputAudioClearedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationInputAudioClearedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationInputAudioClearedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationInputAudioClearedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationInputAudioClearedUpdate conversationInputAudioClearedUpdate) - { - if (conversationInputAudioClearedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationInputAudioClearedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationInputAudioClearedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationInputAudioClearedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationInputAudioClearedUpdate.cs b/src/Generated/Models/ConversationInputAudioClearedUpdate.cs deleted file mode 100644 index 60f01f580..000000000 --- a/src/Generated/Models/ConversationInputAudioClearedUpdate.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputAudioClearedUpdate : ConversationUpdate - { - internal ConversationInputAudioClearedUpdate(string eventId) : base(eventId, ConversationUpdateKind.InputAudioCleared) - { - } - - internal ConversationInputAudioClearedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties) : base(eventId, kind, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/ConversationInputAudioCommittedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputAudioCommittedUpdate.Serialization.cs deleted file mode 100644 index 9395b4931..000000000 --- a/src/Generated/Models/ConversationInputAudioCommittedUpdate.Serialization.cs +++ /dev/null @@ -1,147 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputAudioCommittedUpdate : IJsonModel - { - internal ConversationInputAudioCommittedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputAudioCommittedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("previous_item_id") != true) - { - writer.WritePropertyName("previous_item_id"u8); - writer.WriteStringValue(PreviousItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - } - - ConversationInputAudioCommittedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationInputAudioCommittedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputAudioCommittedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationInputAudioCommittedUpdate(document.RootElement, options); - } - - internal static ConversationInputAudioCommittedUpdate DeserializeConversationInputAudioCommittedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string previousItemId = default; - string itemId = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("previous_item_id"u8)) - { - previousItemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationInputAudioCommittedUpdate(eventId, kind, additionalBinaryDataProperties, previousItemId, itemId); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationInputAudioCommittedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationInputAudioCommittedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationInputAudioCommittedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationInputAudioCommittedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationInputAudioCommittedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationInputAudioCommittedUpdate conversationInputAudioCommittedUpdate) - { - if (conversationInputAudioCommittedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationInputAudioCommittedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationInputAudioCommittedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationInputAudioCommittedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationInputAudioCommittedUpdate.cs b/src/Generated/Models/ConversationInputAudioCommittedUpdate.cs deleted file mode 100644 index a95ccecf8..000000000 --- a/src/Generated/Models/ConversationInputAudioCommittedUpdate.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputAudioCommittedUpdate : ConversationUpdate - { - internal ConversationInputAudioCommittedUpdate(string eventId, string previousItemId, string itemId) : base(eventId, ConversationUpdateKind.InputAudioCommitted) - { - PreviousItemId = previousItemId; - ItemId = itemId; - } - - internal ConversationInputAudioCommittedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string previousItemId, string itemId) : base(eventId, kind, additionalBinaryDataProperties) - { - PreviousItemId = previousItemId; - ItemId = itemId; - } - - public string PreviousItemId { get; } - - public string ItemId { get; } - } -} diff --git a/src/Generated/Models/ConversationInputSpeechFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputSpeechFinishedUpdate.Serialization.cs deleted file mode 100644 index 1165e0b7a..000000000 --- a/src/Generated/Models/ConversationInputSpeechFinishedUpdate.Serialization.cs +++ /dev/null @@ -1,147 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputSpeechFinishedUpdate : IJsonModel - { - internal ConversationInputSpeechFinishedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputSpeechFinishedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("audio_end_ms") != true) - { - writer.WritePropertyName("audio_end_ms"u8); - writer.WriteNumberValue(_audioEndMs); - } - } - - ConversationInputSpeechFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationInputSpeechFinishedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputSpeechFinishedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationInputSpeechFinishedUpdate(document.RootElement, options); - } - - internal static ConversationInputSpeechFinishedUpdate DeserializeConversationInputSpeechFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; - int audioEndMs = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("audio_end_ms"u8)) - { - audioEndMs = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationInputSpeechFinishedUpdate(eventId, kind, additionalBinaryDataProperties, itemId, audioEndMs); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationInputSpeechFinishedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationInputSpeechFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationInputSpeechFinishedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationInputSpeechFinishedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationInputSpeechFinishedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationInputSpeechFinishedUpdate conversationInputSpeechFinishedUpdate) - { - if (conversationInputSpeechFinishedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationInputSpeechFinishedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationInputSpeechFinishedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationInputSpeechFinishedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationInputSpeechFinishedUpdate.cs b/src/Generated/Models/ConversationInputSpeechFinishedUpdate.cs deleted file mode 100644 index 8a87f335c..000000000 --- a/src/Generated/Models/ConversationInputSpeechFinishedUpdate.cs +++ /dev/null @@ -1,26 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputSpeechFinishedUpdate : ConversationUpdate - { - internal ConversationInputSpeechFinishedUpdate(string eventId, string itemId, int audioEndMs) : base(eventId, ConversationUpdateKind.InputSpeechStopped) - { - ItemId = itemId; - _audioEndMs = audioEndMs; - } - - internal ConversationInputSpeechFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int audioEndMs) : base(eventId, kind, additionalBinaryDataProperties) - { - ItemId = itemId; - _audioEndMs = audioEndMs; - } - - public string ItemId { get; } - } -} diff --git a/src/Generated/Models/ConversationInputSpeechStartedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputSpeechStartedUpdate.Serialization.cs deleted file mode 100644 index 92cba99ef..000000000 --- a/src/Generated/Models/ConversationInputSpeechStartedUpdate.Serialization.cs +++ /dev/null @@ -1,147 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputSpeechStartedUpdate : IJsonModel - { - internal ConversationInputSpeechStartedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputSpeechStartedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("audio_start_ms") != true) - { - writer.WritePropertyName("audio_start_ms"u8); - writer.WriteNumberValue(_audioStartMs); - } - } - - ConversationInputSpeechStartedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationInputSpeechStartedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputSpeechStartedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationInputSpeechStartedUpdate(document.RootElement, options); - } - - internal static ConversationInputSpeechStartedUpdate DeserializeConversationInputSpeechStartedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; - int audioStartMs = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("audio_start_ms"u8)) - { - audioStartMs = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationInputSpeechStartedUpdate(eventId, kind, additionalBinaryDataProperties, itemId, audioStartMs); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationInputSpeechStartedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationInputSpeechStartedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationInputSpeechStartedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationInputSpeechStartedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationInputSpeechStartedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationInputSpeechStartedUpdate conversationInputSpeechStartedUpdate) - { - if (conversationInputSpeechStartedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationInputSpeechStartedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationInputSpeechStartedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationInputSpeechStartedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationInputSpeechStartedUpdate.cs b/src/Generated/Models/ConversationInputSpeechStartedUpdate.cs deleted file mode 100644 index cad996091..000000000 --- a/src/Generated/Models/ConversationInputSpeechStartedUpdate.cs +++ /dev/null @@ -1,26 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputSpeechStartedUpdate : ConversationUpdate - { - internal ConversationInputSpeechStartedUpdate(string eventId, string itemId, int audioStartMs) : base(eventId, ConversationUpdateKind.InputSpeechStarted) - { - ItemId = itemId; - _audioStartMs = audioStartMs; - } - - internal ConversationInputSpeechStartedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int audioStartMs) : base(eventId, kind, additionalBinaryDataProperties) - { - ItemId = itemId; - _audioStartMs = audioStartMs; - } - - public string ItemId { get; } - } -} diff --git a/src/Generated/Models/ConversationInputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ConversationInputTokenUsageDetails.Serialization.cs index f7224a050..9c13750f6 100644 --- a/src/Generated/Models/ConversationInputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ConversationInputTokenUsageDetails.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationInputTokenUsageDetails : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text_tokens"u8); writer.WriteNumberValue(TextTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationInputTokenUsageDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -115,6 +118,7 @@ internal static ConversationInputTokenUsageDetails DeserializeConversationInputT textTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationInputTokenUsageDetails(audioTokenCount, cachedTokenCount, textTokenCount, additionalBinaryDataProperties); @@ -122,13 +126,14 @@ internal static ConversationInputTokenUsageDetails DeserializeConversationInputT BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationInputTokenUsageDetails)} does not support writing '{options.Format}' format."); } @@ -136,6 +141,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationInputTokenUsageDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -152,21 +158,5 @@ protected virtual ConversationInputTokenUsageDetails PersistableModelCreateCore( } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationInputTokenUsageDetails conversationInputTokenUsageDetails) - { - if (conversationInputTokenUsageDetails == null) - { - return null; - } - return BinaryContent.Create(conversationInputTokenUsageDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationInputTokenUsageDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationInputTokenUsageDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationInputTokenUsageDetails.cs b/src/Generated/Models/ConversationInputTokenUsageDetails.cs index 277871f66..d78ed7607 100644 --- a/src/Generated/Models/ConversationInputTokenUsageDetails.cs +++ b/src/Generated/Models/ConversationInputTokenUsageDetails.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationInputTokenUsageDetails { diff --git a/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.Serialization.cs deleted file mode 100644 index e41908367..000000000 --- a/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.Serialization.cs +++ /dev/null @@ -1,164 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputTranscriptionFailedUpdate : IJsonModel - { - internal ConversationInputTranscriptionFailedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputTranscriptionFailedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) - { - writer.WritePropertyName("content_index"u8); - writer.WriteNumberValue(ContentIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("error") != true) - { - writer.WritePropertyName("error"u8); - writer.WriteObjectValue(_error, options); - } - } - - ConversationInputTranscriptionFailedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationInputTranscriptionFailedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputTranscriptionFailedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationInputTranscriptionFailedUpdate(document.RootElement, options); - } - - internal static ConversationInputTranscriptionFailedUpdate DeserializeConversationInputTranscriptionFailedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; - int contentIndex = default; - InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("content_index"u8)) - { - contentIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("error"u8)) - { - error = InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.DeserializeInternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationInputTranscriptionFailedUpdate( - eventId, - kind, - additionalBinaryDataProperties, - itemId, - contentIndex, - error); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationInputTranscriptionFailedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationInputTranscriptionFailedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationInputTranscriptionFailedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationInputTranscriptionFailedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationInputTranscriptionFailedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationInputTranscriptionFailedUpdate conversationInputTranscriptionFailedUpdate) - { - if (conversationInputTranscriptionFailedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationInputTranscriptionFailedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationInputTranscriptionFailedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationInputTranscriptionFailedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.cs b/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.cs deleted file mode 100644 index 2a5c5d58d..000000000 --- a/src/Generated/Models/ConversationInputTranscriptionFailedUpdate.cs +++ /dev/null @@ -1,30 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputTranscriptionFailedUpdate : ConversationUpdate - { - internal ConversationInputTranscriptionFailedUpdate(string eventId, string itemId, int contentIndex, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error) : base(eventId, ConversationUpdateKind.InputTranscriptionFailed) - { - ItemId = itemId; - ContentIndex = contentIndex; - _error = error; - } - - internal ConversationInputTranscriptionFailedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error) : base(eventId, kind, additionalBinaryDataProperties) - { - ItemId = itemId; - ContentIndex = contentIndex; - _error = error; - } - - public string ItemId { get; } - - public int ContentIndex { get; } - } -} diff --git a/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.Serialization.cs deleted file mode 100644 index d722d838b..000000000 --- a/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.Serialization.cs +++ /dev/null @@ -1,164 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputTranscriptionFinishedUpdate : IJsonModel - { - internal ConversationInputTranscriptionFinishedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputTranscriptionFinishedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) - { - writer.WritePropertyName("content_index"u8); - writer.WriteNumberValue(ContentIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("transcript") != true) - { - writer.WritePropertyName("transcript"u8); - writer.WriteStringValue(Transcript); - } - } - - ConversationInputTranscriptionFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationInputTranscriptionFinishedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputTranscriptionFinishedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationInputTranscriptionFinishedUpdate(document.RootElement, options); - } - - internal static ConversationInputTranscriptionFinishedUpdate DeserializeConversationInputTranscriptionFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; - int contentIndex = default; - string transcript = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("content_index"u8)) - { - contentIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("transcript"u8)) - { - transcript = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationInputTranscriptionFinishedUpdate( - eventId, - kind, - additionalBinaryDataProperties, - itemId, - contentIndex, - transcript); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationInputTranscriptionFinishedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationInputTranscriptionFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationInputTranscriptionFinishedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationInputTranscriptionFinishedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationInputTranscriptionFinishedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationInputTranscriptionFinishedUpdate conversationInputTranscriptionFinishedUpdate) - { - if (conversationInputTranscriptionFinishedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationInputTranscriptionFinishedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationInputTranscriptionFinishedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationInputTranscriptionFinishedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.cs b/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.cs deleted file mode 100644 index 261aa9878..000000000 --- a/src/Generated/Models/ConversationInputTranscriptionFinishedUpdate.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputTranscriptionFinishedUpdate : ConversationUpdate - { - internal ConversationInputTranscriptionFinishedUpdate(string eventId, string itemId, int contentIndex, string transcript) : base(eventId, ConversationUpdateKind.InputTranscriptionFinished) - { - ItemId = itemId; - ContentIndex = contentIndex; - Transcript = transcript; - } - - internal ConversationInputTranscriptionFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, string transcript) : base(eventId, kind, additionalBinaryDataProperties) - { - ItemId = itemId; - ContentIndex = contentIndex; - Transcript = transcript; - } - - public string ItemId { get; } - - public int ContentIndex { get; } - - public string Transcript { get; } - } -} diff --git a/src/Generated/Models/ConversationInputTranscriptionOptions.Serialization.cs b/src/Generated/Models/ConversationInputTranscriptionOptions.Serialization.cs deleted file mode 100644 index eb8b7632d..000000000 --- a/src/Generated/Models/ConversationInputTranscriptionOptions.Serialization.cs +++ /dev/null @@ -1,142 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputTranscriptionOptions : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputTranscriptionOptions)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.Value.ToString()); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - ConversationInputTranscriptionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual ConversationInputTranscriptionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationInputTranscriptionOptions)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationInputTranscriptionOptions(document.RootElement, options); - } - - internal static ConversationInputTranscriptionOptions DeserializeConversationInputTranscriptionOptions(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ConversationTranscriptionModel? model = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("model"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - model = new ConversationTranscriptionModel(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationInputTranscriptionOptions(model, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationInputTranscriptionOptions)} does not support writing '{options.Format}' format."); - } - } - - ConversationInputTranscriptionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual ConversationInputTranscriptionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationInputTranscriptionOptions(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationInputTranscriptionOptions)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationInputTranscriptionOptions conversationInputTranscriptionOptions) - { - if (conversationInputTranscriptionOptions == null) - { - return null; - } - return BinaryContent.Create(conversationInputTranscriptionOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationInputTranscriptionOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationInputTranscriptionOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationInputTranscriptionOptions.cs b/src/Generated/Models/ConversationInputTranscriptionOptions.cs deleted file mode 100644 index 8e3d8e35a..000000000 --- a/src/Generated/Models/ConversationInputTranscriptionOptions.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationInputTranscriptionOptions - { - private protected IDictionary _additionalBinaryDataProperties; - - public ConversationInputTranscriptionOptions() - { - } - - internal ConversationInputTranscriptionOptions(ConversationTranscriptionModel? model, IDictionary additionalBinaryDataProperties) - { - Model = model; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public ConversationTranscriptionModel? Model { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/ConversationItem.Serialization.cs b/src/Generated/Models/ConversationItem.Serialization.cs deleted file mode 100644 index 458247615..000000000 --- a/src/Generated/Models/ConversationItem.Serialization.cs +++ /dev/null @@ -1,147 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItem : IJsonModel - { - internal ConversationItem() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItem)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } - if (Optional.IsDefined(Id) && _additionalBinaryDataProperties?.ContainsKey("id") != true) - { - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - ConversationItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItem)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItem(document.RootElement, options); - } - - internal static ConversationItem DeserializeConversationItem(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - if (element.TryGetProperty("type"u8, out JsonElement discriminator)) - { - switch (discriminator.GetString()) - { - case "message": - return InternalRealtimeRequestMessageItem.DeserializeInternalRealtimeRequestMessageItem(element, options); - case "function_call": - return InternalRealtimeRequestFunctionCallItem.DeserializeInternalRealtimeRequestFunctionCallItem(element, options); - case "function_call_output": - return InternalRealtimeRequestFunctionCallOutputItem.DeserializeInternalRealtimeRequestFunctionCallOutputItem(element, options); - } - } - return UnknownRealtimeRequestItem.DeserializeUnknownRealtimeRequestItem(element, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItem)} does not support writing '{options.Format}' format."); - } - } - - ConversationItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItem(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItem)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItem conversationItem) - { - if (conversationItem == null) - { - return null; - } - return BinaryContent.Create(conversationItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItem.cs b/src/Generated/Models/ConversationItem.cs deleted file mode 100644 index 988f94a36..000000000 --- a/src/Generated/Models/ConversationItem.cs +++ /dev/null @@ -1,36 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItem - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected ConversationItem(InternalRealtimeItemType @type) - { - Type = @type; - } - - internal ConversationItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties) - { - Type = @type; - Id = id; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - internal InternalRealtimeItemType Type { get; set; } - - public string Id { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/ConversationItemCreatedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemCreatedUpdate.Serialization.cs deleted file mode 100644 index 943a2dc3c..000000000 --- a/src/Generated/Models/ConversationItemCreatedUpdate.Serialization.cs +++ /dev/null @@ -1,147 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemCreatedUpdate : IJsonModel - { - internal ConversationItemCreatedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemCreatedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("previous_item_id") != true) - { - writer.WritePropertyName("previous_item_id"u8); - writer.WriteStringValue(PreviousItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("item") != true) - { - writer.WritePropertyName("item"u8); - writer.WriteObjectValue(_internalItem, options); - } - } - - ConversationItemCreatedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationItemCreatedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemCreatedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItemCreatedUpdate(document.RootElement, options); - } - - internal static ConversationItemCreatedUpdate DeserializeConversationItemCreatedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string previousItemId = default; - InternalRealtimeConversationResponseItem internalItem = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("previous_item_id"u8)) - { - previousItemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("item"u8)) - { - internalItem = InternalRealtimeConversationResponseItem.DeserializeInternalRealtimeConversationResponseItem(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationItemCreatedUpdate(eventId, kind, additionalBinaryDataProperties, previousItemId, internalItem); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItemCreatedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationItemCreatedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationItemCreatedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItemCreatedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItemCreatedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItemCreatedUpdate conversationItemCreatedUpdate) - { - if (conversationItemCreatedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationItemCreatedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItemCreatedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItemCreatedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItemCreatedUpdate.cs b/src/Generated/Models/ConversationItemCreatedUpdate.cs deleted file mode 100644 index 6158ea73c..000000000 --- a/src/Generated/Models/ConversationItemCreatedUpdate.cs +++ /dev/null @@ -1,26 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemCreatedUpdate : ConversationUpdate - { - internal ConversationItemCreatedUpdate(string eventId, string previousItemId, InternalRealtimeConversationResponseItem internalItem) : base(eventId, ConversationUpdateKind.ItemCreated) - { - PreviousItemId = previousItemId; - _internalItem = internalItem; - } - - internal ConversationItemCreatedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string previousItemId, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) - { - PreviousItemId = previousItemId; - _internalItem = internalItem; - } - - public string PreviousItemId { get; } - } -} diff --git a/src/Generated/Models/ConversationItemDeletedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemDeletedUpdate.Serialization.cs deleted file mode 100644 index 60af8a2ea..000000000 --- a/src/Generated/Models/ConversationItemDeletedUpdate.Serialization.cs +++ /dev/null @@ -1,136 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemDeletedUpdate : IJsonModel - { - internal ConversationItemDeletedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemDeletedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - } - - ConversationItemDeletedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationItemDeletedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemDeletedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItemDeletedUpdate(document.RootElement, options); - } - - internal static ConversationItemDeletedUpdate DeserializeConversationItemDeletedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationItemDeletedUpdate(eventId, kind, additionalBinaryDataProperties, itemId); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItemDeletedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationItemDeletedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationItemDeletedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItemDeletedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItemDeletedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItemDeletedUpdate conversationItemDeletedUpdate) - { - if (conversationItemDeletedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationItemDeletedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItemDeletedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItemDeletedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItemDeletedUpdate.cs b/src/Generated/Models/ConversationItemDeletedUpdate.cs deleted file mode 100644 index c13b7b4fc..000000000 --- a/src/Generated/Models/ConversationItemDeletedUpdate.cs +++ /dev/null @@ -1,24 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemDeletedUpdate : ConversationUpdate - { - internal ConversationItemDeletedUpdate(string eventId, string itemId) : base(eventId, ConversationUpdateKind.ItemDeleted) - { - ItemId = itemId; - } - - internal ConversationItemDeletedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId) : base(eventId, kind, additionalBinaryDataProperties) - { - ItemId = itemId; - } - - public string ItemId { get; } - } -} diff --git a/src/Generated/Models/ConversationItemStatus.cs b/src/Generated/Models/ConversationItemStatus.cs index ea8827bd8..5b9885ddb 100644 --- a/src/Generated/Models/ConversationItemStatus.cs +++ b/src/Generated/Models/ConversationItemStatus.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public readonly partial struct ConversationItemStatus : IEquatable { diff --git a/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.Serialization.cs deleted file mode 100644 index 3cfbbea93..000000000 --- a/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.Serialization.cs +++ /dev/null @@ -1,176 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingAudioFinishedUpdate : IJsonModel - { - internal ConversationItemStreamingAudioFinishedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingAudioFinishedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) - { - writer.WritePropertyName("response_id"u8); - writer.WriteStringValue(ResponseId); - } - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) - { - writer.WritePropertyName("output_index"u8); - writer.WriteNumberValue(OutputIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) - { - writer.WritePropertyName("content_index"u8); - writer.WriteNumberValue(ContentIndex); - } - } - - ConversationItemStreamingAudioFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationItemStreamingAudioFinishedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingAudioFinishedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItemStreamingAudioFinishedUpdate(document.RootElement, options); - } - - internal static ConversationItemStreamingAudioFinishedUpdate DeserializeConversationItemStreamingAudioFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string responseId = default; - string itemId = default; - int outputIndex = default; - int contentIndex = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("response_id"u8)) - { - responseId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("output_index"u8)) - { - outputIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("content_index"u8)) - { - contentIndex = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationItemStreamingAudioFinishedUpdate( - eventId, - kind, - additionalBinaryDataProperties, - responseId, - itemId, - outputIndex, - contentIndex); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingAudioFinishedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationItemStreamingAudioFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationItemStreamingAudioFinishedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItemStreamingAudioFinishedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingAudioFinishedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItemStreamingAudioFinishedUpdate conversationItemStreamingAudioFinishedUpdate) - { - if (conversationItemStreamingAudioFinishedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationItemStreamingAudioFinishedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItemStreamingAudioFinishedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItemStreamingAudioFinishedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.cs b/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.cs deleted file mode 100644 index 13b867c1f..000000000 --- a/src/Generated/Models/ConversationItemStreamingAudioFinishedUpdate.cs +++ /dev/null @@ -1,36 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingAudioFinishedUpdate : ConversationUpdate - { - internal ConversationItemStreamingAudioFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex) : base(eventId, ConversationUpdateKind.ItemStreamingPartAudioFinished) - { - ResponseId = responseId; - ItemId = itemId; - OutputIndex = outputIndex; - ContentIndex = contentIndex; - } - - internal ConversationItemStreamingAudioFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex) : base(eventId, kind, additionalBinaryDataProperties) - { - ResponseId = responseId; - ItemId = itemId; - OutputIndex = outputIndex; - ContentIndex = contentIndex; - } - - public string ResponseId { get; } - - public string ItemId { get; } - - public int OutputIndex { get; } - - public int ContentIndex { get; } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.Serialization.cs deleted file mode 100644 index 513873c25..000000000 --- a/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.Serialization.cs +++ /dev/null @@ -1,188 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingAudioTranscriptionFinishedUpdate : IJsonModel - { - internal ConversationItemStreamingAudioTranscriptionFinishedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingAudioTranscriptionFinishedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) - { - writer.WritePropertyName("response_id"u8); - writer.WriteStringValue(ResponseId); - } - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) - { - writer.WritePropertyName("output_index"u8); - writer.WriteNumberValue(OutputIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) - { - writer.WritePropertyName("content_index"u8); - writer.WriteNumberValue(ContentIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("transcript") != true) - { - writer.WritePropertyName("transcript"u8); - writer.WriteStringValue(Transcript); - } - } - - ConversationItemStreamingAudioTranscriptionFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationItemStreamingAudioTranscriptionFinishedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingAudioTranscriptionFinishedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItemStreamingAudioTranscriptionFinishedUpdate(document.RootElement, options); - } - - internal static ConversationItemStreamingAudioTranscriptionFinishedUpdate DeserializeConversationItemStreamingAudioTranscriptionFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string responseId = default; - string itemId = default; - int outputIndex = default; - int contentIndex = default; - string transcript = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("response_id"u8)) - { - responseId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("output_index"u8)) - { - outputIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("content_index"u8)) - { - contentIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("transcript"u8)) - { - transcript = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationItemStreamingAudioTranscriptionFinishedUpdate( - eventId, - kind, - additionalBinaryDataProperties, - responseId, - itemId, - outputIndex, - contentIndex, - transcript); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingAudioTranscriptionFinishedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationItemStreamingAudioTranscriptionFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationItemStreamingAudioTranscriptionFinishedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItemStreamingAudioTranscriptionFinishedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingAudioTranscriptionFinishedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItemStreamingAudioTranscriptionFinishedUpdate conversationItemStreamingAudioTranscriptionFinishedUpdate) - { - if (conversationItemStreamingAudioTranscriptionFinishedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationItemStreamingAudioTranscriptionFinishedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItemStreamingAudioTranscriptionFinishedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItemStreamingAudioTranscriptionFinishedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs b/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs deleted file mode 100644 index 4fb719863..000000000 --- a/src/Generated/Models/ConversationItemStreamingAudioTranscriptionFinishedUpdate.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingAudioTranscriptionFinishedUpdate : ConversationUpdate - { - internal ConversationItemStreamingAudioTranscriptionFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string transcript) : base(eventId, ConversationUpdateKind.ItemStreamingPartAudioTranscriptionFinished) - { - ResponseId = responseId; - ItemId = itemId; - OutputIndex = outputIndex; - ContentIndex = contentIndex; - Transcript = transcript; - } - - internal ConversationItemStreamingAudioTranscriptionFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string transcript) : base(eventId, kind, additionalBinaryDataProperties) - { - ResponseId = responseId; - ItemId = itemId; - OutputIndex = outputIndex; - ContentIndex = contentIndex; - Transcript = transcript; - } - - public string ResponseId { get; } - - public string ItemId { get; } - - public int OutputIndex { get; } - - public int ContentIndex { get; } - - public string Transcript { get; } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingFinishedUpdate.Serialization.cs deleted file mode 100644 index e36fc817a..000000000 --- a/src/Generated/Models/ConversationItemStreamingFinishedUpdate.Serialization.cs +++ /dev/null @@ -1,164 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingFinishedUpdate : IJsonModel - { - internal ConversationItemStreamingFinishedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingFinishedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) - { - writer.WritePropertyName("response_id"u8); - writer.WriteStringValue(ResponseId); - } - if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) - { - writer.WritePropertyName("output_index"u8); - writer.WriteNumberValue(OutputIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("item") != true) - { - writer.WritePropertyName("item"u8); - writer.WriteObjectValue(_internalItem, options); - } - } - - ConversationItemStreamingFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationItemStreamingFinishedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingFinishedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItemStreamingFinishedUpdate(document.RootElement, options); - } - - internal static ConversationItemStreamingFinishedUpdate DeserializeConversationItemStreamingFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string responseId = default; - int outputIndex = default; - InternalRealtimeConversationResponseItem internalItem = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("response_id"u8)) - { - responseId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("output_index"u8)) - { - outputIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("item"u8)) - { - internalItem = InternalRealtimeConversationResponseItem.DeserializeInternalRealtimeConversationResponseItem(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationItemStreamingFinishedUpdate( - eventId, - kind, - additionalBinaryDataProperties, - responseId, - outputIndex, - internalItem); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingFinishedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationItemStreamingFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationItemStreamingFinishedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItemStreamingFinishedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingFinishedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItemStreamingFinishedUpdate conversationItemStreamingFinishedUpdate) - { - if (conversationItemStreamingFinishedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationItemStreamingFinishedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItemStreamingFinishedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItemStreamingFinishedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingFinishedUpdate.cs b/src/Generated/Models/ConversationItemStreamingFinishedUpdate.cs deleted file mode 100644 index d75edd563..000000000 --- a/src/Generated/Models/ConversationItemStreamingFinishedUpdate.cs +++ /dev/null @@ -1,30 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingFinishedUpdate : ConversationUpdate - { - internal ConversationItemStreamingFinishedUpdate(string eventId, string responseId, int outputIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, ConversationUpdateKind.ItemStreamingFinished) - { - ResponseId = responseId; - OutputIndex = outputIndex; - _internalItem = internalItem; - } - - internal ConversationItemStreamingFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, int outputIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) - { - ResponseId = responseId; - OutputIndex = outputIndex; - _internalItem = internalItem; - } - - public string ResponseId { get; } - - public int OutputIndex { get; } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingStartedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingStartedUpdate.Serialization.cs deleted file mode 100644 index b3870e13a..000000000 --- a/src/Generated/Models/ConversationItemStreamingStartedUpdate.Serialization.cs +++ /dev/null @@ -1,164 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingStartedUpdate : IJsonModel - { - internal ConversationItemStreamingStartedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingStartedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) - { - writer.WritePropertyName("response_id"u8); - writer.WriteStringValue(ResponseId); - } - if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) - { - writer.WritePropertyName("output_index"u8); - writer.WriteNumberValue(ItemIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("item") != true) - { - writer.WritePropertyName("item"u8); - writer.WriteObjectValue(_internalItem, options); - } - } - - ConversationItemStreamingStartedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationItemStreamingStartedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingStartedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItemStreamingStartedUpdate(document.RootElement, options); - } - - internal static ConversationItemStreamingStartedUpdate DeserializeConversationItemStreamingStartedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string responseId = default; - int itemIndex = default; - InternalRealtimeConversationResponseItem internalItem = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("response_id"u8)) - { - responseId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("output_index"u8)) - { - itemIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("item"u8)) - { - internalItem = InternalRealtimeConversationResponseItem.DeserializeInternalRealtimeConversationResponseItem(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationItemStreamingStartedUpdate( - eventId, - kind, - additionalBinaryDataProperties, - responseId, - itemIndex, - internalItem); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingStartedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationItemStreamingStartedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationItemStreamingStartedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItemStreamingStartedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingStartedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItemStreamingStartedUpdate conversationItemStreamingStartedUpdate) - { - if (conversationItemStreamingStartedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationItemStreamingStartedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItemStreamingStartedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItemStreamingStartedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingStartedUpdate.cs b/src/Generated/Models/ConversationItemStreamingStartedUpdate.cs deleted file mode 100644 index 9ab47de95..000000000 --- a/src/Generated/Models/ConversationItemStreamingStartedUpdate.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingStartedUpdate : ConversationUpdate - { - internal ConversationItemStreamingStartedUpdate(string eventId, string responseId, int itemIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, ConversationUpdateKind.ItemStreamingStarted) - { - ResponseId = responseId; - ItemIndex = itemIndex; - _internalItem = internalItem; - } - - internal ConversationItemStreamingStartedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, int itemIndex, InternalRealtimeConversationResponseItem internalItem) : base(eventId, kind, additionalBinaryDataProperties) - { - ResponseId = responseId; - ItemIndex = itemIndex; - _internalItem = internalItem; - } - - public string ResponseId { get; } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.Serialization.cs deleted file mode 100644 index 4a6c8b82d..000000000 --- a/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.Serialization.cs +++ /dev/null @@ -1,188 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingTextFinishedUpdate : IJsonModel - { - internal ConversationItemStreamingTextFinishedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingTextFinishedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) - { - writer.WritePropertyName("response_id"u8); - writer.WriteStringValue(ResponseId); - } - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) - { - writer.WritePropertyName("output_index"u8); - writer.WriteNumberValue(OutputIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) - { - writer.WritePropertyName("content_index"u8); - writer.WriteNumberValue(ContentIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("text") != true) - { - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - } - } - - ConversationItemStreamingTextFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationItemStreamingTextFinishedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemStreamingTextFinishedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItemStreamingTextFinishedUpdate(document.RootElement, options); - } - - internal static ConversationItemStreamingTextFinishedUpdate DeserializeConversationItemStreamingTextFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string responseId = default; - string itemId = default; - int outputIndex = default; - int contentIndex = default; - string text = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("response_id"u8)) - { - responseId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("output_index"u8)) - { - outputIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("content_index"u8)) - { - contentIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("text"u8)) - { - text = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationItemStreamingTextFinishedUpdate( - eventId, - kind, - additionalBinaryDataProperties, - responseId, - itemId, - outputIndex, - contentIndex, - text); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingTextFinishedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationItemStreamingTextFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationItemStreamingTextFinishedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItemStreamingTextFinishedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItemStreamingTextFinishedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItemStreamingTextFinishedUpdate conversationItemStreamingTextFinishedUpdate) - { - if (conversationItemStreamingTextFinishedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationItemStreamingTextFinishedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItemStreamingTextFinishedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItemStreamingTextFinishedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.cs b/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.cs deleted file mode 100644 index 43b1b4682..000000000 --- a/src/Generated/Models/ConversationItemStreamingTextFinishedUpdate.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemStreamingTextFinishedUpdate : ConversationUpdate - { - internal ConversationItemStreamingTextFinishedUpdate(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string text) : base(eventId, ConversationUpdateKind.ItemStreamingPartTextFinished) - { - ResponseId = responseId; - ItemId = itemId; - OutputIndex = outputIndex; - ContentIndex = contentIndex; - Text = text; - } - - internal ConversationItemStreamingTextFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string text) : base(eventId, kind, additionalBinaryDataProperties) - { - ResponseId = responseId; - ItemId = itemId; - OutputIndex = outputIndex; - ContentIndex = contentIndex; - Text = text; - } - - public string ResponseId { get; } - - public string ItemId { get; } - - public int OutputIndex { get; } - - public int ContentIndex { get; } - - public string Text { get; } - } -} diff --git a/src/Generated/Models/ConversationItemTruncatedUpdate.Serialization.cs b/src/Generated/Models/ConversationItemTruncatedUpdate.Serialization.cs deleted file mode 100644 index 352ec9ca2..000000000 --- a/src/Generated/Models/ConversationItemTruncatedUpdate.Serialization.cs +++ /dev/null @@ -1,164 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemTruncatedUpdate : IJsonModel - { - internal ConversationItemTruncatedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemTruncatedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) - { - writer.WritePropertyName("content_index"u8); - writer.WriteNumberValue(ContentIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("audio_end_ms") != true) - { - writer.WritePropertyName("audio_end_ms"u8); - writer.WriteNumberValue(AudioEndMs); - } - } - - ConversationItemTruncatedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationItemTruncatedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationItemTruncatedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItemTruncatedUpdate(document.RootElement, options); - } - - internal static ConversationItemTruncatedUpdate DeserializeConversationItemTruncatedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; - int contentIndex = default; - int audioEndMs = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("content_index"u8)) - { - contentIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("audio_end_ms"u8)) - { - audioEndMs = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationItemTruncatedUpdate( - eventId, - kind, - additionalBinaryDataProperties, - itemId, - contentIndex, - audioEndMs); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationItemTruncatedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationItemTruncatedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationItemTruncatedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationItemTruncatedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationItemTruncatedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationItemTruncatedUpdate conversationItemTruncatedUpdate) - { - if (conversationItemTruncatedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationItemTruncatedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationItemTruncatedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationItemTruncatedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationItemTruncatedUpdate.cs b/src/Generated/Models/ConversationItemTruncatedUpdate.cs deleted file mode 100644 index fab2fc08c..000000000 --- a/src/Generated/Models/ConversationItemTruncatedUpdate.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationItemTruncatedUpdate : ConversationUpdate - { - internal ConversationItemTruncatedUpdate(string eventId, string itemId, int contentIndex, int audioEndMs) : base(eventId, ConversationUpdateKind.ItemTruncated) - { - ItemId = itemId; - ContentIndex = contentIndex; - AudioEndMs = audioEndMs; - } - - internal ConversationItemTruncatedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, int audioEndMs) : base(eventId, kind, additionalBinaryDataProperties) - { - ItemId = itemId; - ContentIndex = contentIndex; - AudioEndMs = audioEndMs; - } - - public string ItemId { get; } - - public int ContentIndex { get; } - - public int AudioEndMs { get; } - } -} diff --git a/src/Generated/Models/ConversationMessageRole.cs b/src/Generated/Models/ConversationMessageRole.cs index cf5d494e2..7eb76dce4 100644 --- a/src/Generated/Models/ConversationMessageRole.cs +++ b/src/Generated/Models/ConversationMessageRole.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public readonly partial struct ConversationMessageRole : IEquatable { diff --git a/src/Generated/Models/ConversationOutputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ConversationOutputTokenUsageDetails.Serialization.cs index d7a5fc612..fbee16f6c 100644 --- a/src/Generated/Models/ConversationOutputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ConversationOutputTokenUsageDetails.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationOutputTokenUsageDetails : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("audio_tokens"u8); writer.WriteNumberValue(AudioTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationOutputTokenUsageDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static ConversationOutputTokenUsageDetails DeserializeConversationOutpu audioTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationOutputTokenUsageDetails(textTokenCount, audioTokenCount, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static ConversationOutputTokenUsageDetails DeserializeConversationOutpu BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationOutputTokenUsageDetails)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationOutputTokenUsageDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual ConversationOutputTokenUsageDetails PersistableModelCreateCore } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationOutputTokenUsageDetails conversationOutputTokenUsageDetails) - { - if (conversationOutputTokenUsageDetails == null) - { - return null; - } - return BinaryContent.Create(conversationOutputTokenUsageDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationOutputTokenUsageDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationOutputTokenUsageDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationOutputTokenUsageDetails.cs b/src/Generated/Models/ConversationOutputTokenUsageDetails.cs index 0fa593dc2..4b87f484c 100644 --- a/src/Generated/Models/ConversationOutputTokenUsageDetails.cs +++ b/src/Generated/Models/ConversationOutputTokenUsageDetails.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationOutputTokenUsageDetails { diff --git a/src/Generated/Models/ConversationRateLimitDetailsItem.Serialization.cs b/src/Generated/Models/ConversationRateLimitDetailsItem.Serialization.cs index acb78d434..fca2be443 100644 --- a/src/Generated/Models/ConversationRateLimitDetailsItem.Serialization.cs +++ b/src/Generated/Models/ConversationRateLimitDetailsItem.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationRateLimitDetailsItem : IJsonModel { @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reset_seconds"u8); writer.WriteNumberValue(Convert.ToDouble(TimeUntilReset.ToString("s\\.FFF"))); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationRateLimitDetailsItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationRateLimitDetailsItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,6 +121,7 @@ internal static ConversationRateLimitDetailsItem DeserializeConversationRateLimi timeUntilReset = TimeSpan.FromSeconds(prop.Value.GetDouble()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationRateLimitDetailsItem(name, maximumCount, remainingCount, timeUntilReset, additionalBinaryDataProperties); @@ -125,13 +129,14 @@ internal static ConversationRateLimitDetailsItem DeserializeConversationRateLimi BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationRateLimitDetailsItem)} does not support writing '{options.Format}' format."); } @@ -139,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationRateLimitDetailsItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationRateLimitDetailsItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +161,5 @@ protected virtual ConversationRateLimitDetailsItem PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationRateLimitDetailsItem conversationRateLimitDetailsItem) - { - if (conversationRateLimitDetailsItem == null) - { - return null; - } - return BinaryContent.Create(conversationRateLimitDetailsItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationRateLimitDetailsItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationRateLimitDetailsItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationRateLimitDetailsItem.cs b/src/Generated/Models/ConversationRateLimitDetailsItem.cs index e0986111a..237220f3b 100644 --- a/src/Generated/Models/ConversationRateLimitDetailsItem.cs +++ b/src/Generated/Models/ConversationRateLimitDetailsItem.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationRateLimitDetailsItem { diff --git a/src/Generated/Models/ConversationRateLimitsUpdate.Serialization.cs b/src/Generated/Models/ConversationRateLimitsUpdate.Serialization.cs deleted file mode 100644 index 2000e13fa..000000000 --- a/src/Generated/Models/ConversationRateLimitsUpdate.Serialization.cs +++ /dev/null @@ -1,146 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationRateLimitsUpdate : IJsonModel - { - internal ConversationRateLimitsUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationRateLimitsUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("rate_limits") != true) - { - writer.WritePropertyName("rate_limits"u8); - writer.WriteStartArray(); - foreach (ConversationRateLimitDetailsItem item in AllDetails) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - } - - ConversationRateLimitsUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationRateLimitsUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationRateLimitsUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationRateLimitsUpdate(document.RootElement, options); - } - - internal static ConversationRateLimitsUpdate DeserializeConversationRateLimitsUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - IReadOnlyList allDetails = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("rate_limits"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(ConversationRateLimitDetailsItem.DeserializeConversationRateLimitDetailsItem(item, options)); - } - allDetails = array; - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationRateLimitsUpdate(eventId, kind, additionalBinaryDataProperties, allDetails); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationRateLimitsUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationRateLimitsUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationRateLimitsUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationRateLimitsUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationRateLimitsUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationRateLimitsUpdate conversationRateLimitsUpdate) - { - if (conversationRateLimitsUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationRateLimitsUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationRateLimitsUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationRateLimitsUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationRateLimitsUpdate.cs b/src/Generated/Models/ConversationRateLimitsUpdate.cs deleted file mode 100644 index dfe49bd87..000000000 --- a/src/Generated/Models/ConversationRateLimitsUpdate.cs +++ /dev/null @@ -1,23 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationRateLimitsUpdate : ConversationUpdate - { - internal ConversationRateLimitsUpdate(string eventId, IEnumerable allDetails) : base(eventId, ConversationUpdateKind.RateLimitsUpdated) - { - AllDetails = allDetails.ToList(); - } - - internal ConversationRateLimitsUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, IReadOnlyList allDetails) : base(eventId, kind, additionalBinaryDataProperties) - { - AllDetails = allDetails; - } - } -} diff --git a/src/Generated/Models/ConversationResponseFinishedUpdate.Serialization.cs b/src/Generated/Models/ConversationResponseFinishedUpdate.Serialization.cs deleted file mode 100644 index 8d24424fe..000000000 --- a/src/Generated/Models/ConversationResponseFinishedUpdate.Serialization.cs +++ /dev/null @@ -1,136 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationResponseFinishedUpdate : IJsonModel - { - internal ConversationResponseFinishedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationResponseFinishedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("response") != true) - { - writer.WritePropertyName("response"u8); - writer.WriteObjectValue(_internalResponse, options); - } - } - - ConversationResponseFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationResponseFinishedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationResponseFinishedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationResponseFinishedUpdate(document.RootElement, options); - } - - internal static ConversationResponseFinishedUpdate DeserializeConversationResponseFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalRealtimeResponse internalResponse = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("response"u8)) - { - internalResponse = InternalRealtimeResponse.DeserializeInternalRealtimeResponse(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationResponseFinishedUpdate(eventId, kind, additionalBinaryDataProperties, internalResponse); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationResponseFinishedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationResponseFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationResponseFinishedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationResponseFinishedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationResponseFinishedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationResponseFinishedUpdate conversationResponseFinishedUpdate) - { - if (conversationResponseFinishedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationResponseFinishedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationResponseFinishedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationResponseFinishedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationResponseFinishedUpdate.cs b/src/Generated/Models/ConversationResponseFinishedUpdate.cs deleted file mode 100644 index ceb4b6c23..000000000 --- a/src/Generated/Models/ConversationResponseFinishedUpdate.cs +++ /dev/null @@ -1,22 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationResponseFinishedUpdate : ConversationUpdate - { - internal ConversationResponseFinishedUpdate(string eventId, InternalRealtimeResponse internalResponse) : base(eventId, ConversationUpdateKind.ResponseFinished) - { - _internalResponse = internalResponse; - } - - internal ConversationResponseFinishedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponse internalResponse) : base(eventId, kind, additionalBinaryDataProperties) - { - _internalResponse = internalResponse; - } - } -} diff --git a/src/Generated/Models/ConversationResponseOptions.Serialization.cs b/src/Generated/Models/ConversationResponseOptions.Serialization.cs index 7733221a5..e8fc6af36 100644 --- a/src/Generated/Models/ConversationResponseOptions.Serialization.cs +++ b/src/Generated/Models/ConversationResponseOptions.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationResponseOptions : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("instructions"u8); writer.WriteStringValue(Instructions); } - if (Optional.IsDefined(Voice) && _additionalBinaryDataProperties?.ContainsKey("voice") != true) - { - writer.WritePropertyName("voice"u8); - writer.WriteStringValue(Voice.Value.ToString()); - } if (Optional.IsDefined(OutputAudioFormat) && _additionalBinaryDataProperties?.ContainsKey("output_audio_format") != true) { writer.WritePropertyName("output_audio_format"u8); @@ -87,12 +83,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { writer.WritePropertyName("input"u8); writer.WriteStartArray(); - foreach (ConversationItem item in OverrideItems) + foreach (RealtimeItem item in OverrideItems) { writer.WriteObjectValue(item, options); } writer.WriteEndArray(); } + if (Optional.IsDefined(Voice) && _additionalBinaryDataProperties?.ContainsKey("voice") != true) + { + writer.WritePropertyName("voice"u8); + writer.WriteStringValue(Voice.Value.ToString()); + } if (Optional.IsCollectionDefined(_internalModalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) { writer.WritePropertyName("modalities"u8); @@ -115,6 +116,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -138,6 +140,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationResponseOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationResponseOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -156,14 +159,14 @@ internal static ConversationResponseOptions DeserializeConversationResponseOptio return null; } string instructions = default; - ConversationVoice? voice = default; - ConversationAudioFormat? outputAudioFormat = default; + RealtimeAudioFormat? outputAudioFormat = default; IList tools = default; float? temperature = default; IDictionary metadata = default; ResponseConversationSelection? conversationSelection = default; ConversationMaxTokensChoice maxOutputTokens = default; - IList overrideItems = default; + IList overrideItems = default; + ConversationVoice? voice = default; IList internalModalities = default; BinaryData internalToolChoice = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -174,22 +177,13 @@ internal static ConversationResponseOptions DeserializeConversationResponseOptio instructions = prop.Value.GetString(); continue; } - if (prop.NameEquals("voice"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - voice = new ConversationVoice(prop.Value.GetString()); - continue; - } if (prop.NameEquals("output_audio_format"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { continue; } - outputAudioFormat = new ConversationAudioFormat(prop.Value.GetString()); + outputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); continue; } if (prop.NameEquals("tools"u8)) @@ -260,14 +254,23 @@ internal static ConversationResponseOptions DeserializeConversationResponseOptio { continue; } - List array = new List(); + List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { - array.Add(ConversationItem.DeserializeConversationItem(item, options)); + array.Add(RealtimeItem.DeserializeRealtimeItem(item, options)); } overrideItems = array; continue; } + if (prop.NameEquals("voice"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + voice = new ConversationVoice(prop.Value.GetString()); + continue; + } if (prop.NameEquals("modalities"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -291,18 +294,19 @@ internal static ConversationResponseOptions DeserializeConversationResponseOptio internalToolChoice = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationResponseOptions( instructions, - voice, outputAudioFormat, tools ?? new ChangeTrackingList(), temperature, metadata ?? new ChangeTrackingDictionary(), conversationSelection, maxOutputTokens, - overrideItems ?? new ChangeTrackingList(), + overrideItems ?? new ChangeTrackingList(), + voice, internalModalities, internalToolChoice, additionalBinaryDataProperties); @@ -310,13 +314,14 @@ internal static ConversationResponseOptions DeserializeConversationResponseOptio BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationResponseOptions)} does not support writing '{options.Format}' format."); } @@ -324,6 +329,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationResponseOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationResponseOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -340,21 +346,5 @@ protected virtual ConversationResponseOptions PersistableModelCreateCore(BinaryD } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationResponseOptions conversationResponseOptions) - { - if (conversationResponseOptions == null) - { - return null; - } - return BinaryContent.Create(conversationResponseOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationResponseOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationResponseOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationResponseOptions.cs b/src/Generated/Models/ConversationResponseOptions.cs index e9b16d16d..7ac64dd4c 100644 --- a/src/Generated/Models/ConversationResponseOptions.cs +++ b/src/Generated/Models/ConversationResponseOptions.cs @@ -6,41 +6,36 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationResponseOptions { private protected IDictionary _additionalBinaryDataProperties; - public ConversationResponseOptions() + public ConversationResponseOptions() : this(null, default, null, default, null, default, null, null, default, null, null, null) { - Tools = new ChangeTrackingList(); - Metadata = new ChangeTrackingDictionary(); - OverrideItems = new ChangeTrackingList(); - _internalModalities = new ChangeTrackingList(); } - internal ConversationResponseOptions(string instructions, ConversationVoice? voice, ConversationAudioFormat? outputAudioFormat, IList tools, float? temperature, IDictionary metadata, ResponseConversationSelection? conversationSelection, ConversationMaxTokensChoice maxOutputTokens, IList overrideItems, IList internalModalities, BinaryData internalToolChoice, IDictionary additionalBinaryDataProperties) + internal ConversationResponseOptions(string instructions, RealtimeAudioFormat? outputAudioFormat, IList tools, float? temperature, IDictionary metadata, ResponseConversationSelection? conversationSelection, ConversationMaxTokensChoice maxOutputTokens, IList overrideItems, ConversationVoice? voice, IList internalModalities, BinaryData internalToolChoice, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Instructions = instructions; - Voice = voice; OutputAudioFormat = outputAudioFormat; - Tools = tools; + Tools = tools ?? new ChangeTrackingList(); Temperature = temperature; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); ConversationSelection = conversationSelection; MaxOutputTokens = maxOutputTokens; - OverrideItems = overrideItems; - _internalModalities = internalModalities; + OverrideItems = overrideItems ?? new ChangeTrackingList(); + Voice = voice; + _internalModalities = internalModalities ?? new ChangeTrackingList(); _internalToolChoice = internalToolChoice; _additionalBinaryDataProperties = additionalBinaryDataProperties; } public string Instructions { get; set; } - public ConversationVoice? Voice { get; set; } - - public ConversationAudioFormat? OutputAudioFormat { get; set; } + public RealtimeAudioFormat? OutputAudioFormat { get; set; } public IList Tools { get; } diff --git a/src/Generated/Models/ConversationResponseStartedUpdate.Serialization.cs b/src/Generated/Models/ConversationResponseStartedUpdate.Serialization.cs deleted file mode 100644 index fef5d774b..000000000 --- a/src/Generated/Models/ConversationResponseStartedUpdate.Serialization.cs +++ /dev/null @@ -1,136 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationResponseStartedUpdate : IJsonModel - { - internal ConversationResponseStartedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationResponseStartedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("response") != true) - { - writer.WritePropertyName("response"u8); - writer.WriteObjectValue(_internalResponse, options); - } - } - - ConversationResponseStartedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationResponseStartedUpdate)JsonModelCreateCore(ref reader, options); - - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationResponseStartedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationResponseStartedUpdate(document.RootElement, options); - } - - internal static ConversationResponseStartedUpdate DeserializeConversationResponseStartedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string eventId = default; - ConversationUpdateKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalRealtimeResponse internalResponse = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("event_id"u8)) - { - eventId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToConversationUpdateKind(); - continue; - } - if (prop.NameEquals("response"u8)) - { - internalResponse = InternalRealtimeResponse.DeserializeInternalRealtimeResponse(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new ConversationResponseStartedUpdate(eventId, kind, additionalBinaryDataProperties, internalResponse); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationResponseStartedUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationResponseStartedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationResponseStartedUpdate)PersistableModelCreateCore(data, options); - - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationResponseStartedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationResponseStartedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationResponseStartedUpdate conversationResponseStartedUpdate) - { - if (conversationResponseStartedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationResponseStartedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationResponseStartedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationResponseStartedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationResponseStartedUpdate.cs b/src/Generated/Models/ConversationResponseStartedUpdate.cs deleted file mode 100644 index 88ac087b9..000000000 --- a/src/Generated/Models/ConversationResponseStartedUpdate.cs +++ /dev/null @@ -1,22 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationResponseStartedUpdate : ConversationUpdate - { - internal ConversationResponseStartedUpdate(string eventId, InternalRealtimeResponse internalResponse) : base(eventId, ConversationUpdateKind.ResponseStarted) - { - _internalResponse = internalResponse; - } - - internal ConversationResponseStartedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponse internalResponse) : base(eventId, kind, additionalBinaryDataProperties) - { - _internalResponse = internalResponse; - } - } -} diff --git a/src/Generated/Models/ConversationSessionConfiguredUpdate.Serialization.cs b/src/Generated/Models/ConversationSessionConfiguredUpdate.Serialization.cs index bb455794c..00302bc5d 100644 --- a/src/Generated/Models/ConversationSessionConfiguredUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationSessionConfiguredUpdate.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationSessionConfiguredUpdate : IJsonModel { - internal ConversationSessionConfiguredUpdate() + internal ConversationSessionConfiguredUpdate() : this(RealtimeUpdateKind.SessionConfigured, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,7 +42,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ConversationSessionConfiguredUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationSessionConfiguredUpdate)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -58,20 +60,20 @@ internal static ConversationSessionConfiguredUpdate DeserializeConversationSessi { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeResponseSession internalSession = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("session"u8)) @@ -79,20 +81,22 @@ internal static ConversationSessionConfiguredUpdate DeserializeConversationSessi internalSession = InternalRealtimeResponseSession.DeserializeInternalRealtimeResponseSession(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new ConversationSessionConfiguredUpdate(eventId, kind, additionalBinaryDataProperties, internalSession); + return new ConversationSessionConfiguredUpdate(kind, eventId, additionalBinaryDataProperties, internalSession); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationSessionConfiguredUpdate)} does not support writing '{options.Format}' format."); } @@ -100,7 +104,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationSessionConfiguredUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationSessionConfiguredUpdate)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -116,21 +121,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationSessionConfiguredUpdate conversationSessionConfiguredUpdate) - { - if (conversationSessionConfiguredUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationSessionConfiguredUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationSessionConfiguredUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationSessionConfiguredUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationSessionConfiguredUpdate.cs b/src/Generated/Models/ConversationSessionConfiguredUpdate.cs index dc270af26..83fa390d9 100644 --- a/src/Generated/Models/ConversationSessionConfiguredUpdate.cs +++ b/src/Generated/Models/ConversationSessionConfiguredUpdate.cs @@ -5,16 +5,16 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - public partial class ConversationSessionConfiguredUpdate : ConversationUpdate + public partial class ConversationSessionConfiguredUpdate : RealtimeUpdate { - internal ConversationSessionConfiguredUpdate(string eventId, InternalRealtimeResponseSession internalSession) : base(eventId, ConversationUpdateKind.SessionConfigured) + internal ConversationSessionConfiguredUpdate(InternalRealtimeResponseSession internalSession) : base(RealtimeUpdateKind.SessionConfigured) { _internalSession = internalSession; } - internal ConversationSessionConfiguredUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponseSession internalSession) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationSessionConfiguredUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, InternalRealtimeResponseSession internalSession) : base(kind, eventId, additionalBinaryDataProperties) { _internalSession = internalSession; } diff --git a/src/Generated/Models/ConversationSessionOptions.Serialization.cs b/src/Generated/Models/ConversationSessionOptions.Serialization.cs index c91fc9863..5e00620ce 100644 --- a/src/Generated/Models/ConversationSessionOptions.Serialization.cs +++ b/src/Generated/Models/ConversationSessionOptions.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationSessionOptions : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("instructions"u8); writer.WriteStringValue(Instructions); } - if (Optional.IsDefined(Voice) && _additionalBinaryDataProperties?.ContainsKey("voice") != true) - { - writer.WritePropertyName("voice"u8); - writer.WriteStringValue(Voice.Value.ToString()); - } if (Optional.IsDefined(InputAudioFormat) && _additionalBinaryDataProperties?.ContainsKey("input_audio_format") != true) { writer.WritePropertyName("input_audio_format"u8); @@ -62,6 +58,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("temperature"u8); writer.WriteNumberValue(Temperature.Value); } + if (Optional.IsDefined(Voice) && _additionalBinaryDataProperties?.ContainsKey("voice") != true) + { + writer.WritePropertyName("voice"u8); + writer.WriteStringValue(Voice.Value.ToString()); + } if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { writer.WritePropertyName("model"u8); @@ -77,6 +78,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("input_audio_transcription"u8); writer.WriteObjectValue(InputTranscriptionOptions, options); } + if (Optional.IsDefined(InputNoiseReductionOptions) && _additionalBinaryDataProperties?.ContainsKey("input_audio_noise_reduction") != true) + { + writer.WritePropertyName("input_audio_noise_reduction"u8); + writer.WriteObjectValue(InputNoiseReductionOptions, options); + } if (Optional.IsCollectionDefined(_internalModalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) { writer.WritePropertyName("modalities"u8); @@ -111,6 +117,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -134,6 +141,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationSessionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationSessionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -152,14 +160,15 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions return null; } string instructions = default; - ConversationVoice? voice = default; - ConversationAudioFormat? inputAudioFormat = default; - ConversationAudioFormat? outputAudioFormat = default; + RealtimeAudioFormat? inputAudioFormat = default; + RealtimeAudioFormat? outputAudioFormat = default; IList tools = default; float? temperature = default; + ConversationVoice? voice = default; InternalRealtimeRequestSessionModel? model = default; - ConversationTurnDetectionOptions turnDetectionOptions = default; - ConversationInputTranscriptionOptions inputTranscriptionOptions = default; + TurnDetectionOptions turnDetectionOptions = default; + InputTranscriptionOptions inputTranscriptionOptions = default; + InputNoiseReductionOptions inputNoiseReductionOptions = default; IList internalModalities = default; BinaryData internalToolChoice = default; BinaryData maxResponseOutputTokens = default; @@ -171,22 +180,13 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions instructions = prop.Value.GetString(); continue; } - if (prop.NameEquals("voice"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - voice = new ConversationVoice(prop.Value.GetString()); - continue; - } if (prop.NameEquals("input_audio_format"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { continue; } - inputAudioFormat = new ConversationAudioFormat(prop.Value.GetString()); + inputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); continue; } if (prop.NameEquals("output_audio_format"u8)) @@ -195,7 +195,7 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions { continue; } - outputAudioFormat = new ConversationAudioFormat(prop.Value.GetString()); + outputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); continue; } if (prop.NameEquals("tools"u8)) @@ -221,6 +221,15 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions temperature = prop.Value.GetSingle(); continue; } + if (prop.NameEquals("voice"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + voice = new ConversationVoice(prop.Value.GetString()); + continue; + } if (prop.NameEquals("model"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -237,7 +246,7 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions turnDetectionOptions = null; continue; } - turnDetectionOptions = ConversationTurnDetectionOptions.DeserializeConversationTurnDetectionOptions(prop.Value, options); + turnDetectionOptions = TurnDetectionOptions.DeserializeTurnDetectionOptions(prop.Value, options); continue; } if (prop.NameEquals("input_audio_transcription"u8)) @@ -247,7 +256,16 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions inputTranscriptionOptions = null; continue; } - inputTranscriptionOptions = ConversationInputTranscriptionOptions.DeserializeConversationInputTranscriptionOptions(prop.Value, options); + inputTranscriptionOptions = InputTranscriptionOptions.DeserializeInputTranscriptionOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("input_audio_noise_reduction"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputNoiseReductionOptions = InputNoiseReductionOptions.DeserializeInputNoiseReductionOptions(prop.Value, options); continue; } if (prop.NameEquals("modalities"u8)) @@ -282,18 +300,20 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions maxResponseOutputTokens = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationSessionOptions( instructions, - voice, inputAudioFormat, outputAudioFormat, tools ?? new ChangeTrackingList(), temperature, + voice, model, turnDetectionOptions, inputTranscriptionOptions, + inputNoiseReductionOptions, internalModalities, internalToolChoice, maxResponseOutputTokens, @@ -302,13 +322,14 @@ internal static ConversationSessionOptions DeserializeConversationSessionOptions BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationSessionOptions)} does not support writing '{options.Format}' format."); } @@ -316,6 +337,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationSessionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationSessionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -332,21 +354,5 @@ protected virtual ConversationSessionOptions PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationSessionOptions conversationSessionOptions) - { - if (conversationSessionOptions == null) - { - return null; - } - return BinaryContent.Create(conversationSessionOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationSessionOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationSessionOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationSessionOptions.cs b/src/Generated/Models/ConversationSessionOptions.cs index 7bdfebf04..4d1b48907 100644 --- a/src/Generated/Models/ConversationSessionOptions.cs +++ b/src/Generated/Models/ConversationSessionOptions.cs @@ -6,30 +6,30 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationSessionOptions { private protected IDictionary _additionalBinaryDataProperties; - public ConversationSessionOptions() + public ConversationSessionOptions() : this(null, default, default, null, default, default, default, null, null, null, null, null, null, null) { - Tools = new ChangeTrackingList(); - _internalModalities = new ChangeTrackingList(); } - internal ConversationSessionOptions(string instructions, ConversationVoice? voice, ConversationAudioFormat? inputAudioFormat, ConversationAudioFormat? outputAudioFormat, IList tools, float? temperature, InternalRealtimeRequestSessionModel? model, ConversationTurnDetectionOptions turnDetectionOptions, ConversationInputTranscriptionOptions inputTranscriptionOptions, IList internalModalities, BinaryData internalToolChoice, BinaryData maxResponseOutputTokens, IDictionary additionalBinaryDataProperties) + internal ConversationSessionOptions(string instructions, RealtimeAudioFormat? inputAudioFormat, RealtimeAudioFormat? outputAudioFormat, IList tools, float? temperature, ConversationVoice? voice, InternalRealtimeRequestSessionModel? model, TurnDetectionOptions turnDetectionOptions, InputTranscriptionOptions inputTranscriptionOptions, InputNoiseReductionOptions inputNoiseReductionOptions, IList internalModalities, BinaryData internalToolChoice, BinaryData maxResponseOutputTokens, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Instructions = instructions; - Voice = voice; InputAudioFormat = inputAudioFormat; OutputAudioFormat = outputAudioFormat; - Tools = tools; + Tools = tools ?? new ChangeTrackingList(); Temperature = temperature; + Voice = voice; Model = model; TurnDetectionOptions = turnDetectionOptions; InputTranscriptionOptions = inputTranscriptionOptions; - _internalModalities = internalModalities; + InputNoiseReductionOptions = inputNoiseReductionOptions; + _internalModalities = internalModalities ?? new ChangeTrackingList(); _internalToolChoice = internalToolChoice; _maxResponseOutputTokens = maxResponseOutputTokens; _additionalBinaryDataProperties = additionalBinaryDataProperties; @@ -37,11 +37,9 @@ internal ConversationSessionOptions(string instructions, ConversationVoice? voic public string Instructions { get; set; } - public ConversationVoice? Voice { get; set; } - - public ConversationAudioFormat? InputAudioFormat { get; set; } + public RealtimeAudioFormat? InputAudioFormat { get; set; } - public ConversationAudioFormat? OutputAudioFormat { get; set; } + public RealtimeAudioFormat? OutputAudioFormat { get; set; } public IList Tools { get; } diff --git a/src/Generated/Models/ConversationSessionStartedUpdate.Serialization.cs b/src/Generated/Models/ConversationSessionStartedUpdate.Serialization.cs index b1f22da01..50274c137 100644 --- a/src/Generated/Models/ConversationSessionStartedUpdate.Serialization.cs +++ b/src/Generated/Models/ConversationSessionStartedUpdate.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationSessionStartedUpdate : IJsonModel { - internal ConversationSessionStartedUpdate() + internal ConversationSessionStartedUpdate() : this(RealtimeUpdateKind.SessionStarted, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,7 +42,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ConversationSessionStartedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ConversationSessionStartedUpdate)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -58,20 +60,20 @@ internal static ConversationSessionStartedUpdate DeserializeConversationSessionS { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeResponseSession internalSession = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("session"u8)) @@ -79,20 +81,22 @@ internal static ConversationSessionStartedUpdate DeserializeConversationSessionS internalSession = InternalRealtimeResponseSession.DeserializeInternalRealtimeResponseSession(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new ConversationSessionStartedUpdate(eventId, kind, additionalBinaryDataProperties, internalSession); + return new ConversationSessionStartedUpdate(kind, eventId, additionalBinaryDataProperties, internalSession); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationSessionStartedUpdate)} does not support writing '{options.Format}' format."); } @@ -100,7 +104,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationSessionStartedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ConversationSessionStartedUpdate)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -116,21 +121,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationSessionStartedUpdate conversationSessionStartedUpdate) - { - if (conversationSessionStartedUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationSessionStartedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationSessionStartedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationSessionStartedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationSessionStartedUpdate.cs b/src/Generated/Models/ConversationSessionStartedUpdate.cs index ba2631e10..fa732417e 100644 --- a/src/Generated/Models/ConversationSessionStartedUpdate.cs +++ b/src/Generated/Models/ConversationSessionStartedUpdate.cs @@ -5,16 +5,16 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - public partial class ConversationSessionStartedUpdate : ConversationUpdate + public partial class ConversationSessionStartedUpdate : RealtimeUpdate { - internal ConversationSessionStartedUpdate(string eventId, InternalRealtimeResponseSession internalSession) : base(eventId, ConversationUpdateKind.SessionStarted) + internal ConversationSessionStartedUpdate(InternalRealtimeResponseSession internalSession) : base(RealtimeUpdateKind.SessionStarted) { _internalSession = internalSession; } - internal ConversationSessionStartedUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeResponseSession internalSession) : base(eventId, kind, additionalBinaryDataProperties) + internal ConversationSessionStartedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, InternalRealtimeResponseSession internalSession) : base(kind, eventId, additionalBinaryDataProperties) { _internalSession = internalSession; } diff --git a/src/Generated/Models/ConversationStatus.cs b/src/Generated/Models/ConversationStatus.cs index 23700eb55..223f5680e 100644 --- a/src/Generated/Models/ConversationStatus.cs +++ b/src/Generated/Models/ConversationStatus.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public readonly partial struct ConversationStatus : IEquatable { diff --git a/src/Generated/Models/ConversationStatusDetails.Serialization.cs b/src/Generated/Models/ConversationStatusDetails.Serialization.cs index b7b3aa3b1..03c672a9e 100644 --- a/src/Generated/Models/ConversationStatusDetails.Serialization.cs +++ b/src/Generated/Models/ConversationStatusDetails.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationStatusDetails : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,6 +28,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ConversationStatusDetails)} does not support writing '{format}' format."); } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.Value.ToString()); + } if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); @@ -42,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("error"u8); writer.WriteObjectValue(Error, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationStatusDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationStatusDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,12 +90,22 @@ internal static ConversationStatusDetails DeserializeConversationStatusDetails(J { return null; } + InternalRealtimeResponseStatusDetailsType? kind = default; ConversationStatus statusKind = default; ConversationIncompleteReason? incompleteReason = default; InternalRealtimeResponseStatusDetailsError error = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { + if (prop.NameEquals("type"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + kind = new InternalRealtimeResponseStatusDetailsType(prop.Value.GetString()); + continue; + } if (prop.NameEquals("type"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -115,20 +133,22 @@ internal static ConversationStatusDetails DeserializeConversationStatusDetails(J error = InternalRealtimeResponseStatusDetailsError.DeserializeInternalRealtimeResponseStatusDetailsError(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new ConversationStatusDetails(statusKind, incompleteReason, error, additionalBinaryDataProperties); + return new ConversationStatusDetails(kind, statusKind, incompleteReason, error, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationStatusDetails)} does not support writing '{options.Format}' format."); } @@ -136,6 +156,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationStatusDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationStatusDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -152,21 +173,5 @@ protected virtual ConversationStatusDetails PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationStatusDetails conversationStatusDetails) - { - if (conversationStatusDetails == null) - { - return null; - } - return BinaryContent.Create(conversationStatusDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationStatusDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationStatusDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationStatusDetails.cs b/src/Generated/Models/ConversationStatusDetails.cs index 53a06b7f0..40506973d 100644 --- a/src/Generated/Models/ConversationStatusDetails.cs +++ b/src/Generated/Models/ConversationStatusDetails.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationStatusDetails { @@ -15,14 +15,17 @@ internal ConversationStatusDetails() { } - internal ConversationStatusDetails(ConversationStatus statusKind, ConversationIncompleteReason? incompleteReason, InternalRealtimeResponseStatusDetailsError error, IDictionary additionalBinaryDataProperties) + internal ConversationStatusDetails(InternalRealtimeResponseStatusDetailsType? kind, ConversationStatus statusKind, ConversationIncompleteReason? incompleteReason, InternalRealtimeResponseStatusDetailsError error, IDictionary additionalBinaryDataProperties) { + Kind = kind; StatusKind = statusKind; IncompleteReason = incompleteReason; Error = error; _additionalBinaryDataProperties = additionalBinaryDataProperties; } + internal InternalRealtimeResponseStatusDetailsType? Kind { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ConversationTokenUsage.Serialization.cs b/src/Generated/Models/ConversationTokenUsage.Serialization.cs index 1ca3c5b52..ee3e7b62e 100644 --- a/src/Generated/Models/ConversationTokenUsage.Serialization.cs +++ b/src/Generated/Models/ConversationTokenUsage.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationTokenUsage : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,6 +53,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -75,6 +77,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationTokenUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -145,6 +148,7 @@ internal static ConversationTokenUsage DeserializeConversationTokenUsage(JsonEle totalTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ConversationTokenUsage( @@ -158,13 +162,14 @@ internal static ConversationTokenUsage DeserializeConversationTokenUsage(JsonEle BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationTokenUsage)} does not support writing '{options.Format}' format."); } @@ -172,6 +177,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationTokenUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -188,21 +194,5 @@ protected virtual ConversationTokenUsage PersistableModelCreateCore(BinaryData d } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationTokenUsage conversationTokenUsage) - { - if (conversationTokenUsage == null) - { - return null; - } - return BinaryContent.Create(conversationTokenUsage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationTokenUsage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationTokenUsage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationTokenUsage.cs b/src/Generated/Models/ConversationTokenUsage.cs index 4ea2214fd..d62deb937 100644 --- a/src/Generated/Models/ConversationTokenUsage.cs +++ b/src/Generated/Models/ConversationTokenUsage.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public partial class ConversationTokenUsage { diff --git a/src/Generated/Models/ConversationTool.Serialization.cs b/src/Generated/Models/ConversationTool.Serialization.cs index cee9fb1ee..e8ae4179e 100644 --- a/src/Generated/Models/ConversationTool.Serialization.cs +++ b/src/Generated/Models/ConversationTool.Serialization.cs @@ -3,15 +3,15 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { [PersistableModelProxy(typeof(UnknownRealtimeTool))] - public abstract partial class ConversationTool : IJsonModel + public partial class ConversationTool : IJsonModel { internal ConversationTool() { @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ConversationTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ConversationTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -89,13 +92,14 @@ internal static ConversationTool DeserializeConversationTool(JsonElement element BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationTool)} does not support writing '{options.Format}' format."); } @@ -103,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ConversationTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -119,21 +124,5 @@ protected virtual ConversationTool PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationTool conversationTool) - { - if (conversationTool == null) - { - return null; - } - return BinaryContent.Create(conversationTool, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationTool(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationTool(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ConversationTool.cs b/src/Generated/Models/ConversationTool.cs index 3e74df570..b596b0613 100644 --- a/src/Generated/Models/ConversationTool.cs +++ b/src/Generated/Models/ConversationTool.cs @@ -5,9 +5,9 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - public abstract partial class ConversationTool + public partial class ConversationTool { private protected IDictionary _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ConversationToolChoiceKind.Serialization.cs b/src/Generated/Models/ConversationToolChoiceKind.Serialization.cs index 106ef37f7..70649ac9a 100644 --- a/src/Generated/Models/ConversationToolChoiceKind.Serialization.cs +++ b/src/Generated/Models/ConversationToolChoiceKind.Serialization.cs @@ -4,7 +4,7 @@ using System; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal static partial class ConversationToolChoiceKindExtensions { diff --git a/src/Generated/Models/ConversationToolKind.cs b/src/Generated/Models/ConversationToolKind.cs index 64f0a0eea..bc0cdd846 100644 --- a/src/Generated/Models/ConversationToolKind.cs +++ b/src/Generated/Models/ConversationToolKind.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public readonly partial struct ConversationToolKind : IEquatable { diff --git a/src/Generated/Models/ConversationTranscriptionModel.cs b/src/Generated/Models/ConversationTranscriptionModel.cs deleted file mode 100644 index 1b81388c4..000000000 --- a/src/Generated/Models/ConversationTranscriptionModel.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public readonly partial struct ConversationTranscriptionModel : IEquatable - { - private readonly string _value; - private const string Whisper1Value = "whisper-1"; - - public ConversationTranscriptionModel(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static ConversationTranscriptionModel Whisper1 { get; } = new ConversationTranscriptionModel(Whisper1Value); - - public static bool operator ==(ConversationTranscriptionModel left, ConversationTranscriptionModel right) => left.Equals(right); - - public static bool operator !=(ConversationTranscriptionModel left, ConversationTranscriptionModel right) => !left.Equals(right); - - public static implicit operator ConversationTranscriptionModel(string value) => new ConversationTranscriptionModel(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is ConversationTranscriptionModel other && Equals(other); - - public bool Equals(ConversationTranscriptionModel 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/ConversationTurnDetectionKind.Serialization.cs b/src/Generated/Models/ConversationTurnDetectionKind.Serialization.cs deleted file mode 100644 index b9c1d3096..000000000 --- a/src/Generated/Models/ConversationTurnDetectionKind.Serialization.cs +++ /dev/null @@ -1,26 +0,0 @@ -// - -#nullable disable - -using System; - -namespace OpenAI.RealtimeConversation -{ - internal static partial class ConversationTurnDetectionKindExtensions - { - public static string ToSerialString(this ConversationTurnDetectionKind value) => value switch - { - ConversationTurnDetectionKind.ServerVoiceActivityDetection => "server_vad", - _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ConversationTurnDetectionKind value.") - }; - - public static ConversationTurnDetectionKind ToConversationTurnDetectionKind(this string value) - { - if (StringComparer.OrdinalIgnoreCase.Equals(value, "server_vad")) - { - return ConversationTurnDetectionKind.ServerVoiceActivityDetection; - } - throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ConversationTurnDetectionKind value."); - } - } -} diff --git a/src/Generated/Models/ConversationTurnDetectionOptions.Serialization.cs b/src/Generated/Models/ConversationTurnDetectionOptions.Serialization.cs deleted file mode 100644 index f122cafbd..000000000 --- a/src/Generated/Models/ConversationTurnDetectionOptions.Serialization.cs +++ /dev/null @@ -1,121 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationTurnDetectionOptions : IJsonModel - { - internal ConversationTurnDetectionOptions() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Kind.ToSerialString()); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - ConversationTurnDetectionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual ConversationTurnDetectionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationTurnDetectionOptions(document.RootElement, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support writing '{options.Format}' format."); - } - } - - ConversationTurnDetectionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual ConversationTurnDetectionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationTurnDetectionOptions(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationTurnDetectionOptions conversationTurnDetectionOptions) - { - if (conversationTurnDetectionOptions == null) - { - return null; - } - return BinaryContent.Create(conversationTurnDetectionOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationTurnDetectionOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationTurnDetectionOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationTurnDetectionOptions.cs b/src/Generated/Models/ConversationTurnDetectionOptions.cs deleted file mode 100644 index 810d69398..000000000 --- a/src/Generated/Models/ConversationTurnDetectionOptions.cs +++ /dev/null @@ -1,31 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationTurnDetectionOptions - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected ConversationTurnDetectionOptions(ConversationTurnDetectionKind kind) - { - Kind = kind; - } - - internal ConversationTurnDetectionOptions(ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties) - { - Kind = kind; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/ConversationUpdate.Serialization.cs b/src/Generated/Models/ConversationUpdate.Serialization.cs deleted file mode 100644 index 08fe03b63..000000000 --- a/src/Generated/Models/ConversationUpdate.Serialization.cs +++ /dev/null @@ -1,126 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationUpdate : IJsonModel - { - internal ConversationUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationUpdate)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("event_id") != true) - { - writer.WritePropertyName("event_id"u8); - writer.WriteStringValue(EventId); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Kind.ToSerialString()); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - ConversationUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ConversationUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationUpdate(document.RootElement, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ConversationUpdate)} does not support writing '{options.Format}' format."); - } - } - - ConversationUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeConversationUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ConversationUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ConversationUpdate conversationUpdate) - { - if (conversationUpdate == null) - { - return null; - } - return BinaryContent.Create(conversationUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ConversationUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeConversationUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/ConversationUpdate.cs b/src/Generated/Models/ConversationUpdate.cs deleted file mode 100644 index 8fd2bfb48..000000000 --- a/src/Generated/Models/ConversationUpdate.cs +++ /dev/null @@ -1,35 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - public partial class ConversationUpdate - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected ConversationUpdate(string eventId, ConversationUpdateKind kind) - { - EventId = eventId; - Kind = kind; - } - - internal ConversationUpdate(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties) - { - EventId = eventId; - Kind = kind; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public string EventId { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/ConversationUpdateKind.Serialization.cs b/src/Generated/Models/ConversationUpdateKind.Serialization.cs deleted file mode 100644 index f86fbce70..000000000 --- a/src/Generated/Models/ConversationUpdateKind.Serialization.cs +++ /dev/null @@ -1,10 +0,0 @@ -// - -#nullable disable - -namespace OpenAI.RealtimeConversation -{ - internal static partial class ConversationUpdateKindExtensions - { - } -} diff --git a/src/Generated/Models/ConversationVoice.cs b/src/Generated/Models/ConversationVoice.cs index 5ee367c7c..bd2c89de0 100644 --- a/src/Generated/Models/ConversationVoice.cs +++ b/src/Generated/Models/ConversationVoice.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public readonly partial struct ConversationVoice : IEquatable { @@ -16,6 +16,9 @@ namespace OpenAI.RealtimeConversation private const string BalladValue = "ballad"; private const string CoralValue = "coral"; private const string EchoValue = "echo"; + private const string FableValue = "fable"; + private const string OnyxValue = "onyx"; + private const string NovaValue = "nova"; private const string SageValue = "sage"; private const string ShimmerValue = "shimmer"; private const string VerseValue = "verse"; @@ -37,6 +40,12 @@ public ConversationVoice(string value) public static ConversationVoice Echo { get; } = new ConversationVoice(EchoValue); + public static ConversationVoice Fable { get; } = new ConversationVoice(FableValue); + + public static ConversationVoice Onyx { get; } = new ConversationVoice(OnyxValue); + + public static ConversationVoice Nova { get; } = new ConversationVoice(NovaValue); + public static ConversationVoice Sage { get; } = new ConversationVoice(SageValue); public static ConversationVoice Shimmer { get; } = new ConversationVoice(ShimmerValue); diff --git a/src/Generated/Models/DeveloperChatMessage.Serialization.cs b/src/Generated/Models/DeveloperChatMessage.Serialization.cs index c017616a4..91dd91a32 100644 --- a/src/Generated/Models/DeveloperChatMessage.Serialization.cs +++ b/src/Generated/Models/DeveloperChatMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,7 @@ namespace OpenAI.Chat { public partial class DeveloperChatMessage : IJsonModel { + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -30,6 +31,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri DeveloperChatMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (DeveloperChatMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,6 +70,7 @@ internal static DeveloperChatMessage DeserializeDeveloperChatMessage(JsonElement participantName = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new DeveloperChatMessage(content, role, additionalBinaryDataProperties, participantName); @@ -75,13 +78,14 @@ internal static DeveloperChatMessage DeserializeDeveloperChatMessage(JsonElement BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(DeveloperChatMessage)} does not support writing '{options.Format}' format."); } @@ -89,6 +93,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions DeveloperChatMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (DeveloperChatMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -105,21 +110,5 @@ protected override ChatMessage PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(DeveloperChatMessage developerChatMessage) - { - if (developerChatMessage == null) - { - return null; - } - return BinaryContent.Create(developerChatMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator DeveloperChatMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeDeveloperChatMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/DeveloperChatMessage.cs b/src/Generated/Models/DeveloperChatMessage.cs index 5d416bb89..6d26223ca 100644 --- a/src/Generated/Models/DeveloperChatMessage.cs +++ b/src/Generated/Models/DeveloperChatMessage.cs @@ -9,6 +9,10 @@ namespace OpenAI.Chat { public partial class DeveloperChatMessage : ChatMessage { + internal DeveloperChatMessage() : this(null, ChatMessageRole.Developer, null, null) + { + } + internal DeveloperChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties, string participantName) : base(content, role, additionalBinaryDataProperties) { ParticipantName = participantName; diff --git a/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs b/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs index df010fc12..77536f192 100644 --- a/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs +++ b/src/Generated/Models/EmbeddingGenerationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Embeddings { public partial class EmbeddingGenerationOptions : IJsonModel { + public EmbeddingGenerationOptions() + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -59,6 +64,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -82,6 +88,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit EmbeddingGenerationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual EmbeddingGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -140,6 +147,7 @@ internal static EmbeddingGenerationOptions DeserializeEmbeddingGenerationOptions endUserId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new EmbeddingGenerationOptions( @@ -153,13 +161,14 @@ internal static EmbeddingGenerationOptions DeserializeEmbeddingGenerationOptions BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(EmbeddingGenerationOptions)} does not support writing '{options.Format}' format."); } @@ -167,6 +176,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions EmbeddingGenerationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual EmbeddingGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -183,21 +193,5 @@ protected virtual EmbeddingGenerationOptions PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(EmbeddingGenerationOptions embeddingGenerationOptions) - { - if (embeddingGenerationOptions == null) - { - return null; - } - return BinaryContent.Create(embeddingGenerationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator EmbeddingGenerationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeEmbeddingGenerationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs b/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs index 4e0259033..03e9b2cb6 100644 --- a/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs +++ b/src/Generated/Models/EmbeddingTokenUsage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit EmbeddingTokenUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual EmbeddingTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static EmbeddingTokenUsage DeserializeEmbeddingTokenUsage(JsonElement e totalTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new EmbeddingTokenUsage(inputTokenCount, totalTokenCount, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static EmbeddingTokenUsage DeserializeEmbeddingTokenUsage(JsonElement e BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(EmbeddingTokenUsage)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions EmbeddingTokenUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual EmbeddingTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual EmbeddingTokenUsage PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(EmbeddingTokenUsage embeddingTokenUsage) - { - if (embeddingTokenUsage == null) - { - return null; - } - return BinaryContent.Create(embeddingTokenUsage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator EmbeddingTokenUsage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeEmbeddingTokenUsage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileChunkingStrategy.Serialization.cs b/src/Generated/Models/FileChunkingStrategy.Serialization.cs index db0c67603..8f1127a1f 100644 --- a/src/Generated/Models/FileChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/FileChunkingStrategy.Serialization.cs @@ -3,14 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.VectorStores { - [PersistableModelProxy(typeof(InternalUnknownFileChunkingStrategyResponseParamProxy))] + [PersistableModelProxy(typeof(InternalUnknownDotNetCombinedChunkingStrategyParam))] public abstract partial class FileChunkingStrategy : IJsonModel { internal FileChunkingStrategy() @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FileChunkingStrategy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -80,26 +83,27 @@ internal static FileChunkingStrategy DeserializeFileChunkingStrategy(JsonElement { switch (discriminator.GetString()) { + case "auto": + return InternalDotNetCombinedAutoChunkingStrategyParam.DeserializeInternalDotNetCombinedAutoChunkingStrategyParam(element, options); case "static": return StaticFileChunkingStrategy.DeserializeStaticFileChunkingStrategy(element, options); case "other": - return InternalUnknownChunkingStrategy.DeserializeInternalUnknownChunkingStrategy(element, options); - case "auto": - return InternalAutoChunkingStrategy.DeserializeInternalAutoChunkingStrategy(element, options); + return InternalDotNetCombinedOtherChunkingStrategyParam.DeserializeInternalDotNetCombinedOtherChunkingStrategyParam(element, options); } } - return InternalUnknownFileChunkingStrategyResponseParamProxy.DeserializeInternalUnknownFileChunkingStrategyResponseParamProxy(element, options); + return InternalUnknownDotNetCombinedChunkingStrategyParam.DeserializeInternalUnknownDotNetCombinedChunkingStrategyParam(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileChunkingStrategy)} does not support writing '{options.Format}' format."); } @@ -107,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileChunkingStrategy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -123,21 +128,5 @@ protected virtual FileChunkingStrategy PersistableModelCreateCore(BinaryData dat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileChunkingStrategy fileChunkingStrategy) - { - if (fileChunkingStrategy == null) - { - return null; - } - return BinaryContent.Create(fileChunkingStrategy, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileChunkingStrategy(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileChunkingStrategy(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileChunkingStrategy.cs b/src/Generated/Models/FileChunkingStrategy.cs index 8d2b27374..bf902696a 100644 --- a/src/Generated/Models/FileChunkingStrategy.cs +++ b/src/Generated/Models/FileChunkingStrategy.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI.Responses; namespace OpenAI.VectorStores { @@ -11,18 +12,18 @@ public abstract partial class FileChunkingStrategy { private protected IDictionary _additionalBinaryDataProperties; - private protected FileChunkingStrategy(string @type) + private protected FileChunkingStrategy(InternalDotNetCombinedChunkingStrategyParamType2 kind) { - Type = @type; + Kind = kind; } - internal FileChunkingStrategy(string @type, IDictionary additionalBinaryDataProperties) + internal FileChunkingStrategy(InternalDotNetCombinedChunkingStrategyParamType2 kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalDotNetCombinedChunkingStrategyParamType2 Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/FileDeletionResult.Serialization.cs b/src/Generated/Models/FileDeletionResult.Serialization.cs index 060a64dc4..f3dae043a 100644 --- a/src/Generated/Models/FileDeletionResult.Serialization.cs +++ b/src/Generated/Models/FileDeletionResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,8 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FileDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FileDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,7 +91,7 @@ internal static FileDeletionResult DeserializeFileDeletionResult(JsonElement ele } bool deleted = default; string fileId = default; - InternalDeleteFileResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -104,9 +107,10 @@ internal static FileDeletionResult DeserializeFileDeletionResult(JsonElement ele } if (prop.NameEquals("object"u8)) { - @object = new InternalDeleteFileResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileDeletionResult(deleted, fileId, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static FileDeletionResult DeserializeFileDeletionResult(JsonElement ele BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileDeletionResult)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FileDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual FileDeletionResult PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileDeletionResult fileDeletionResult) - { - if (fileDeletionResult == null) - { - return null; - } - return BinaryContent.Create(fileDeletionResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileDeletionResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileDeletionResult.cs b/src/Generated/Models/FileDeletionResult.cs index 16dcb93b1..1be0a8e1e 100644 --- a/src/Generated/Models/FileDeletionResult.cs +++ b/src/Generated/Models/FileDeletionResult.cs @@ -17,7 +17,7 @@ internal FileDeletionResult(bool deleted, string fileId) FileId = fileId; } - internal FileDeletionResult(bool deleted, string fileId, InternalDeleteFileResponseObject @object, IDictionary additionalBinaryDataProperties) + internal FileDeletionResult(bool deleted, string fileId, string @object, IDictionary additionalBinaryDataProperties) { Deleted = deleted; FileId = fileId; diff --git a/src/Generated/Models/FileFromStoreRemovalResult.Serialization.cs b/src/Generated/Models/FileFromStoreRemovalResult.Serialization.cs index a7909c761..d8e1d85ed 100644 --- a/src/Generated/Models/FileFromStoreRemovalResult.Serialization.cs +++ b/src/Generated/Models/FileFromStoreRemovalResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,8 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FileFromStoreRemovalResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FileFromStoreRemovalResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,7 +91,7 @@ internal static FileFromStoreRemovalResult DeserializeFileFromStoreRemovalResult } string fileId = default; bool removed = default; - InternalDeleteVectorStoreFileResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -104,9 +107,10 @@ internal static FileFromStoreRemovalResult DeserializeFileFromStoreRemovalResult } if (prop.NameEquals("object"u8)) { - @object = new InternalDeleteVectorStoreFileResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileFromStoreRemovalResult(fileId, removed, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static FileFromStoreRemovalResult DeserializeFileFromStoreRemovalResult BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileFromStoreRemovalResult)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileFromStoreRemovalResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FileFromStoreRemovalResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual FileFromStoreRemovalResult PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileFromStoreRemovalResult fileFromStoreRemovalResult) - { - if (fileFromStoreRemovalResult == null) - { - return null; - } - return BinaryContent.Create(fileFromStoreRemovalResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileFromStoreRemovalResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileFromStoreRemovalResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileFromStoreRemovalResult.cs b/src/Generated/Models/FileFromStoreRemovalResult.cs index d2934eb72..f9a05fdcc 100644 --- a/src/Generated/Models/FileFromStoreRemovalResult.cs +++ b/src/Generated/Models/FileFromStoreRemovalResult.cs @@ -17,7 +17,7 @@ internal FileFromStoreRemovalResult(string fileId, bool removed) Removed = removed; } - internal FileFromStoreRemovalResult(string fileId, bool removed, InternalDeleteVectorStoreFileResponseObject @object, IDictionary additionalBinaryDataProperties) + internal FileFromStoreRemovalResult(string fileId, bool removed, string @object, IDictionary additionalBinaryDataProperties) { FileId = fileId; Removed = removed; diff --git a/src/Generated/Models/FileSearchCallResponseItem.Serialization.cs b/src/Generated/Models/FileSearchCallResponseItem.Serialization.cs index 19ede7a6f..6356f7b58 100644 --- a/src/Generated/Models/FileSearchCallResponseItem.Serialization.cs +++ b/src/Generated/Models/FileSearchCallResponseItem.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class FileSearchCallResponseItem : IJsonModel { - internal FileSearchCallResponseItem() + internal FileSearchCallResponseItem() : this(InternalItemType.FileSearchCall, null, null, null, null, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(FileSearchCallResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("status") != true) - { - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToSerialString()); - } if (_additionalBinaryDataProperties?.ContainsKey("queries") != true) { writer.WritePropertyName("queries"u8); @@ -52,27 +48,27 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri } writer.WriteEndArray(); } - if (_additionalBinaryDataProperties?.ContainsKey("results") != true) + if (Optional.IsCollectionDefined(Results) && _additionalBinaryDataProperties?.ContainsKey("results") != true) { - if (Optional.IsCollectionDefined(Results)) - { - writer.WritePropertyName("results"u8); - writer.WriteStartArray(); - foreach (FileSearchCallResult item in Results) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else + writer.WritePropertyName("results"u8); + writer.WriteStartArray(); + foreach (FileSearchCallResult item in Results) { - writer.WriteNull("results"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); + } + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup + if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.Value.ToSerialString()); } } FileSearchCallResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FileSearchCallResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -90,17 +86,17 @@ internal static FileSearchCallResponseItem DeserializeFileSearchCallResponseItem { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - FileSearchCallStatus status = default; IList queries = default; IList results = default; + FileSearchCallStatus? status = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -108,11 +104,6 @@ internal static FileSearchCallResponseItem DeserializeFileSearchCallResponseItem id = prop.Value.GetString(); continue; } - if (prop.NameEquals("status"u8)) - { - status = prop.Value.GetString().ToFileSearchCallStatus(); - continue; - } if (prop.NameEquals("queries"u8)) { List array = new List(); @@ -134,7 +125,6 @@ internal static FileSearchCallResponseItem DeserializeFileSearchCallResponseItem { if (prop.Value.ValueKind == JsonValueKind.Null) { - results = new ChangeTrackingList(); continue; } List array = new List(); @@ -145,26 +135,33 @@ internal static FileSearchCallResponseItem DeserializeFileSearchCallResponseItem results = array; continue; } + if (prop.NameEquals("status"u8)) + { + status = prop.Value.GetString().ToFileSearchCallStatus(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileSearchCallResponseItem( - @type, + kind, id, additionalBinaryDataProperties, - status, queries, - results); + results ?? new ChangeTrackingList(), + status); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileSearchCallResponseItem)} does not support writing '{options.Format}' format."); } @@ -172,6 +169,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileSearchCallResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FileSearchCallResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -188,21 +186,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileSearchCallResponseItem fileSearchCallResponseItem) - { - if (fileSearchCallResponseItem == null) - { - return null; - } - return BinaryContent.Create(fileSearchCallResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileSearchCallResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileSearchCallResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileSearchCallResponseItem.cs b/src/Generated/Models/FileSearchCallResponseItem.cs index c47b7468f..2f7194e25 100644 --- a/src/Generated/Models/FileSearchCallResponseItem.cs +++ b/src/Generated/Models/FileSearchCallResponseItem.cs @@ -11,25 +11,23 @@ namespace OpenAI.Responses { public partial class FileSearchCallResponseItem : ResponseItem { - public FileSearchCallResponseItem(IEnumerable queries, IEnumerable results) : base(InternalResponsesItemType.FileSearchCall) + internal FileSearchCallResponseItem(string id, IEnumerable queries, FileSearchCallStatus? status) : base(InternalItemType.FileSearchCall, id) { - Argument.AssertNotNull(queries, nameof(queries)); - Queries = queries.ToList(); - Results = results?.ToList(); + Results = new ChangeTrackingList(); + Status = status; } - internal FileSearchCallResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, FileSearchCallStatus status, IList queries, IList results) : base(@type, id, additionalBinaryDataProperties) + internal FileSearchCallResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, IList queries, IList results, FileSearchCallStatus? status) : base(kind, id, additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections + Queries = queries ?? new ChangeTrackingList(); + Results = results ?? new ChangeTrackingList(); Status = status; - Queries = queries; - Results = results; } - public FileSearchCallStatus Status { get; } - public IList Queries { get; } - public IList Results { get; set; } + public IList Results { get; } } } diff --git a/src/Generated/Models/FileSearchCallResult.Serialization.cs b/src/Generated/Models/FileSearchCallResult.Serialization.cs index 1bbf977ce..7d455f565 100644 --- a/src/Generated/Models/FileSearchCallResult.Serialization.cs +++ b/src/Generated/Models/FileSearchCallResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("filename"u8); writer.WriteStringValue(Filename); } + if (Optional.IsDefined(Score) && _additionalBinaryDataProperties?.ContainsKey("score") != true) + { + writer.WritePropertyName("score"u8); + writer.WriteNumberValue(Score.Value); + } if (Optional.IsCollectionDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) { writer.WritePropertyName("attributes"u8); @@ -65,11 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } - if (Optional.IsDefined(Score) && _additionalBinaryDataProperties?.ContainsKey("score") != true) - { - writer.WritePropertyName("score"u8); - writer.WriteNumberValue(Score.Value); - } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -93,6 +95,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FileSearchCallResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FileSearchCallResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -113,8 +116,8 @@ internal static FileSearchCallResult DeserializeFileSearchCallResult(JsonElement string fileId = default; string text = default; string filename = default; - IDictionary attributes = default; float? score = default; + IReadOnlyDictionary attributes = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -133,6 +136,15 @@ internal static FileSearchCallResult DeserializeFileSearchCallResult(JsonElement filename = prop.Value.GetString(); continue; } + if (prop.NameEquals("score"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + score = prop.Value.GetSingle(); + continue; + } if (prop.NameEquals("attributes"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -154,35 +166,28 @@ internal static FileSearchCallResult DeserializeFileSearchCallResult(JsonElement attributes = dictionary; continue; } - if (prop.NameEquals("score"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - score = prop.Value.GetSingle(); - continue; - } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileSearchCallResult( fileId, text, filename, - attributes ?? new ChangeTrackingDictionary(), score, + attributes ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileSearchCallResult)} does not support writing '{options.Format}' format."); } @@ -190,6 +195,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileSearchCallResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FileSearchCallResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -206,21 +212,5 @@ protected virtual FileSearchCallResult PersistableModelCreateCore(BinaryData dat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileSearchCallResult fileSearchCallResult) - { - if (fileSearchCallResult == null) - { - return null; - } - return BinaryContent.Create(fileSearchCallResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileSearchCallResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileSearchCallResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileSearchCallResult.cs b/src/Generated/Models/FileSearchCallResult.cs index db930c7ba..c46d06ff5 100644 --- a/src/Generated/Models/FileSearchCallResult.cs +++ b/src/Generated/Models/FileSearchCallResult.cs @@ -12,18 +12,18 @@ public partial class FileSearchCallResult { private protected IDictionary _additionalBinaryDataProperties; - public FileSearchCallResult() + public FileSearchCallResult() : this(null, null, null, default, null, null) { - Attributes = new ChangeTrackingDictionary(); } - internal FileSearchCallResult(string fileId, string text, string filename, IDictionary attributes, float? score, IDictionary additionalBinaryDataProperties) + internal FileSearchCallResult(string fileId, string text, string filename, float? score, IReadOnlyDictionary attributes, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections FileId = fileId; Text = text; Filename = filename; - Attributes = attributes; Score = score; + Attributes = attributes ?? new ChangeTrackingDictionary(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -33,8 +33,6 @@ internal FileSearchCallResult(string fileId, string text, string filename, IDict public string Filename { get; set; } - public IDictionary Attributes { get; } - public float? Score { get; set; } internal IDictionary SerializedAdditionalRawData diff --git a/src/Generated/Models/FileSearchRankingOptions.Serialization.cs b/src/Generated/Models/FileSearchRankingOptions.Serialization.cs index 5fc20d5de..2ded5ba50 100644 --- a/src/Generated/Models/FileSearchRankingOptions.Serialization.cs +++ b/src/Generated/Models/FileSearchRankingOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("score_threshold"u8); writer.WriteNumberValue(ScoreThreshold); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FileSearchRankingOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FileSearchRankingOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static FileSearchRankingOptions DeserializeFileSearchRankingOptions(Jso scoreThreshold = prop.Value.GetSingle(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileSearchRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static FileSearchRankingOptions DeserializeFileSearchRankingOptions(Jso BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileSearchRankingOptions)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileSearchRankingOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FileSearchRankingOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual FileSearchRankingOptions PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileSearchRankingOptions fileSearchRankingOptions) - { - if (fileSearchRankingOptions == null) - { - return null; - } - return BinaryContent.Create(fileSearchRankingOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileSearchRankingOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileSearchRankingOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileSearchToolDefinition.Serialization.cs b/src/Generated/Models/FileSearchToolDefinition.Serialization.cs index 8c8dbc66c..9b5cce980 100644 --- a/src/Generated/Models/FileSearchToolDefinition.Serialization.cs +++ b/src/Generated/Models/FileSearchToolDefinition.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,14 @@ namespace OpenAI.Assistants { public partial class FileSearchToolDefinition : IJsonModel { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -21,15 +29,16 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(FileSearchToolDefinition)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(_fileSearch) && _additionalBinaryDataProperties?.ContainsKey("file_search") != true) + if (Optional.IsDefined(FileSearch) && _additionalBinaryDataProperties?.ContainsKey("file_search") != true) { writer.WritePropertyName("file_search"u8); - writer.WriteObjectValue(_fileSearch, options); + writer.WriteObjectValue(FileSearch, options); } } FileSearchToolDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FileSearchToolDefinition)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -47,14 +56,14 @@ internal static FileSearchToolDefinition DeserializeFileSearchToolDefinition(Jso { return null; } - string @type = "file_search"; + InternalAssistantToolDefinitionType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalAssistantToolsFileSearchFileSearch fileSearch = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalAssistantToolDefinitionType(prop.Value.GetString()); continue; } if (prop.NameEquals("file_search"u8)) @@ -66,20 +75,22 @@ internal static FileSearchToolDefinition DeserializeFileSearchToolDefinition(Jso fileSearch = InternalAssistantToolsFileSearchFileSearch.DeserializeInternalAssistantToolsFileSearchFileSearch(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new FileSearchToolDefinition(@type, additionalBinaryDataProperties, fileSearch); + return new FileSearchToolDefinition(kind, additionalBinaryDataProperties, fileSearch); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileSearchToolDefinition)} does not support writing '{options.Format}' format."); } @@ -87,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileSearchToolDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FileSearchToolDefinition)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -103,21 +115,5 @@ protected override ToolDefinition PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileSearchToolDefinition fileSearchToolDefinition) - { - if (fileSearchToolDefinition == null) - { - return null; - } - return BinaryContent.Create(fileSearchToolDefinition, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileSearchToolDefinition(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileSearchToolDefinition(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileSearchToolDefinition.cs b/src/Generated/Models/FileSearchToolDefinition.cs index 1eacf9ff7..60d13f54e 100644 --- a/src/Generated/Models/FileSearchToolDefinition.cs +++ b/src/Generated/Models/FileSearchToolDefinition.cs @@ -9,9 +9,11 @@ namespace OpenAI.Assistants { public partial class FileSearchToolDefinition : ToolDefinition { - internal FileSearchToolDefinition(string @type, IDictionary additionalBinaryDataProperties, InternalAssistantToolsFileSearchFileSearch fileSearch) : base(@type, additionalBinaryDataProperties) + internal FileSearchToolDefinition(InternalAssistantToolDefinitionType kind, IDictionary additionalBinaryDataProperties, InternalAssistantToolsFileSearchFileSearch fileSearch) : base(kind, additionalBinaryDataProperties) { - _fileSearch = fileSearch; + FileSearch = fileSearch; } + + internal InternalAssistantToolsFileSearchFileSearch FileSearch { get; set; } } } diff --git a/src/Generated/Models/FileSearchToolRankingOptions.Serialization.cs b/src/Generated/Models/FileSearchToolRankingOptions.Serialization.cs index 0af5cdad9..61d3a95a5 100644 --- a/src/Generated/Models/FileSearchToolRankingOptions.Serialization.cs +++ b/src/Generated/Models/FileSearchToolRankingOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("score_threshold"u8); writer.WriteNumberValue(ScoreThreshold.Value); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FileSearchToolRankingOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FileSearchToolRankingOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static FileSearchToolRankingOptions DeserializeFileSearchToolRankingOpt scoreThreshold = prop.Value.GetSingle(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileSearchToolRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static FileSearchToolRankingOptions DeserializeFileSearchToolRankingOpt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileSearchToolRankingOptions)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileSearchToolRankingOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FileSearchToolRankingOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual FileSearchToolRankingOptions PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileSearchToolRankingOptions fileSearchToolRankingOptions) - { - if (fileSearchToolRankingOptions == null) - { - return null; - } - return BinaryContent.Create(fileSearchToolRankingOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileSearchToolRankingOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileSearchToolRankingOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileSearchToolResources.Serialization.cs b/src/Generated/Models/FileSearchToolResources.Serialization.cs index bb02e68ff..5fed122f4 100644 --- a/src/Generated/Models/FileSearchToolResources.Serialization.cs +++ b/src/Generated/Models/FileSearchToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -47,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("vector_stores"u8); SerializeNewVectorStores(writer, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -70,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FileSearchToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FileSearchToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -127,6 +130,7 @@ internal static FileSearchToolResources DeserializeFileSearchToolResources(JsonE newVectorStores = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FileSearchToolResources(vectorStoreIds ?? new ChangeTrackingList(), newVectorStores ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -134,13 +138,14 @@ internal static FileSearchToolResources DeserializeFileSearchToolResources(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FileSearchToolResources)} does not support writing '{options.Format}' format."); } @@ -148,6 +153,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FileSearchToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FileSearchToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -164,21 +170,5 @@ protected virtual FileSearchToolResources PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FileSearchToolResources fileSearchToolResources) - { - if (fileSearchToolResources == null) - { - return null; - } - return BinaryContent.Create(fileSearchToolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FileSearchToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFileSearchToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FileSearchToolResources.cs b/src/Generated/Models/FileSearchToolResources.cs index 7cb29c848..220d21e46 100644 --- a/src/Generated/Models/FileSearchToolResources.cs +++ b/src/Generated/Models/FileSearchToolResources.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Assistants { @@ -11,13 +12,20 @@ public partial class FileSearchToolResources { private protected IDictionary _additionalBinaryDataProperties; + public FileSearchToolResources() : this(null, null, null) + { + } + internal FileSearchToolResources(IList vectorStoreIds, IList newVectorStores, IDictionary additionalBinaryDataProperties) { - VectorStoreIds = vectorStoreIds; - NewVectorStores = newVectorStores; + // Plugin customization: ensure initialization of collections + VectorStoreIds = vectorStoreIds ?? new ChangeTrackingList(); + NewVectorStores = newVectorStores ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } + public IList VectorStoreIds { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/FileUploadPurpose.cs b/src/Generated/Models/FileUploadPurpose.cs index c2b9151c8..505d9e74e 100644 --- a/src/Generated/Models/FileUploadPurpose.cs +++ b/src/Generated/Models/FileUploadPurpose.cs @@ -33,8 +33,6 @@ public FileUploadPurpose(string value) public static FileUploadPurpose Vision { get; } = new FileUploadPurpose(VisionValue); - public static FileUploadPurpose UserData { get; } = new FileUploadPurpose(UserDataValue); - public static bool operator ==(FileUploadPurpose left, FileUploadPurpose right) => left.Equals(right); public static bool operator !=(FileUploadPurpose left, FileUploadPurpose right) => !left.Equals(right); diff --git a/src/Generated/Models/FineTuningCheckpoint.Serialization.cs b/src/Generated/Models/FineTuningCheckpoint.Serialization.cs new file mode 100644 index 000000000..a1db46293 --- /dev/null +++ b/src/Generated/Models/FineTuningCheckpoint.Serialization.cs @@ -0,0 +1,206 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningCheckpoint : IJsonModel + { + internal FineTuningCheckpoint() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningCheckpoint)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("fine_tuned_model_checkpoint") != true) + { + writer.WritePropertyName("fine_tuned_model_checkpoint"u8); + writer.WriteStringValue(ModelId); + } + if (_additionalBinaryDataProperties?.ContainsKey("step_number") != true) + { + writer.WritePropertyName("step_number"u8); + writer.WriteNumberValue(StepNumber); + } + if (_additionalBinaryDataProperties?.ContainsKey("metrics") != true) + { + writer.WritePropertyName("metrics"u8); + writer.WriteObjectValue(Metrics, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("fine_tuning_job_id") != true) + { + writer.WritePropertyName("fine_tuning_job_id"u8); + writer.WriteStringValue(JobId); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(_object); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + FineTuningCheckpoint IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningCheckpoint JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningCheckpoint)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFineTuningCheckpoint(document.RootElement, options); + } + + internal static FineTuningCheckpoint DeserializeFineTuningCheckpoint(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + DateTimeOffset createdAt = default; + string modelId = default; + int stepNumber = default; + FineTuningCheckpointMetrics metrics = default; + string jobId = default; + string @object = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("fine_tuned_model_checkpoint"u8)) + { + modelId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("step_number"u8)) + { + stepNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("metrics"u8)) + { + metrics = FineTuningCheckpointMetrics.DeserializeFineTuningCheckpointMetrics(prop.Value, options); + continue; + } + if (prop.NameEquals("fine_tuning_job_id"u8)) + { + jobId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FineTuningCheckpoint( + id, + createdAt, + modelId, + stepNumber, + metrics, + jobId, + @object, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(FineTuningCheckpoint)} does not support writing '{options.Format}' format."); + } + } + + FineTuningCheckpoint IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningCheckpoint PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFineTuningCheckpoint(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FineTuningCheckpoint)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/FineTuningCheckpoint.cs b/src/Generated/Models/FineTuningCheckpoint.cs new file mode 100644 index 000000000..e25c89fa6 --- /dev/null +++ b/src/Generated/Models/FineTuningCheckpoint.cs @@ -0,0 +1,42 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningCheckpoint + { + private protected IDictionary _additionalBinaryDataProperties; + + internal FineTuningCheckpoint(string id, DateTimeOffset createdAt, string modelId, int stepNumber, FineTuningCheckpointMetrics metrics, string jobId) + { + Id = id; + CreatedAt = createdAt; + ModelId = modelId; + StepNumber = stepNumber; + Metrics = metrics; + JobId = jobId; + } + + internal FineTuningCheckpoint(string id, DateTimeOffset createdAt, string modelId, int stepNumber, FineTuningCheckpointMetrics metrics, string jobId, string @object, IDictionary additionalBinaryDataProperties) + { + Id = id; + CreatedAt = createdAt; + ModelId = modelId; + StepNumber = stepNumber; + Metrics = metrics; + JobId = jobId; + _object = @object; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/FineTuningCheckpointMetrics.Serialization.cs b/src/Generated/Models/FineTuningCheckpointMetrics.Serialization.cs new file mode 100644 index 000000000..7fd8deee1 --- /dev/null +++ b/src/Generated/Models/FineTuningCheckpointMetrics.Serialization.cs @@ -0,0 +1,230 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningCheckpointMetrics : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningCheckpointMetrics)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(TrainLoss) && _additionalBinaryDataProperties?.ContainsKey("train_loss") != true) + { + writer.WritePropertyName("train_loss"u8); + writer.WriteNumberValue(TrainLoss.Value); + } + if (Optional.IsDefined(TrainMeanTokenAccuracy) && _additionalBinaryDataProperties?.ContainsKey("train_mean_token_accuracy") != true) + { + writer.WritePropertyName("train_mean_token_accuracy"u8); + writer.WriteNumberValue(TrainMeanTokenAccuracy.Value); + } + if (Optional.IsDefined(ValidLoss) && _additionalBinaryDataProperties?.ContainsKey("valid_loss") != true) + { + writer.WritePropertyName("valid_loss"u8); + writer.WriteNumberValue(ValidLoss.Value); + } + if (Optional.IsDefined(ValidMeanTokenAccuracy) && _additionalBinaryDataProperties?.ContainsKey("valid_mean_token_accuracy") != true) + { + writer.WritePropertyName("valid_mean_token_accuracy"u8); + writer.WriteNumberValue(ValidMeanTokenAccuracy.Value); + } + if (Optional.IsDefined(FullValidLoss) && _additionalBinaryDataProperties?.ContainsKey("full_valid_loss") != true) + { + writer.WritePropertyName("full_valid_loss"u8); + writer.WriteNumberValue(FullValidLoss.Value); + } + if (Optional.IsDefined(FullValidMeanTokenAccuracy) && _additionalBinaryDataProperties?.ContainsKey("full_valid_mean_token_accuracy") != true) + { + writer.WritePropertyName("full_valid_mean_token_accuracy"u8); + writer.WriteNumberValue(FullValidMeanTokenAccuracy.Value); + } + if (_additionalBinaryDataProperties?.ContainsKey("step") != true) + { + writer.WritePropertyName("step"u8); + writer.WriteNumberValue(StepNumber); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + FineTuningCheckpointMetrics IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningCheckpointMetrics JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningCheckpointMetrics)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFineTuningCheckpointMetrics(document.RootElement, options); + } + + internal static FineTuningCheckpointMetrics DeserializeFineTuningCheckpointMetrics(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + float? trainLoss = default; + float? trainMeanTokenAccuracy = default; + float? validLoss = default; + float? validMeanTokenAccuracy = default; + float? fullValidLoss = default; + float? fullValidMeanTokenAccuracy = default; + int stepNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("train_loss"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + trainLoss = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("train_mean_token_accuracy"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + trainMeanTokenAccuracy = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("valid_loss"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + validLoss = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("valid_mean_token_accuracy"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + validMeanTokenAccuracy = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("full_valid_loss"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + fullValidLoss = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("full_valid_mean_token_accuracy"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + fullValidMeanTokenAccuracy = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("step"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + stepNumber = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FineTuningCheckpointMetrics( + trainLoss, + trainMeanTokenAccuracy, + validLoss, + validMeanTokenAccuracy, + fullValidLoss, + fullValidMeanTokenAccuracy, + stepNumber, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(FineTuningCheckpointMetrics)} does not support writing '{options.Format}' format."); + } + } + + FineTuningCheckpointMetrics IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningCheckpointMetrics PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFineTuningCheckpointMetrics(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FineTuningCheckpointMetrics)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/FineTuningCheckpointMetrics.cs b/src/Generated/Models/FineTuningCheckpointMetrics.cs new file mode 100644 index 000000000..b9e9dcc07 --- /dev/null +++ b/src/Generated/Models/FineTuningCheckpointMetrics.cs @@ -0,0 +1,48 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningCheckpointMetrics + { + private protected IDictionary _additionalBinaryDataProperties; + + internal FineTuningCheckpointMetrics() + { + } + + internal FineTuningCheckpointMetrics(float? trainLoss, float? trainMeanTokenAccuracy, float? validLoss, float? validMeanTokenAccuracy, float? fullValidLoss, float? fullValidMeanTokenAccuracy, int stepNumber, IDictionary additionalBinaryDataProperties) + { + TrainLoss = trainLoss; + TrainMeanTokenAccuracy = trainMeanTokenAccuracy; + ValidLoss = validLoss; + ValidMeanTokenAccuracy = validMeanTokenAccuracy; + FullValidLoss = fullValidLoss; + FullValidMeanTokenAccuracy = fullValidMeanTokenAccuracy; + StepNumber = stepNumber; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public float? TrainLoss { get; } + + public float? TrainMeanTokenAccuracy { get; } + + public float? ValidLoss { get; } + + public float? ValidMeanTokenAccuracy { get; } + + public float? FullValidLoss { get; } + + public float? FullValidMeanTokenAccuracy { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/FineTuningError.Serialization.cs b/src/Generated/Models/FineTuningError.Serialization.cs new file mode 100644 index 000000000..b15cd56d6 --- /dev/null +++ b/src/Generated/Models/FineTuningError.Serialization.cs @@ -0,0 +1,166 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningError : IJsonModel + { + internal FineTuningError() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningError)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("code") != true) + { + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); + } + if (_additionalBinaryDataProperties?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); + } + if (_additionalBinaryDataProperties?.ContainsKey("param") != true) + { + if (Optional.IsDefined(InvalidParameter)) + { + writer.WritePropertyName("param"u8); + writer.WriteStringValue(InvalidParameter); + } + else + { + writer.WriteNull("param"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + FineTuningError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningError)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFineTuningError(document.RootElement, options); + } + + internal static FineTuningError DeserializeFineTuningError(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string code = default; + string message = default; + string invalidParameter = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("code"u8)) + { + code = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("message"u8)) + { + message = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("param"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + invalidParameter = null; + continue; + } + invalidParameter = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FineTuningError(code, message, invalidParameter, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(FineTuningError)} does not support writing '{options.Format}' format."); + } + } + + FineTuningError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFineTuningError(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FineTuningError)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/FineTuningError.cs b/src/Generated/Models/FineTuningError.cs new file mode 100644 index 000000000..bb557fba4 --- /dev/null +++ b/src/Generated/Models/FineTuningError.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningError + { + private protected IDictionary _additionalBinaryDataProperties; + + internal FineTuningError(string code, string message, string invalidParameter) + { + Code = code; + Message = message; + InvalidParameter = invalidParameter; + } + + internal FineTuningError(string code, string message, string invalidParameter, IDictionary additionalBinaryDataProperties) + { + Code = code; + Message = message; + InvalidParameter = invalidParameter; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Code { get; } + + public string Message { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/FineTuningEvent.Serialization.cs b/src/Generated/Models/FineTuningEvent.Serialization.cs new file mode 100644 index 000000000..6949f7523 --- /dev/null +++ b/src/Generated/Models/FineTuningEvent.Serialization.cs @@ -0,0 +1,221 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningEvent : IJsonModel + { + internal FineTuningEvent() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningEvent)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.Value.ToString()); + } + if (Optional.IsDefined(Data) && _additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Data); +#else + using (JsonDocument document = JsonDocument.Parse(Data)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("level") != true) + { + writer.WritePropertyName("level"u8); + writer.WriteStringValue(Level); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(_object); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + FineTuningEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFineTuningEvent(document.RootElement, options); + } + + internal static FineTuningEvent DeserializeFineTuningEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + DateTimeOffset createdAt = default; + string message = default; + FineTuningJobEventKind? kind = default; + BinaryData data = default; + string level = default; + string @object = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("message"u8)) + { + message = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("type"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + kind = new FineTuningJobEventKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("data"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + data = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("level"u8)) + { + level = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FineTuningEvent( + id, + createdAt, + message, + kind, + data, + level, + @object, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(FineTuningEvent)} does not support writing '{options.Format}' format."); + } + } + + FineTuningEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFineTuningEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FineTuningEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/FineTuningEvent.cs b/src/Generated/Models/FineTuningEvent.cs new file mode 100644 index 000000000..1839367f6 --- /dev/null +++ b/src/Generated/Models/FineTuningEvent.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningEvent + { + private protected IDictionary _additionalBinaryDataProperties; + + internal FineTuningEvent(string id, DateTimeOffset createdAt, string message, string level) + { + Id = id; + CreatedAt = createdAt; + Message = message; + Level = level; + } + + internal FineTuningEvent(string id, DateTimeOffset createdAt, string message, FineTuningJobEventKind? kind, BinaryData data, string level, string @object, IDictionary additionalBinaryDataProperties) + { + Id = id; + CreatedAt = createdAt; + Message = message; + Kind = kind; + Data = data; + Level = level; + _object = @object; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public DateTimeOffset CreatedAt { get; } + + public string Message { get; } + + public FineTuningJobEventKind? Kind { get; } + + public BinaryData Data { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/FineTuningHyperparameters.Serialization.cs b/src/Generated/Models/FineTuningHyperparameters.Serialization.cs new file mode 100644 index 000000000..f16876538 --- /dev/null +++ b/src/Generated/Models/FineTuningHyperparameters.Serialization.cs @@ -0,0 +1,198 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public readonly partial struct FineTuningHyperparameters : IJsonModel, IJsonModel + { + public FineTuningHyperparameters() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningHyperparameters)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(_EpochCount) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) + { + writer.WritePropertyName("n_epochs"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_EpochCount); +#else + using (JsonDocument document = JsonDocument.Parse(_EpochCount)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(_BatchSize) && _additionalBinaryDataProperties?.ContainsKey("batch_size") != true) + { + writer.WritePropertyName("batch_size"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_BatchSize); +#else + using (JsonDocument document = JsonDocument.Parse(_BatchSize)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(_LearningRateMultiplier) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) + { + writer.WritePropertyName("learning_rate_multiplier"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_LearningRateMultiplier); +#else + using (JsonDocument document = JsonDocument.Parse(_LearningRateMultiplier)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + FineTuningHyperparameters IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + private FineTuningHyperparameters JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningHyperparameters)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFineTuningHyperparameters(document.RootElement, options); + } + + internal static FineTuningHyperparameters DeserializeFineTuningHyperparameters(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return default; + } + BinaryData epochCount = default; + BinaryData batchSize = default; + BinaryData learningRateMultiplier = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("n_epochs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + epochCount = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("batch_size"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + batchSize = null; + continue; + } + batchSize = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("learning_rate_multiplier"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FineTuningHyperparameters(epochCount, batchSize, learningRateMultiplier, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + private BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(FineTuningHyperparameters)} does not support writing '{options.Format}' format."); + } + } + + FineTuningHyperparameters IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + private FineTuningHyperparameters PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFineTuningHyperparameters(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FineTuningHyperparameters)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => ((IJsonModel)this).Write(writer, options); + + object IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => ((IJsonModel)this).Create(ref reader, options); + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => ((IPersistableModel)this).Write(options); + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => ((IPersistableModel)this).GetFormatFromOptions(options); + + object IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => ((IPersistableModel)this).Create(data, options); + } +} diff --git a/src/Generated/Models/FineTuningHyperparameters.cs b/src/Generated/Models/FineTuningHyperparameters.cs new file mode 100644 index 000000000..d63b03e79 --- /dev/null +++ b/src/Generated/Models/FineTuningHyperparameters.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + public readonly partial struct FineTuningHyperparameters + { + private readonly IDictionary _additionalBinaryDataProperties; + + internal FineTuningHyperparameters(BinaryData epochCount, BinaryData batchSize, BinaryData learningRateMultiplier) + { + _EpochCount = epochCount; + _BatchSize = batchSize; + _LearningRateMultiplier = learningRateMultiplier; + } + + internal FineTuningHyperparameters(BinaryData epochCount, BinaryData batchSize, BinaryData learningRateMultiplier, IDictionary additionalBinaryDataProperties) + { + _EpochCount = epochCount; + _BatchSize = batchSize; + _LearningRateMultiplier = learningRateMultiplier; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData => _additionalBinaryDataProperties; + } +} diff --git a/src/Generated/Models/FineTuningIntegration.Serialization.cs b/src/Generated/Models/FineTuningIntegration.Serialization.cs index 25ca2bbb5..089bff598 100644 --- a/src/Generated/Models/FineTuningIntegration.Serialization.cs +++ b/src/Generated/Models/FineTuningIntegration.Serialization.cs @@ -3,15 +3,15 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.FineTuning { [PersistableModelProxy(typeof(UnknownCreateFineTuningJobRequestIntegration))] - internal abstract partial class FineTuningIntegration : IJsonModel + public partial class FineTuningIntegration : IJsonModel { internal FineTuningIntegration() { @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FineTuningIntegration IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -89,13 +92,14 @@ internal static FineTuningIntegration DeserializeFineTuningIntegration(JsonEleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FineTuningIntegration)} does not support writing '{options.Format}' format."); } @@ -103,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FineTuningIntegration IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -119,21 +124,5 @@ protected virtual FineTuningIntegration PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FineTuningIntegration fineTuningIntegration) - { - if (fineTuningIntegration == null) - { - return null; - } - return BinaryContent.Create(fineTuningIntegration, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FineTuningIntegration(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFineTuningIntegration(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FineTuningIntegration.cs b/src/Generated/Models/FineTuningIntegration.cs index 9eccef658..323e2717d 100644 --- a/src/Generated/Models/FineTuningIntegration.cs +++ b/src/Generated/Models/FineTuningIntegration.cs @@ -7,22 +7,22 @@ namespace OpenAI.FineTuning { - internal abstract partial class FineTuningIntegration + public partial class FineTuningIntegration { private protected IDictionary _additionalBinaryDataProperties; - private protected FineTuningIntegration(string @type) + private protected FineTuningIntegration(InternalCreateFineTuningJobRequestIntegrationType kind) { - Type = @type; + Kind = kind; } - internal FineTuningIntegration(string @type, IDictionary additionalBinaryDataProperties) + internal FineTuningIntegration(InternalCreateFineTuningJobRequestIntegrationType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalCreateFineTuningJobRequestIntegrationType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/FineTuningIntegrationWandbWandb.Serialization.cs b/src/Generated/Models/FineTuningIntegrationWandbWandb.Serialization.cs index 78f5b9124..2937d3132 100644 --- a/src/Generated/Models/FineTuningIntegrationWandbWandb.Serialization.cs +++ b/src/Generated/Models/FineTuningIntegrationWandbWandb.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.FineTuning { internal partial class FineTuningIntegrationWandbWandb : IJsonModel { - internal FineTuningIntegrationWandbWandb() + internal FineTuningIntegrationWandbWandb() : this(null, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +86,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FineTuningIntegrationWandbWandb IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FineTuningIntegrationWandbWandb JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -154,6 +157,7 @@ internal static FineTuningIntegrationWandbWandb DeserializeFineTuningIntegration tags = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FineTuningIntegrationWandbWandb(project, name, entity, tags ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -161,13 +165,14 @@ internal static FineTuningIntegrationWandbWandb DeserializeFineTuningIntegration BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FineTuningIntegrationWandbWandb)} does not support writing '{options.Format}' format."); } @@ -175,6 +180,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FineTuningIntegrationWandbWandb IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FineTuningIntegrationWandbWandb PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -191,21 +197,5 @@ protected virtual FineTuningIntegrationWandbWandb PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FineTuningIntegrationWandbWandb fineTuningIntegrationWandbWandb) - { - if (fineTuningIntegrationWandbWandb == null) - { - return null; - } - return BinaryContent.Create(fineTuningIntegrationWandbWandb, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FineTuningIntegrationWandbWandb(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFineTuningIntegrationWandbWandb(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FineTuningIntegrationWandbWandb.cs b/src/Generated/Models/FineTuningIntegrationWandbWandb.cs index 8d6a4b8fd..6abe27e77 100644 --- a/src/Generated/Models/FineTuningIntegrationWandbWandb.cs +++ b/src/Generated/Models/FineTuningIntegrationWandbWandb.cs @@ -20,10 +20,11 @@ internal FineTuningIntegrationWandbWandb(string project) internal FineTuningIntegrationWandbWandb(string project, string name, string entity, IList tags, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Project = project; Name = name; Entity = entity; - Tags = tags; + Tags = tags ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/FineTuningJob.Serialization.cs b/src/Generated/Models/FineTuningJob.Serialization.cs deleted file mode 100644 index d277df6ed..000000000 --- a/src/Generated/Models/FineTuningJob.Serialization.cs +++ /dev/null @@ -1,517 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class FineTuningJob : IJsonModel - { - internal FineTuningJob() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FineTuningJob)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(UserProvidedSuffix) && _additionalBinaryDataProperties?.ContainsKey("user_provided_suffix") != true) - { - writer.WritePropertyName("user_provided_suffix"u8); - writer.WriteStringValue(UserProvidedSuffix); - } - if (_additionalBinaryDataProperties?.ContainsKey("id") != true) - { - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - } - if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) - { - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - } - if (_additionalBinaryDataProperties?.ContainsKey("error") != true) - { - if (Optional.IsDefined(Error)) - { - writer.WritePropertyName("error"u8); - writer.WriteObjectValue(Error, options); - } - else - { - writer.WriteNull("error"u8); - } - } - if (_additionalBinaryDataProperties?.ContainsKey("fine_tuned_model") != true) - { - if (Optional.IsDefined(FineTunedModel)) - { - writer.WritePropertyName("fine_tuned_model"u8); - writer.WriteStringValue(FineTunedModel); - } - else - { - writer.WriteNull("fine_tuned_model"u8); - } - } - if (_additionalBinaryDataProperties?.ContainsKey("finished_at") != true) - { - if (Optional.IsDefined(FinishedAt)) - { - writer.WritePropertyName("finished_at"u8); - writer.WriteNumberValue(FinishedAt.Value, "U"); - } - else - { - writer.WriteNull("finished_at"u8); - } - } - if (_additionalBinaryDataProperties?.ContainsKey("hyperparameters") != true) - { - writer.WritePropertyName("hyperparameters"u8); - writer.WriteObjectValue(Hyperparameters, options); - } - if (_additionalBinaryDataProperties?.ContainsKey("model") != true) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - } - if (_additionalBinaryDataProperties?.ContainsKey("object") != true) - { - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("organization_id") != true) - { - writer.WritePropertyName("organization_id"u8); - writer.WriteStringValue(OrganizationId); - } - if (_additionalBinaryDataProperties?.ContainsKey("result_files") != true) - { - writer.WritePropertyName("result_files"u8); - writer.WriteStartArray(); - foreach (string item in ResultFiles) - { - if (item == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item); - } - writer.WriteEndArray(); - } - if (_additionalBinaryDataProperties?.ContainsKey("status") != true) - { - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("trained_tokens") != true) - { - if (Optional.IsDefined(TrainedTokens)) - { - writer.WritePropertyName("trained_tokens"u8); - writer.WriteNumberValue(TrainedTokens.Value); - } - else - { - writer.WriteNull("trained_tokens"u8); - } - } - if (_additionalBinaryDataProperties?.ContainsKey("training_file") != true) - { - writer.WritePropertyName("training_file"u8); - writer.WriteStringValue(TrainingFile); - } - if (_additionalBinaryDataProperties?.ContainsKey("validation_file") != true) - { - if (Optional.IsDefined(ValidationFile)) - { - writer.WritePropertyName("validation_file"u8); - writer.WriteStringValue(ValidationFile); - } - else - { - writer.WriteNull("validation_file"u8); - } - } - if (Optional.IsCollectionDefined(Integrations) && _additionalBinaryDataProperties?.ContainsKey("integrations") != true) - { - writer.WritePropertyName("integrations"u8); - writer.WriteStartArray(); - foreach (InternalFineTuningIntegration item in Integrations) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - if (_additionalBinaryDataProperties?.ContainsKey("seed") != true) - { - writer.WritePropertyName("seed"u8); - writer.WriteNumberValue(Seed); - } - if (Optional.IsDefined(EstimatedFinish) && _additionalBinaryDataProperties?.ContainsKey("estimated_finish") != true) - { - writer.WritePropertyName("estimated_finish"u8); - writer.WriteNumberValue(EstimatedFinish.Value, "U"); - } - if (Optional.IsDefined(Method) && _additionalBinaryDataProperties?.ContainsKey("method") != true) - { - writer.WritePropertyName("method"u8); - writer.WriteObjectValue(Method, options); - } - if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) - { - if (Optional.IsCollectionDefined(Metadata)) - { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) - { - writer.WritePropertyName(item.Key); - if (item.Value == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item.Value); - } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"u8); - } - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - FineTuningJob IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual FineTuningJob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FineTuningJob)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeFineTuningJob(document.RootElement, options); - } - - internal static FineTuningJob DeserializeFineTuningJob(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string userProvidedSuffix = default; - string id = default; - DateTimeOffset createdAt = default; - FineTuningJobError error = default; - string fineTunedModel = default; - DateTimeOffset? finishedAt = default; - FineTuningJobHyperparameters hyperparameters = default; - string model = default; - InternalFineTuningJobObject @object = default; - string organizationId = default; - IList resultFiles = default; - FineTuningJobStatus status = default; - int? trainedTokens = default; - string trainingFile = default; - string validationFile = default; - IList integrations = default; - int seed = default; - DateTimeOffset? estimatedFinish = default; - InternalTodoFineTuneMethod @method = default; - IDictionary metadata = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("user_provided_suffix"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - userProvidedSuffix = null; - continue; - } - userProvidedSuffix = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("id"u8)) - { - id = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("created_at"u8)) - { - createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); - continue; - } - if (prop.NameEquals("error"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - error = null; - continue; - } - error = FineTuningJobError.DeserializeFineTuningJobError(prop.Value, options); - continue; - } - if (prop.NameEquals("fine_tuned_model"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - fineTunedModel = null; - continue; - } - fineTunedModel = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("finished_at"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - finishedAt = null; - continue; - } - finishedAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); - continue; - } - if (prop.NameEquals("hyperparameters"u8)) - { - hyperparameters = FineTuningJobHyperparameters.DeserializeFineTuningJobHyperparameters(prop.Value, options); - continue; - } - if (prop.NameEquals("model"u8)) - { - model = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("object"u8)) - { - @object = new InternalFineTuningJobObject(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("organization_id"u8)) - { - organizationId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("result_files"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - if (item.ValueKind == JsonValueKind.Null) - { - array.Add(null); - } - else - { - array.Add(item.GetString()); - } - } - resultFiles = array; - continue; - } - if (prop.NameEquals("status"u8)) - { - status = new FineTuningJobStatus(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("trained_tokens"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - trainedTokens = null; - continue; - } - trainedTokens = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("training_file"u8)) - { - trainingFile = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("validation_file"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - validationFile = null; - continue; - } - validationFile = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("integrations"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(InternalFineTuningIntegration.DeserializeInternalFineTuningIntegration(item, options)); - } - integrations = array; - continue; - } - if (prop.NameEquals("seed"u8)) - { - seed = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("estimated_finish"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - estimatedFinish = null; - continue; - } - estimatedFinish = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); - continue; - } - if (prop.NameEquals("method"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - @method = InternalTodoFineTuneMethod.DeserializeInternalTodoFineTuneMethod(prop.Value, options); - continue; - } - if (prop.NameEquals("metadata"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - metadata = new ChangeTrackingDictionary(); - continue; - } - Dictionary dictionary = new Dictionary(); - foreach (var prop0 in prop.Value.EnumerateObject()) - { - if (prop0.Value.ValueKind == JsonValueKind.Null) - { - dictionary.Add(prop0.Name, null); - } - else - { - dictionary.Add(prop0.Name, prop0.Value.GetString()); - } - } - metadata = dictionary; - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new FineTuningJob( - userProvidedSuffix, - id, - createdAt, - error, - fineTunedModel, - finishedAt, - hyperparameters, - model, - @object, - organizationId, - resultFiles, - status, - trainedTokens, - trainingFile, - validationFile, - integrations ?? new ChangeTrackingList(), - seed, - estimatedFinish, - @method, - metadata, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(FineTuningJob)} does not support writing '{options.Format}' format."); - } - } - - FineTuningJob IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual FineTuningJob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeFineTuningJob(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(FineTuningJob)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FineTuningJob fineTuningJob) - { - if (fineTuningJob == null) - { - return null; - } - return BinaryContent.Create(fineTuningJob, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FineTuningJob(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFineTuningJob(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/FineTuningJob.cs b/src/Generated/Models/FineTuningJob.cs deleted file mode 100644 index 9724f2c58..000000000 --- a/src/Generated/Models/FineTuningJob.cs +++ /dev/null @@ -1,107 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class FineTuningJob - { - private protected IDictionary _additionalBinaryDataProperties; - - internal FineTuningJob(string id, DateTimeOffset createdAt, FineTuningJobError error, string fineTunedModel, DateTimeOffset? finishedAt, FineTuningJobHyperparameters hyperparameters, string model, string organizationId, IEnumerable resultFiles, FineTuningJobStatus status, int? trainedTokens, string trainingFile, string validationFile, int seed, IDictionary metadata) - { - Id = id; - CreatedAt = createdAt; - Error = error; - FineTunedModel = fineTunedModel; - FinishedAt = finishedAt; - Hyperparameters = hyperparameters; - Model = model; - OrganizationId = organizationId; - ResultFiles = resultFiles.ToList(); - Status = status; - TrainedTokens = trainedTokens; - TrainingFile = trainingFile; - ValidationFile = validationFile; - Integrations = new ChangeTrackingList(); - Seed = seed; - Metadata = metadata; - } - - internal FineTuningJob(string userProvidedSuffix, string id, DateTimeOffset createdAt, FineTuningJobError error, string fineTunedModel, DateTimeOffset? finishedAt, FineTuningJobHyperparameters hyperparameters, string model, InternalFineTuningJobObject @object, string organizationId, IList resultFiles, FineTuningJobStatus status, int? trainedTokens, string trainingFile, string validationFile, IList integrations, int seed, DateTimeOffset? estimatedFinish, InternalTodoFineTuneMethod @method, IDictionary metadata, IDictionary additionalBinaryDataProperties) - { - UserProvidedSuffix = userProvidedSuffix; - Id = id; - CreatedAt = createdAt; - Error = error; - FineTunedModel = fineTunedModel; - FinishedAt = finishedAt; - Hyperparameters = hyperparameters; - Model = model; - Object = @object; - OrganizationId = organizationId; - ResultFiles = resultFiles; - Status = status; - TrainedTokens = trainedTokens; - TrainingFile = trainingFile; - ValidationFile = validationFile; - Integrations = integrations; - Seed = seed; - EstimatedFinish = estimatedFinish; - Method = @method; - Metadata = metadata; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public string UserProvidedSuffix { get; } - - public string Id { get; } - - public DateTimeOffset CreatedAt { get; } - - public FineTuningJobError Error { get; } - - public string FineTunedModel { get; } - - public DateTimeOffset? FinishedAt { get; } - - public FineTuningJobHyperparameters Hyperparameters { get; } - - public string Model { get; } - - public InternalFineTuningJobObject Object { get; } = "fine_tuning.job"; - - public string OrganizationId { get; } - - public IList ResultFiles { get; } - - public FineTuningJobStatus Status { get; } - - public int? TrainedTokens { get; } - - public string TrainingFile { get; } - - public string ValidationFile { get; } - - public IList Integrations { get; } - - public int Seed { get; } - - public DateTimeOffset? EstimatedFinish { get; } - - public InternalTodoFineTuneMethod Method { get; } - - public IDictionary Metadata { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/FineTuningJobError.Serialization.cs b/src/Generated/Models/FineTuningJobError.Serialization.cs deleted file mode 100644 index f2df1dd73..000000000 --- a/src/Generated/Models/FineTuningJobError.Serialization.cs +++ /dev/null @@ -1,176 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class FineTuningJobError : IJsonModel - { - internal FineTuningJobError() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FineTuningJobError)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("code") != true) - { - writer.WritePropertyName("code"u8); - writer.WriteStringValue(Code); - } - if (_additionalBinaryDataProperties?.ContainsKey("message") != true) - { - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - } - if (_additionalBinaryDataProperties?.ContainsKey("param") != true) - { - if (Optional.IsDefined(Param)) - { - writer.WritePropertyName("param"u8); - writer.WriteStringValue(Param); - } - else - { - writer.WriteNull("param"u8); - } - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - FineTuningJobError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual FineTuningJobError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FineTuningJobError)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeFineTuningJobError(document.RootElement, options); - } - - internal static FineTuningJobError DeserializeFineTuningJobError(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string code = default; - string message = default; - string @param = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("code"u8)) - { - code = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("message"u8)) - { - message = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("param"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - @param = null; - continue; - } - @param = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new FineTuningJobError(code, message, @param, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(FineTuningJobError)} does not support writing '{options.Format}' format."); - } - } - - FineTuningJobError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual FineTuningJobError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeFineTuningJobError(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(FineTuningJobError)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FineTuningJobError fineTuningJobError) - { - if (fineTuningJobError == null) - { - return null; - } - return BinaryContent.Create(fineTuningJobError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FineTuningJobError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFineTuningJobError(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/FineTuningJobError.cs b/src/Generated/Models/FineTuningJobError.cs deleted file mode 100644 index b31e40458..000000000 --- a/src/Generated/Models/FineTuningJobError.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class FineTuningJobError - { - private protected IDictionary _additionalBinaryDataProperties; - - internal FineTuningJobError(string code, string message, string @param) - { - Code = code; - Message = message; - Param = @param; - } - - internal FineTuningJobError(string code, string message, string @param, IDictionary additionalBinaryDataProperties) - { - Code = code; - Message = message; - Param = @param; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public string Code { get; } - - public string Message { get; } - - public string Param { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/FineTuningJobEvent.Serialization.cs b/src/Generated/Models/FineTuningJobEvent.Serialization.cs deleted file mode 100644 index a282cf61d..000000000 --- a/src/Generated/Models/FineTuningJobEvent.Serialization.cs +++ /dev/null @@ -1,231 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class FineTuningJobEvent : IJsonModel - { - internal FineTuningJobEvent() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FineTuningJobEvent)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("object") != true) - { - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("id") != true) - { - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - } - if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) - { - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - } - if (_additionalBinaryDataProperties?.ContainsKey("level") != true) - { - writer.WritePropertyName("level"u8); - writer.WriteStringValue(Level.ToSerialString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("message") != true) - { - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - } - if (Optional.IsDefined(Type) && _additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.Value.ToString()); - } - if (Optional.IsDefined(Data) && _additionalBinaryDataProperties?.ContainsKey("data") != true) - { - writer.WritePropertyName("data"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(Data); -#else - using (JsonDocument document = JsonDocument.Parse(Data)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - FineTuningJobEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual FineTuningJobEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FineTuningJobEvent)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeFineTuningJobEvent(document.RootElement, options); - } - - internal static FineTuningJobEvent DeserializeFineTuningJobEvent(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalFineTuningJobEventObject @object = default; - string id = default; - DateTimeOffset createdAt = default; - FineTuningJobEventLevel level = default; - string message = default; - InternalFineTuningJobEventType? @type = default; - BinaryData data = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("object"u8)) - { - @object = new InternalFineTuningJobEventObject(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("id"u8)) - { - id = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("created_at"u8)) - { - createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); - continue; - } - if (prop.NameEquals("level"u8)) - { - level = prop.Value.GetString().ToFineTuningJobEventLevel(); - continue; - } - if (prop.NameEquals("message"u8)) - { - message = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - @type = new InternalFineTuningJobEventType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("data"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - data = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new FineTuningJobEvent( - @object, - id, - createdAt, - level, - message, - @type, - data, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(FineTuningJobEvent)} does not support writing '{options.Format}' format."); - } - } - - FineTuningJobEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual FineTuningJobEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeFineTuningJobEvent(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(FineTuningJobEvent)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FineTuningJobEvent fineTuningJobEvent) - { - if (fineTuningJobEvent == null) - { - return null; - } - return BinaryContent.Create(fineTuningJobEvent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FineTuningJobEvent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFineTuningJobEvent(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/FineTuningJobEvent.cs b/src/Generated/Models/FineTuningJobEvent.cs deleted file mode 100644 index 0c4f8ec4a..000000000 --- a/src/Generated/Models/FineTuningJobEvent.cs +++ /dev/null @@ -1,54 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class FineTuningJobEvent - { - private protected IDictionary _additionalBinaryDataProperties; - - internal FineTuningJobEvent(string id, DateTimeOffset createdAt, FineTuningJobEventLevel level, string message) - { - Id = id; - CreatedAt = createdAt; - Level = level; - Message = message; - } - - internal FineTuningJobEvent(InternalFineTuningJobEventObject @object, string id, DateTimeOffset createdAt, FineTuningJobEventLevel level, string message, InternalFineTuningJobEventType? @type, BinaryData data, IDictionary additionalBinaryDataProperties) - { - Object = @object; - Id = id; - CreatedAt = createdAt; - Level = level; - Message = message; - Type = @type; - Data = data; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalFineTuningJobEventObject Object { get; } = "fine_tuning.job.event"; - - public string Id { get; } - - public DateTimeOffset CreatedAt { get; } - - public FineTuningJobEventLevel Level { get; } - - public string Message { get; } - - public InternalFineTuningJobEventType? Type { get; } - - public BinaryData Data { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/FineTuningJobEventKind.cs b/src/Generated/Models/FineTuningJobEventKind.cs new file mode 100644 index 000000000..1718f5e67 --- /dev/null +++ b/src/Generated/Models/FineTuningJobEventKind.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public readonly partial struct FineTuningJobEventKind : IEquatable + { + private readonly string _value; + private const string MessageValue = "message"; + private const string MetricsValue = "metrics"; + + public FineTuningJobEventKind(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static FineTuningJobEventKind Message { get; } = new FineTuningJobEventKind(MessageValue); + + public static FineTuningJobEventKind Metrics { get; } = new FineTuningJobEventKind(MetricsValue); + + public static bool operator ==(FineTuningJobEventKind left, FineTuningJobEventKind right) => left.Equals(right); + + public static bool operator !=(FineTuningJobEventKind left, FineTuningJobEventKind right) => !left.Equals(right); + + public static implicit operator FineTuningJobEventKind(string value) => new FineTuningJobEventKind(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is FineTuningJobEventKind other && Equals(other); + + public bool Equals(FineTuningJobEventKind 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/FineTuningJobHyperparameters.Serialization.cs b/src/Generated/Models/FineTuningJobHyperparameters.Serialization.cs deleted file mode 100644 index 0313a08d5..000000000 --- a/src/Generated/Models/FineTuningJobHyperparameters.Serialization.cs +++ /dev/null @@ -1,203 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct FineTuningJobHyperparameters : IJsonModel, IJsonModel - { - public FineTuningJobHyperparameters() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FineTuningJobHyperparameters)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(NEpochs) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) - { - writer.WritePropertyName("n_epochs"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(NEpochs); -#else - using (JsonDocument document = JsonDocument.Parse(NEpochs)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (Optional.IsDefined(BatchSize) && _additionalBinaryDataProperties?.ContainsKey("batch_size") != true) - { - writer.WritePropertyName("batch_size"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(BatchSize); -#else - using (JsonDocument document = JsonDocument.Parse(BatchSize)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (Optional.IsDefined(LearningRateMultiplier) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) - { - writer.WritePropertyName("learning_rate_multiplier"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(LearningRateMultiplier); -#else - using (JsonDocument document = JsonDocument.Parse(LearningRateMultiplier)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - FineTuningJobHyperparameters IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - private FineTuningJobHyperparameters JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FineTuningJobHyperparameters)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeFineTuningJobHyperparameters(document.RootElement, options); - } - - internal static FineTuningJobHyperparameters DeserializeFineTuningJobHyperparameters(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return default; - } - BinaryData nEpochs = default; - BinaryData batchSize = default; - BinaryData learningRateMultiplier = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("n_epochs"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - nEpochs = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - if (prop.NameEquals("batch_size"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - batchSize = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - if (prop.NameEquals("learning_rate_multiplier"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new FineTuningJobHyperparameters(nEpochs, batchSize, learningRateMultiplier, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - private BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(FineTuningJobHyperparameters)} does not support writing '{options.Format}' format."); - } - } - - FineTuningJobHyperparameters IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - private FineTuningJobHyperparameters PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeFineTuningJobHyperparameters(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(FineTuningJobHyperparameters)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FineTuningJobHyperparameters fineTuningJobHyperparameters) - { - return BinaryContent.Create(fineTuningJobHyperparameters, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FineTuningJobHyperparameters(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFineTuningJobHyperparameters(document.RootElement, ModelSerializationExtensions.WireOptions); - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => ((IJsonModel)this).Write(writer, options); - - object IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => ((IJsonModel)this).Create(ref reader, options); - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => ((IPersistableModel)this).Write(options); - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => ((IPersistableModel)this).GetFormatFromOptions(options); - - object IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => ((IPersistableModel)this).Create(data, options); - } -} diff --git a/src/Generated/Models/FineTuningJobHyperparameters.cs b/src/Generated/Models/FineTuningJobHyperparameters.cs deleted file mode 100644 index 2da0a095b..000000000 --- a/src/Generated/Models/FineTuningJobHyperparameters.cs +++ /dev/null @@ -1,31 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct FineTuningJobHyperparameters - { - private readonly IDictionary _additionalBinaryDataProperties; - - internal FineTuningJobHyperparameters(BinaryData nEpochs, BinaryData batchSize, BinaryData learningRateMultiplier) - { - NEpochs = nEpochs; - BatchSize = batchSize; - LearningRateMultiplier = learningRateMultiplier; - } - - internal FineTuningJobHyperparameters(BinaryData nEpochs, BinaryData batchSize, BinaryData learningRateMultiplier, IDictionary additionalBinaryDataProperties) - { - NEpochs = nEpochs; - BatchSize = batchSize; - LearningRateMultiplier = learningRateMultiplier; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - internal IDictionary SerializedAdditionalRawData => _additionalBinaryDataProperties; - } -} diff --git a/src/Generated/Models/FineTuningJobStatus.cs b/src/Generated/Models/FineTuningJobStatus.cs deleted file mode 100644 index babe3cece..000000000 --- a/src/Generated/Models/FineTuningJobStatus.cs +++ /dev/null @@ -1,56 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct FineTuningJobStatus : IEquatable - { - private readonly string _value; - private const string ValidatingFilesValue = "validating_files"; - private const string QueuedValue = "queued"; - private const string RunningValue = "running"; - private const string SucceededValue = "succeeded"; - private const string FailedValue = "failed"; - private const string CancelledValue = "cancelled"; - - public FineTuningJobStatus(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static FineTuningJobStatus ValidatingFiles { get; } = new FineTuningJobStatus(ValidatingFilesValue); - - public static FineTuningJobStatus Queued { get; } = new FineTuningJobStatus(QueuedValue); - - public static FineTuningJobStatus Running { get; } = new FineTuningJobStatus(RunningValue); - - public static FineTuningJobStatus Succeeded { get; } = new FineTuningJobStatus(SucceededValue); - - public static FineTuningJobStatus Failed { get; } = new FineTuningJobStatus(FailedValue); - - public static FineTuningJobStatus Cancelled { get; } = new FineTuningJobStatus(CancelledValue); - - public static bool operator ==(FineTuningJobStatus left, FineTuningJobStatus right) => left.Equals(right); - - public static bool operator !=(FineTuningJobStatus left, FineTuningJobStatus right) => !left.Equals(right); - - public static implicit operator FineTuningJobStatus(string value) => new FineTuningJobStatus(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is FineTuningJobStatus other && Equals(other); - - public bool Equals(FineTuningJobStatus 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/FineTuningOptions.Serialization.cs b/src/Generated/Models/FineTuningOptions.Serialization.cs index 56be23c07..dd73bbb88 100644 --- a/src/Generated/Models/FineTuningOptions.Serialization.cs +++ b/src/Generated/Models/FineTuningOptions.Serialization.cs @@ -3,20 +3,16 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.FineTuning { - internal partial class FineTuningOptions : IJsonModel + public partial class FineTuningOptions : IJsonModel { - internal FineTuningOptions() - { - } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -24,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,7 +31,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("model") != true) { writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); + writer.WriteStringValue(Model); } if (_additionalBinaryDataProperties?.ContainsKey("training_file") != true) { @@ -71,10 +68,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("seed"u8); writer.WriteNumberValue(Seed.Value); } - if (Optional.IsDefined(Method) && _additionalBinaryDataProperties?.ContainsKey("method") != true) + if (Optional.IsDefined(TrainingMethod) && _additionalBinaryDataProperties?.ContainsKey("method") != true) { writer.WritePropertyName("method"u8); - writer.WriteObjectValue(Method, options); + writer.WriteObjectValue(TrainingMethod, options); } if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) { @@ -92,6 +89,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -115,6 +113,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit FineTuningOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual FineTuningOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -132,21 +131,21 @@ internal static FineTuningOptions DeserializeFineTuningOptions(JsonElement eleme { return null; } - InternalCreateFineTuningJobRequestModel model = default; + string model = default; string trainingFile = default; HyperparameterOptions hyperparameters = default; string suffix = default; string validationFile = default; IList integrations = default; int? seed = default; - InternalTodoFineTuneMethod @method = default; + FineTuningTrainingMethod trainingMethod = default; IDictionary metadata = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("model"u8)) { - model = new InternalCreateFineTuningJobRequestModel(prop.Value.GetString()); + model = prop.Value.GetString(); continue; } if (prop.NameEquals("training_file"u8)) @@ -213,7 +212,7 @@ internal static FineTuningOptions DeserializeFineTuningOptions(JsonElement eleme { continue; } - @method = InternalTodoFineTuneMethod.DeserializeInternalTodoFineTuneMethod(prop.Value, options); + trainingMethod = FineTuningTrainingMethod.DeserializeFineTuningTrainingMethod(prop.Value, options); continue; } if (prop.NameEquals("metadata"u8)) @@ -237,6 +236,7 @@ internal static FineTuningOptions DeserializeFineTuningOptions(JsonElement eleme metadata = dictionary; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FineTuningOptions( @@ -247,20 +247,21 @@ internal static FineTuningOptions DeserializeFineTuningOptions(JsonElement eleme validationFile, integrations ?? new ChangeTrackingList(), seed, - @method, + trainingMethod, metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FineTuningOptions)} does not support writing '{options.Format}' format."); } @@ -268,6 +269,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FineTuningOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual FineTuningOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -284,21 +286,5 @@ protected virtual FineTuningOptions PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FineTuningOptions fineTuningOptions) - { - if (fineTuningOptions == null) - { - return null; - } - return BinaryContent.Create(fineTuningOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FineTuningOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFineTuningOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FineTuningOptions.cs b/src/Generated/Models/FineTuningOptions.cs index d3fce23ce..b2590b5f9 100644 --- a/src/Generated/Models/FineTuningOptions.cs +++ b/src/Generated/Models/FineTuningOptions.cs @@ -8,52 +8,25 @@ namespace OpenAI.FineTuning { - internal partial class FineTuningOptions + public partial class FineTuningOptions { private protected IDictionary _additionalBinaryDataProperties; - public FineTuningOptions(InternalCreateFineTuningJobRequestModel model, string trainingFile) - { - Argument.AssertNotNull(trainingFile, nameof(trainingFile)); - - Model = model; - TrainingFile = trainingFile; - Integrations = new ChangeTrackingList(); - Metadata = new ChangeTrackingDictionary(); - } - - internal FineTuningOptions(InternalCreateFineTuningJobRequestModel model, string trainingFile, HyperparameterOptions hyperparameters, string suffix, string validationFile, IList integrations, int? seed, InternalTodoFineTuneMethod @method, IDictionary metadata, IDictionary additionalBinaryDataProperties) + internal FineTuningOptions(string model, string trainingFile, HyperparameterOptions hyperparameters, string suffix, string validationFile, IList integrations, int? seed, FineTuningTrainingMethod trainingMethod, IDictionary metadata, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Model = model; TrainingFile = trainingFile; Hyperparameters = hyperparameters; Suffix = suffix; ValidationFile = validationFile; - Integrations = integrations; + Integrations = integrations ?? new ChangeTrackingList(); Seed = seed; - Method = @method; - Metadata = metadata; + TrainingMethod = trainingMethod; + Metadata = metadata ?? new ChangeTrackingDictionary(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateFineTuningJobRequestModel Model { get; } - - public string TrainingFile { get; } - - public HyperparameterOptions Hyperparameters { get; set; } - - public string Suffix { get; set; } - - public string ValidationFile { get; set; } - - public IList Integrations { get; set; } - - public int? Seed { get; set; } - - public InternalTodoFineTuneMethod Method { get; set; } - - public IDictionary Metadata { get; } - internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/FineTuningStatus.cs b/src/Generated/Models/FineTuningStatus.cs new file mode 100644 index 000000000..829405d75 --- /dev/null +++ b/src/Generated/Models/FineTuningStatus.cs @@ -0,0 +1,56 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public readonly partial struct FineTuningStatus : IEquatable + { + private readonly string _value; + private const string ValidatingFilesValue = "validating_files"; + private const string QueuedValue = "queued"; + private const string RunningValue = "running"; + private const string SucceededValue = "succeeded"; + private const string FailedValue = "failed"; + private const string CancelledValue = "cancelled"; + + public FineTuningStatus(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static FineTuningStatus ValidatingFiles { get; } = new FineTuningStatus(ValidatingFilesValue); + + public static FineTuningStatus Queued { get; } = new FineTuningStatus(QueuedValue); + + public static FineTuningStatus Running { get; } = new FineTuningStatus(RunningValue); + + public static FineTuningStatus Succeeded { get; } = new FineTuningStatus(SucceededValue); + + public static FineTuningStatus Failed { get; } = new FineTuningStatus(FailedValue); + + public static FineTuningStatus Cancelled { get; } = new FineTuningStatus(CancelledValue); + + public static bool operator ==(FineTuningStatus left, FineTuningStatus right) => left.Equals(right); + + public static bool operator !=(FineTuningStatus left, FineTuningStatus right) => !left.Equals(right); + + public static implicit operator FineTuningStatus(string value) => new FineTuningStatus(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is FineTuningStatus other && Equals(other); + + public bool Equals(FineTuningStatus 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/FineTuningTrainingMethod.Serialization.cs b/src/Generated/Models/FineTuningTrainingMethod.Serialization.cs new file mode 100644 index 000000000..917389894 --- /dev/null +++ b/src/Generated/Models/FineTuningTrainingMethod.Serialization.cs @@ -0,0 +1,177 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningTrainingMethod : IJsonModel + { + internal FineTuningTrainingMethod() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningTrainingMethod)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + if (Optional.IsDefined(Reinforcement) && _additionalBinaryDataProperties?.ContainsKey("reinforcement") != true) + { + writer.WritePropertyName("reinforcement"u8); + writer.WriteObjectValue(Reinforcement, options); + } + if (Optional.IsDefined(Supervised) && _additionalBinaryDataProperties?.ContainsKey("supervised") != true) + { + writer.WritePropertyName("supervised"u8); + writer.WriteObjectValue(Supervised, options); + } + if (Optional.IsDefined(Dpo) && _additionalBinaryDataProperties?.ContainsKey("dpo") != true) + { + writer.WritePropertyName("dpo"u8); + writer.WriteObjectValue(Dpo, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + FineTuningTrainingMethod IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningTrainingMethod JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FineTuningTrainingMethod)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFineTuningTrainingMethod(document.RootElement, options); + } + + internal static FineTuningTrainingMethod DeserializeFineTuningTrainingMethod(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalFineTuneMethodType kind = default; + InternalFineTuneReinforcementMethod reinforcement = default; + InternalFineTuningJobRequestMethodSupervised supervised = default; + InternalFineTuningJobRequestMethodDpo dpo = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalFineTuneMethodType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("reinforcement"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + reinforcement = InternalFineTuneReinforcementMethod.DeserializeInternalFineTuneReinforcementMethod(prop.Value, options); + continue; + } + if (prop.NameEquals("supervised"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + supervised = InternalFineTuningJobRequestMethodSupervised.DeserializeInternalFineTuningJobRequestMethodSupervised(prop.Value, options); + continue; + } + if (prop.NameEquals("dpo"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + dpo = InternalFineTuningJobRequestMethodDpo.DeserializeInternalFineTuningJobRequestMethodDpo(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new FineTuningTrainingMethod(kind, reinforcement, supervised, dpo, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(FineTuningTrainingMethod)} does not support writing '{options.Format}' format."); + } + } + + FineTuningTrainingMethod IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual FineTuningTrainingMethod PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFineTuningTrainingMethod(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FineTuningTrainingMethod)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/FineTuningTrainingMethod.cs b/src/Generated/Models/FineTuningTrainingMethod.cs new file mode 100644 index 000000000..5fdd89939 --- /dev/null +++ b/src/Generated/Models/FineTuningTrainingMethod.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + public partial class FineTuningTrainingMethod + { + private protected IDictionary _additionalBinaryDataProperties; + + internal FineTuningTrainingMethod(InternalFineTuneMethodType kind) + { + Kind = kind; + } + + internal FineTuningTrainingMethod(InternalFineTuneMethodType kind, InternalFineTuneReinforcementMethod reinforcement, InternalFineTuningJobRequestMethodSupervised supervised, InternalFineTuningJobRequestMethodDpo dpo, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Reinforcement = reinforcement; + Supervised = supervised; + Dpo = dpo; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalFineTuneMethodType Kind { get; set; } + + internal InternalFineTuneReinforcementMethod Reinforcement { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/FunctionCallOutputResponseItem.Serialization.cs b/src/Generated/Models/FunctionCallOutputResponseItem.Serialization.cs index 48b5192bf..134899228 100644 --- a/src/Generated/Models/FunctionCallOutputResponseItem.Serialization.cs +++ b/src/Generated/Models/FunctionCallOutputResponseItem.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class FunctionCallOutputResponseItem : IJsonModel { - internal FunctionCallOutputResponseItem() + internal FunctionCallOutputResponseItem() : this(InternalItemType.FunctionCallOutput, null, null, null, null, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(FunctionCallOutputResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) - { - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.Value.ToSerialString()); - } if (_additionalBinaryDataProperties?.ContainsKey("call_id") != true) { writer.WritePropertyName("call_id"u8); @@ -47,10 +43,17 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri writer.WritePropertyName("output"u8); writer.WriteStringValue(FunctionOutput); } + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup + if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.Value.ToSerialString()); + } } FunctionCallOutputResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FunctionCallOutputResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,17 +71,17 @@ internal static FunctionCallOutputResponseItem DeserializeFunctionCallOutputResp { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - FunctionCallOutputStatus? status = default; string callId = default; string functionOutput = default; + FunctionCallOutputStatus? status = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -86,15 +89,6 @@ internal static FunctionCallOutputResponseItem DeserializeFunctionCallOutputResp id = prop.Value.GetString(); continue; } - if (prop.NameEquals("status"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - status = prop.Value.GetString().ToFunctionCallOutputStatus(); - continue; - } if (prop.NameEquals("call_id"u8)) { callId = prop.Value.GetString(); @@ -105,26 +99,33 @@ internal static FunctionCallOutputResponseItem DeserializeFunctionCallOutputResp functionOutput = prop.Value.GetString(); continue; } + if (prop.NameEquals("status"u8)) + { + status = prop.Value.GetString().ToFunctionCallOutputStatus(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FunctionCallOutputResponseItem( - @type, + kind, id, additionalBinaryDataProperties, - status, callId, - functionOutput); + functionOutput, + status); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FunctionCallOutputResponseItem)} does not support writing '{options.Format}' format."); } @@ -132,6 +133,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FunctionCallOutputResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FunctionCallOutputResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -148,21 +150,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FunctionCallOutputResponseItem functionCallOutputResponseItem) - { - if (functionCallOutputResponseItem == null) - { - return null; - } - return BinaryContent.Create(functionCallOutputResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FunctionCallOutputResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFunctionCallOutputResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FunctionCallOutputResponseItem.cs b/src/Generated/Models/FunctionCallOutputResponseItem.cs index ed460a91e..82767760d 100644 --- a/src/Generated/Models/FunctionCallOutputResponseItem.cs +++ b/src/Generated/Models/FunctionCallOutputResponseItem.cs @@ -4,30 +4,25 @@ using System; using System.Collections.Generic; -using OpenAI; namespace OpenAI.Responses { public partial class FunctionCallOutputResponseItem : ResponseItem { - public FunctionCallOutputResponseItem(string callId, string functionOutput) : base(InternalResponsesItemType.FunctionCallOutput) + internal FunctionCallOutputResponseItem(string id, string callId, string functionOutput, FunctionCallOutputStatus? status) : base(InternalItemType.FunctionCallOutput, id) { - Argument.AssertNotNull(callId, nameof(callId)); - Argument.AssertNotNull(functionOutput, nameof(functionOutput)); - CallId = callId; FunctionOutput = functionOutput; + Status = status; } - internal FunctionCallOutputResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, FunctionCallOutputStatus? status, string callId, string functionOutput) : base(@type, id, additionalBinaryDataProperties) + internal FunctionCallOutputResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string callId, string functionOutput, FunctionCallOutputStatus? status) : base(kind, id, additionalBinaryDataProperties) { - Status = status; CallId = callId; FunctionOutput = functionOutput; + Status = status; } - public FunctionCallOutputStatus? Status { get; } - - public string CallId { get; set; } + public string CallId { get; } } } diff --git a/src/Generated/Models/FunctionCallResponseItem.Serialization.cs b/src/Generated/Models/FunctionCallResponseItem.Serialization.cs index 5ea8af3b7..793093a46 100644 --- a/src/Generated/Models/FunctionCallResponseItem.Serialization.cs +++ b/src/Generated/Models/FunctionCallResponseItem.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class FunctionCallResponseItem : IJsonModel { - internal FunctionCallResponseItem() + internal FunctionCallResponseItem() : this(InternalItemType.FunctionCall, null, null, null, null, null, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(FunctionCallResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) - { - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.Value.ToSerialString()); - } if (_additionalBinaryDataProperties?.ContainsKey("call_id") != true) { writer.WritePropertyName("call_id"u8); @@ -52,10 +48,17 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri writer.WritePropertyName("arguments"u8); SerializeFunctionArgumentsValue(writer, options); } + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup + if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.Value.ToSerialString()); + } } FunctionCallResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FunctionCallResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,18 +76,18 @@ internal static FunctionCallResponseItem DeserializeFunctionCallResponseItem(Jso { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - FunctionCallStatus? status = default; string callId = default; string functionName = default; BinaryData functionArguments = default; + FunctionCallStatus? status = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -92,15 +95,6 @@ internal static FunctionCallResponseItem DeserializeFunctionCallResponseItem(Jso id = prop.Value.GetString(); continue; } - if (prop.NameEquals("status"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - status = prop.Value.GetString().ToFunctionCallStatus(); - continue; - } if (prop.NameEquals("call_id"u8)) { callId = prop.Value.GetString(); @@ -116,27 +110,34 @@ internal static FunctionCallResponseItem DeserializeFunctionCallResponseItem(Jso DeserializeFunctionArgumentsValue(prop, ref functionArguments); continue; } + if (prop.NameEquals("status"u8)) + { + status = prop.Value.GetString().ToFunctionCallStatus(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FunctionCallResponseItem( - @type, + kind, id, additionalBinaryDataProperties, - status, callId, functionName, - functionArguments); + functionArguments, + status); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FunctionCallResponseItem)} does not support writing '{options.Format}' format."); } @@ -144,6 +145,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FunctionCallResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FunctionCallResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -160,21 +162,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FunctionCallResponseItem functionCallResponseItem) - { - if (functionCallResponseItem == null) - { - return null; - } - return BinaryContent.Create(functionCallResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FunctionCallResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFunctionCallResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FunctionCallResponseItem.cs b/src/Generated/Models/FunctionCallResponseItem.cs index 0341e604a..74075b986 100644 --- a/src/Generated/Models/FunctionCallResponseItem.cs +++ b/src/Generated/Models/FunctionCallResponseItem.cs @@ -4,33 +4,27 @@ using System; using System.Collections.Generic; -using OpenAI; namespace OpenAI.Responses { public partial class FunctionCallResponseItem : ResponseItem { - public FunctionCallResponseItem(string callId, string functionName, BinaryData functionArguments) : base(InternalResponsesItemType.FunctionCall) + internal FunctionCallResponseItem(string id, string callId, string functionName, BinaryData functionArguments, FunctionCallStatus? status) : base(InternalItemType.FunctionCall, id) { - Argument.AssertNotNull(callId, nameof(callId)); - Argument.AssertNotNull(functionName, nameof(functionName)); - Argument.AssertNotNull(functionArguments, nameof(functionArguments)); - CallId = callId; FunctionName = functionName; FunctionArguments = functionArguments; + Status = status; } - internal FunctionCallResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, FunctionCallStatus? status, string callId, string functionName, BinaryData functionArguments) : base(@type, id, additionalBinaryDataProperties) + internal FunctionCallResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string callId, string functionName, BinaryData functionArguments, FunctionCallStatus? status) : base(kind, id, additionalBinaryDataProperties) { - Status = status; CallId = callId; FunctionName = functionName; FunctionArguments = functionArguments; + Status = status; } - public FunctionCallStatus? Status { get; } - - public string CallId { get; set; } + public string CallId { get; } } } diff --git a/src/Generated/Models/FunctionChatMessage.Serialization.cs b/src/Generated/Models/FunctionChatMessage.Serialization.cs index 59e067b67..63a356188 100644 --- a/src/Generated/Models/FunctionChatMessage.Serialization.cs +++ b/src/Generated/Models/FunctionChatMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,10 +13,11 @@ namespace OpenAI.Chat { public partial class FunctionChatMessage : IJsonModel { - internal FunctionChatMessage() + internal FunctionChatMessage() : this(null, ChatMessageRole.Function, null, null) { } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,6 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri FunctionChatMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FunctionChatMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -72,6 +74,7 @@ internal static FunctionChatMessage DeserializeFunctionChatMessage(JsonElement e functionName = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new FunctionChatMessage(content, role, additionalBinaryDataProperties, functionName); @@ -79,13 +82,14 @@ internal static FunctionChatMessage DeserializeFunctionChatMessage(JsonElement e BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FunctionChatMessage)} does not support writing '{options.Format}' format."); } @@ -93,6 +97,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FunctionChatMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FunctionChatMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -109,21 +114,5 @@ protected override ChatMessage PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FunctionChatMessage functionChatMessage) - { - if (functionChatMessage == null) - { - return null; - } - return BinaryContent.Create(functionChatMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FunctionChatMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFunctionChatMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FunctionToolDefinition.Serialization.cs b/src/Generated/Models/FunctionToolDefinition.Serialization.cs index 169b0d47f..96cf1df97 100644 --- a/src/Generated/Models/FunctionToolDefinition.Serialization.cs +++ b/src/Generated/Models/FunctionToolDefinition.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,10 +13,14 @@ namespace OpenAI.Assistants { public partial class FunctionToolDefinition : IJsonModel { - internal FunctionToolDefinition() + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -28,12 +32,13 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); - writer.WriteObjectValue(_internalFunction, options); + writer.WriteObjectValue(Function, options); } } FunctionToolDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (FunctionToolDefinition)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,35 +56,37 @@ internal static FunctionToolDefinition DeserializeFunctionToolDefinition(JsonEle { return null; } - string @type = "function"; + InternalAssistantToolDefinitionType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalFunctionDefinition internalFunction = default; + InternalFunctionDefinition function = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalAssistantToolDefinitionType(prop.Value.GetString()); continue; } if (prop.NameEquals("function"u8)) { - internalFunction = InternalFunctionDefinition.DeserializeInternalFunctionDefinition(prop.Value, options); + function = InternalFunctionDefinition.DeserializeInternalFunctionDefinition(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new FunctionToolDefinition(@type, additionalBinaryDataProperties, internalFunction); + return new FunctionToolDefinition(kind, additionalBinaryDataProperties, function); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FunctionToolDefinition)} does not support writing '{options.Format}' format."); } @@ -87,6 +94,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FunctionToolDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (FunctionToolDefinition)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -103,21 +111,5 @@ protected override ToolDefinition PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(FunctionToolDefinition functionToolDefinition) - { - if (functionToolDefinition == null) - { - return null; - } - return BinaryContent.Create(functionToolDefinition, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator FunctionToolDefinition(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeFunctionToolDefinition(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/FunctionToolDefinition.cs b/src/Generated/Models/FunctionToolDefinition.cs index 7f6954214..eebfc3c34 100644 --- a/src/Generated/Models/FunctionToolDefinition.cs +++ b/src/Generated/Models/FunctionToolDefinition.cs @@ -10,9 +10,11 @@ namespace OpenAI.Assistants { public partial class FunctionToolDefinition : ToolDefinition { - internal FunctionToolDefinition(string @type, IDictionary additionalBinaryDataProperties, InternalFunctionDefinition internalFunction) : base(@type, additionalBinaryDataProperties) + internal FunctionToolDefinition(InternalAssistantToolDefinitionType kind, IDictionary additionalBinaryDataProperties, InternalFunctionDefinition function) : base(kind, additionalBinaryDataProperties) { - _internalFunction = internalFunction; + Function = function; } + + internal InternalFunctionDefinition Function { get; set; } } } diff --git a/src/Generated/Models/GeneratedImage.Serialization.cs b/src/Generated/Models/GeneratedImage.Serialization.cs index fa6a11c94..ade7a2a6b 100644 --- a/src/Generated/Models/GeneratedImage.Serialization.cs +++ b/src/Generated/Models/GeneratedImage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("url"u8); writer.WriteStringValue(ImageUri.AbsoluteUri); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit GeneratedImage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual GeneratedImage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,6 +114,7 @@ internal static GeneratedImage DeserializeGeneratedImage(JsonElement element, Mo imageUri = new Uri(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new GeneratedImage(revisedPrompt, imageBytes, imageUri, additionalBinaryDataProperties); @@ -118,13 +122,14 @@ internal static GeneratedImage DeserializeGeneratedImage(JsonElement element, Mo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(GeneratedImage)} does not support writing '{options.Format}' format."); } @@ -132,6 +137,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions GeneratedImage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual GeneratedImage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -148,21 +154,5 @@ protected virtual GeneratedImage PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(GeneratedImage generatedImage) - { - if (generatedImage == null) - { - return null; - } - return BinaryContent.Create(generatedImage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator GeneratedImage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeGeneratedImage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/GeneratedImageBackground.cs b/src/Generated/Models/GeneratedImageBackground.cs new file mode 100644 index 000000000..42cc41bcb --- /dev/null +++ b/src/Generated/Models/GeneratedImageBackground.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Images +{ + public readonly partial struct GeneratedImageBackground : IEquatable + { + private readonly string _value; + private const string TransparentValue = "transparent"; + private const string OpaqueValue = "opaque"; + private const string AutoValue = "auto"; + + public GeneratedImageBackground(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static GeneratedImageBackground Transparent { get; } = new GeneratedImageBackground(TransparentValue); + + public static GeneratedImageBackground Opaque { get; } = new GeneratedImageBackground(OpaqueValue); + + public static GeneratedImageBackground Auto { get; } = new GeneratedImageBackground(AutoValue); + + public static bool operator ==(GeneratedImageBackground left, GeneratedImageBackground right) => left.Equals(right); + + public static bool operator !=(GeneratedImageBackground left, GeneratedImageBackground right) => !left.Equals(right); + + public static implicit operator GeneratedImageBackground(string value) => new GeneratedImageBackground(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is GeneratedImageBackground other && Equals(other); + + public bool Equals(GeneratedImageBackground 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/GeneratedImageCollection.Serialization.cs b/src/Generated/Models/GeneratedImageCollection.Serialization.cs index ed8c4fed2..82a296ca9 100644 --- a/src/Generated/Models/GeneratedImageCollection.Serialization.cs +++ b/src/Generated/Models/GeneratedImageCollection.Serialization.cs @@ -3,8 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,6 +13,14 @@ namespace OpenAI.Images { public partial class GeneratedImageCollection : IJsonModel { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -19,11 +28,27 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(GeneratedImageCollection)} does not support writing '{format}' format."); } + if (Optional.IsCollectionDefined(Data) && _additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (GeneratedImage item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(Usage) && _additionalBinaryDataProperties?.ContainsKey("usage") != true) + { + writer.WritePropertyName("usage"u8); + writer.WriteObjectValue(Usage, options); + } if (_additionalBinaryDataProperties?.ContainsKey("created") != true) { writer.WritePropertyName("created"u8); writer.WriteNumberValue(CreatedAt, "U"); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -47,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit GeneratedImageCollection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual GeneratedImageCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,15 +84,62 @@ protected virtual GeneratedImageCollection JsonModelCreateCore(ref Utf8JsonReade return DeserializeGeneratedImageCollection(document.RootElement, options); } + internal static GeneratedImageCollection DeserializeGeneratedImageCollection(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IList data = default; + ImageTokenUsage usage = default; + DateTimeOffset createdAt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("data"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(GeneratedImage.DeserializeGeneratedImage(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("usage"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + usage = ImageTokenUsage.DeserializeImageTokenUsage(prop.Value, options); + continue; + } + if (prop.NameEquals("created"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new GeneratedImageCollection(data ?? new ChangeTrackingList(), usage, createdAt, additionalBinaryDataProperties); + } + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(GeneratedImageCollection)} does not support writing '{options.Format}' format."); } @@ -74,6 +147,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions GeneratedImageCollection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual GeneratedImageCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -90,21 +164,5 @@ protected virtual GeneratedImageCollection PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(GeneratedImageCollection generatedImageCollection) - { - if (generatedImageCollection == null) - { - return null; - } - return BinaryContent.Create(generatedImageCollection, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator GeneratedImageCollection(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeGeneratedImageCollection(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/GeneratedImageCollection.cs b/src/Generated/Models/GeneratedImageCollection.cs index 7446dd1af..a1470cf78 100644 --- a/src/Generated/Models/GeneratedImageCollection.cs +++ b/src/Generated/Models/GeneratedImageCollection.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Images { @@ -11,6 +12,11 @@ public partial class GeneratedImageCollection { private protected IDictionary _additionalBinaryDataProperties; + internal IList Data { get; } + + [Experimental("OPENAI001")] + public ImageTokenUsage Usage { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/GeneratedImageFileFormat.cs b/src/Generated/Models/GeneratedImageFileFormat.cs new file mode 100644 index 000000000..290308230 --- /dev/null +++ b/src/Generated/Models/GeneratedImageFileFormat.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Images +{ + public readonly partial struct GeneratedImageFileFormat : IEquatable + { + private readonly string _value; + private const string PngValue = "png"; + private const string JpegValue = "jpeg"; + private const string WebpValue = "webp"; + + public GeneratedImageFileFormat(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static GeneratedImageFileFormat Png { get; } = new GeneratedImageFileFormat(PngValue); + + public static GeneratedImageFileFormat Jpeg { get; } = new GeneratedImageFileFormat(JpegValue); + + public static GeneratedImageFileFormat Webp { get; } = new GeneratedImageFileFormat(WebpValue); + + public static bool operator ==(GeneratedImageFileFormat left, GeneratedImageFileFormat right) => left.Equals(right); + + public static bool operator !=(GeneratedImageFileFormat left, GeneratedImageFileFormat right) => !left.Equals(right); + + public static implicit operator GeneratedImageFileFormat(string value) => new GeneratedImageFileFormat(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is GeneratedImageFileFormat other && Equals(other); + + public bool Equals(GeneratedImageFileFormat 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/GeneratedImageModerationLevel.cs b/src/Generated/Models/GeneratedImageModerationLevel.cs new file mode 100644 index 000000000..083c3c553 --- /dev/null +++ b/src/Generated/Models/GeneratedImageModerationLevel.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Images +{ + public readonly partial struct GeneratedImageModerationLevel : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string AutoValue = "auto"; + + public GeneratedImageModerationLevel(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static GeneratedImageModerationLevel Low { get; } = new GeneratedImageModerationLevel(LowValue); + + public static GeneratedImageModerationLevel Auto { get; } = new GeneratedImageModerationLevel(AutoValue); + + public static bool operator ==(GeneratedImageModerationLevel left, GeneratedImageModerationLevel right) => left.Equals(right); + + public static bool operator !=(GeneratedImageModerationLevel left, GeneratedImageModerationLevel right) => !left.Equals(right); + + public static implicit operator GeneratedImageModerationLevel(string value) => new GeneratedImageModerationLevel(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is GeneratedImageModerationLevel other && Equals(other); + + public bool Equals(GeneratedImageModerationLevel 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/GeneratedImageQuality.cs b/src/Generated/Models/GeneratedImageQuality.cs index 030295c0b..a3ff1687c 100644 --- a/src/Generated/Models/GeneratedImageQuality.cs +++ b/src/Generated/Models/GeneratedImageQuality.cs @@ -4,6 +4,7 @@ using System; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using OpenAI; namespace OpenAI.Images @@ -13,6 +14,10 @@ namespace OpenAI.Images private readonly string _value; private const string StandardValue = "standard"; private const string HdValue = "hd"; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + private const string AutoValue = "auto"; public GeneratedImageQuality(string value) { @@ -23,6 +28,15 @@ public GeneratedImageQuality(string value) public static GeneratedImageQuality Standard { get; } = new GeneratedImageQuality(StandardValue); + [Experimental("OPENAI001")] + public static GeneratedImageQuality Low { get; } = new GeneratedImageQuality(LowValue); + + [Experimental("OPENAI001")] + public static GeneratedImageQuality Medium { get; } = new GeneratedImageQuality(MediumValue); + + [Experimental("OPENAI001")] + public static GeneratedImageQuality Auto { get; } = new GeneratedImageQuality(AutoValue); + public static bool operator ==(GeneratedImageQuality left, GeneratedImageQuality right) => left.Equals(right); public static bool operator !=(GeneratedImageQuality left, GeneratedImageQuality right) => !left.Equals(right); diff --git a/src/Generated/Models/GeneratedImageSize.cs b/src/Generated/Models/GeneratedImageSize.cs index ae5e05493..cee33b7cc 100644 --- a/src/Generated/Models/GeneratedImageSize.cs +++ b/src/Generated/Models/GeneratedImageSize.cs @@ -4,18 +4,25 @@ using System; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Images { public readonly partial struct GeneratedImageSize : IEquatable { private readonly string _value; + private const string AutoValue = "auto"; + private const string _1024x1024Value = "1024x1024"; + private const string _1536x1024Value = "1536x1024"; + private const string _1024x1536Value = "1024x1536"; private const string _256x256Value = "256x256"; private const string _512x512Value = "512x512"; - private const string _1024x1024Value = "1024x1024"; private const string _1792x1024Value = "1792x1024"; private const string _1024x1792Value = "1024x1792"; + [Experimental("OPENAI001")] + public static GeneratedImageSize Auto { get; } = new GeneratedImageSize(AutoValue); + public static bool operator ==(GeneratedImageSize left, GeneratedImageSize right) => left.Equals(right); public static bool operator !=(GeneratedImageSize left, GeneratedImageSize right) => !left.Equals(right); diff --git a/src/Generated/Models/GeneratedSpeechVoice.cs b/src/Generated/Models/GeneratedSpeechVoice.cs index d224a73ec..9a80196d1 100644 --- a/src/Generated/Models/GeneratedSpeechVoice.cs +++ b/src/Generated/Models/GeneratedSpeechVoice.cs @@ -4,6 +4,7 @@ using System; using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using OpenAI; namespace OpenAI.Audio @@ -13,6 +14,7 @@ namespace OpenAI.Audio private readonly string _value; private const string AlloyValue = "alloy"; private const string AshValue = "ash"; + private const string BalladValue = "ballad"; private const string CoralValue = "coral"; private const string EchoValue = "echo"; private const string FableValue = "fable"; @@ -20,6 +22,7 @@ namespace OpenAI.Audio private const string NovaValue = "nova"; private const string SageValue = "sage"; private const string ShimmerValue = "shimmer"; + private const string VerseValue = "verse"; public GeneratedSpeechVoice(string value) { @@ -30,8 +33,13 @@ public GeneratedSpeechVoice(string value) public static GeneratedSpeechVoice Alloy { get; } = new GeneratedSpeechVoice(AlloyValue); + [Experimental("OPENAI001")] public static GeneratedSpeechVoice Ash { get; } = new GeneratedSpeechVoice(AshValue); + [Experimental("OPENAI001")] + public static GeneratedSpeechVoice Ballad { get; } = new GeneratedSpeechVoice(BalladValue); + + [Experimental("OPENAI001")] public static GeneratedSpeechVoice Coral { get; } = new GeneratedSpeechVoice(CoralValue); public static GeneratedSpeechVoice Echo { get; } = new GeneratedSpeechVoice(EchoValue); @@ -42,10 +50,14 @@ public GeneratedSpeechVoice(string value) public static GeneratedSpeechVoice Nova { get; } = new GeneratedSpeechVoice(NovaValue); + [Experimental("OPENAI001")] public static GeneratedSpeechVoice Sage { get; } = new GeneratedSpeechVoice(SageValue); public static GeneratedSpeechVoice Shimmer { get; } = new GeneratedSpeechVoice(ShimmerValue); + [Experimental("OPENAI001")] + public static GeneratedSpeechVoice Verse { get; } = new GeneratedSpeechVoice(VerseValue); + public static bool operator ==(GeneratedSpeechVoice left, GeneratedSpeechVoice right) => left.Equals(right); public static bool operator !=(GeneratedSpeechVoice left, GeneratedSpeechVoice right) => !left.Equals(right); diff --git a/src/Generated/Models/HyperparameterOptions.Serialization.cs b/src/Generated/Models/HyperparameterOptions.Serialization.cs index 7ad18598a..7d3b5cc5f 100644 --- a/src/Generated/Models/HyperparameterOptions.Serialization.cs +++ b/src/Generated/Models/HyperparameterOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,42 +28,22 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(HyperparameterOptions)} does not support writing '{format}' format."); } + if (Optional.IsDefined(EpochCount) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) + { + writer.WritePropertyName("n_epochs"u8); + writer.WriteObjectValue(EpochCount, options); + } if (Optional.IsDefined(BatchSize) && _additionalBinaryDataProperties?.ContainsKey("batch_size") != true) { writer.WritePropertyName("batch_size"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(BatchSize); -#else - using (JsonDocument document = JsonDocument.Parse(BatchSize)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif + writer.WriteObjectValue(BatchSize, options); } - if (Optional.IsDefined(LearningRateMultiplier) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) + if (Optional.IsDefined(LearningRate) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) { writer.WritePropertyName("learning_rate_multiplier"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(LearningRateMultiplier); -#else - using (JsonDocument document = JsonDocument.Parse(LearningRateMultiplier)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (Optional.IsDefined(NEpochs) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) - { - writer.WritePropertyName("n_epochs"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(NEpochs); -#else - using (JsonDocument document = JsonDocument.Parse(NEpochs)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif + writer.WriteObjectValue(LearningRate, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -86,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit HyperparameterOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual HyperparameterOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -103,53 +85,55 @@ internal static HyperparameterOptions DeserializeHyperparameterOptions(JsonEleme { return null; } - BinaryData batchSize = default; - BinaryData learningRateMultiplier = default; - BinaryData nEpochs = default; + HyperparameterEpochCount epochCount = default; + HyperparameterBatchSize batchSize = default; + HyperparameterLearningRate learningRate = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("batch_size"u8)) + if (prop.NameEquals("n_epochs"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { continue; } - batchSize = BinaryData.FromString(prop.Value.GetRawText()); + epochCount = HyperparameterEpochCount.DeserializeHyperparameterEpochCount(prop.Value, options); continue; } - if (prop.NameEquals("learning_rate_multiplier"u8)) + if (prop.NameEquals("batch_size"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { continue; } - learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); + batchSize = HyperparameterBatchSize.DeserializeHyperparameterBatchSize(prop.Value, options); continue; } - if (prop.NameEquals("n_epochs"u8)) + if (prop.NameEquals("learning_rate_multiplier"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { continue; } - nEpochs = BinaryData.FromString(prop.Value.GetRawText()); + learningRate = HyperparameterLearningRate.DeserializeHyperparameterLearningRate(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new HyperparameterOptions(batchSize, learningRateMultiplier, nEpochs, additionalBinaryDataProperties); + return new HyperparameterOptions(epochCount, batchSize, learningRate, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(HyperparameterOptions)} does not support writing '{options.Format}' format."); } @@ -157,6 +141,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions HyperparameterOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual HyperparameterOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -173,21 +158,5 @@ protected virtual HyperparameterOptions PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(HyperparameterOptions hyperparameterOptions) - { - if (hyperparameterOptions == null) - { - return null; - } - return BinaryContent.Create(hyperparameterOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator HyperparameterOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeHyperparameterOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/HyperparameterOptions.cs b/src/Generated/Models/HyperparameterOptions.cs index 7f7363911..c1ea7ba69 100644 --- a/src/Generated/Models/HyperparameterOptions.cs +++ b/src/Generated/Models/HyperparameterOptions.cs @@ -15,20 +15,14 @@ public HyperparameterOptions() { } - internal HyperparameterOptions(BinaryData batchSize, BinaryData learningRateMultiplier, BinaryData nEpochs, IDictionary additionalBinaryDataProperties) + internal HyperparameterOptions(HyperparameterEpochCount epochCount, HyperparameterBatchSize batchSize, HyperparameterLearningRate learningRate, IDictionary additionalBinaryDataProperties) { + EpochCount = epochCount; BatchSize = batchSize; - LearningRateMultiplier = learningRateMultiplier; - NEpochs = nEpochs; + LearningRate = learningRate; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public BinaryData BatchSize { get; set; } - - public BinaryData LearningRateMultiplier { get; set; } - - public BinaryData NEpochs { get; set; } - internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/HyperparametersForDPO.Serialization.cs b/src/Generated/Models/HyperparametersForDPO.Serialization.cs new file mode 100644 index 000000000..bfca88769 --- /dev/null +++ b/src/Generated/Models/HyperparametersForDPO.Serialization.cs @@ -0,0 +1,205 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public partial class HyperparametersForDPO : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(HyperparametersForDPO)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(_BatchSize) && _additionalBinaryDataProperties?.ContainsKey("batch_size") != true) + { + writer.WritePropertyName("batch_size"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_BatchSize); +#else + using (JsonDocument document = JsonDocument.Parse(_BatchSize)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(_NEpochs) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) + { + writer.WritePropertyName("n_epochs"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_NEpochs); +#else + using (JsonDocument document = JsonDocument.Parse(_NEpochs)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(_LearningRateMultiplier) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) + { + writer.WritePropertyName("learning_rate_multiplier"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_LearningRateMultiplier); +#else + using (JsonDocument document = JsonDocument.Parse(_LearningRateMultiplier)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(_Beta) && _additionalBinaryDataProperties?.ContainsKey("beta") != true) + { + writer.WritePropertyName("beta"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_Beta); +#else + using (JsonDocument document = JsonDocument.Parse(_Beta)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + HyperparametersForDPO IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual HyperparametersForDPO JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(HyperparametersForDPO)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeHyperparametersForDPO(document.RootElement, options); + } + + internal static HyperparametersForDPO DeserializeHyperparametersForDPO(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData batchSize = default; + BinaryData nEpochs = default; + BinaryData learningRateMultiplier = default; + BinaryData beta = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("batch_size"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + batchSize = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("n_epochs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + nEpochs = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("learning_rate_multiplier"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("beta"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + beta = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new HyperparametersForDPO(batchSize, nEpochs, learningRateMultiplier, beta, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(HyperparametersForDPO)} does not support writing '{options.Format}' format."); + } + } + + HyperparametersForDPO IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual HyperparametersForDPO PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeHyperparametersForDPO(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(HyperparametersForDPO)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/HyperparametersForDPO.cs b/src/Generated/Models/HyperparametersForDPO.cs new file mode 100644 index 000000000..2932624ce --- /dev/null +++ b/src/Generated/Models/HyperparametersForDPO.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + public partial class HyperparametersForDPO + { + private protected IDictionary _additionalBinaryDataProperties; + + public HyperparametersForDPO() + { + } + + internal HyperparametersForDPO(BinaryData batchSize, BinaryData nEpochs, BinaryData learningRateMultiplier, BinaryData beta, IDictionary additionalBinaryDataProperties) + { + _BatchSize = batchSize; + _NEpochs = nEpochs; + _LearningRateMultiplier = learningRateMultiplier; + _Beta = beta; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/HyperparametersForSupervised.Serialization.cs b/src/Generated/Models/HyperparametersForSupervised.Serialization.cs new file mode 100644 index 000000000..6c6cba3a1 --- /dev/null +++ b/src/Generated/Models/HyperparametersForSupervised.Serialization.cs @@ -0,0 +1,183 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + public partial class HyperparametersForSupervised : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(HyperparametersForSupervised)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(_BatchSize) && _additionalBinaryDataProperties?.ContainsKey("batch_size") != true) + { + writer.WritePropertyName("batch_size"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_BatchSize); +#else + using (JsonDocument document = JsonDocument.Parse(_BatchSize)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(_NEpochs) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) + { + writer.WritePropertyName("n_epochs"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_NEpochs); +#else + using (JsonDocument document = JsonDocument.Parse(_NEpochs)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(_LearningRateMultiplier) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) + { + writer.WritePropertyName("learning_rate_multiplier"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(_LearningRateMultiplier); +#else + using (JsonDocument document = JsonDocument.Parse(_LearningRateMultiplier)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + HyperparametersForSupervised IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual HyperparametersForSupervised JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(HyperparametersForSupervised)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeHyperparametersForSupervised(document.RootElement, options); + } + + internal static HyperparametersForSupervised DeserializeHyperparametersForSupervised(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData batchSize = default; + BinaryData nEpochs = default; + BinaryData learningRateMultiplier = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("batch_size"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + batchSize = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("n_epochs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + nEpochs = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("learning_rate_multiplier"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new HyperparametersForSupervised(batchSize, nEpochs, learningRateMultiplier, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(HyperparametersForSupervised)} does not support writing '{options.Format}' format."); + } + } + + HyperparametersForSupervised IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual HyperparametersForSupervised PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeHyperparametersForSupervised(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(HyperparametersForSupervised)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/HyperparametersForSupervised.cs b/src/Generated/Models/HyperparametersForSupervised.cs new file mode 100644 index 000000000..8d0e8c6e3 --- /dev/null +++ b/src/Generated/Models/HyperparametersForSupervised.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + public partial class HyperparametersForSupervised + { + private protected IDictionary _additionalBinaryDataProperties; + + public HyperparametersForSupervised() + { + } + + internal HyperparametersForSupervised(BinaryData batchSize, BinaryData nEpochs, BinaryData learningRateMultiplier, IDictionary additionalBinaryDataProperties) + { + _BatchSize = batchSize; + _NEpochs = nEpochs; + _LearningRateMultiplier = learningRateMultiplier; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ImageEditOptions.Serialization.cs b/src/Generated/Models/ImageEditOptions.Serialization.cs index 575b51612..474728b9b 100644 --- a/src/Generated/Models/ImageEditOptions.Serialization.cs +++ b/src/Generated/Models/ImageEditOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Images { public partial class ImageEditOptions : IJsonModel { + public ImageEditOptions() + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,6 +32,16 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ImageEditOptions)} does not support writing '{format}' format."); } + if (Optional.IsDefined(Background) && _additionalBinaryDataProperties?.ContainsKey("background") != true) + { + writer.WritePropertyName("background"u8); + writer.WriteStringValue(Background.Value.ToString()); + } + if (Optional.IsDefined(Quality) && _additionalBinaryDataProperties?.ContainsKey("quality") != true) + { + writer.WritePropertyName("quality"u8); + writer.WriteStringValue(Quality.Value.ToString()); + } if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { writer.WritePropertyName("model"u8); @@ -35,7 +50,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("image") != true) { writer.WritePropertyName("image"u8); - writer.WriteBase64StringValue(Image.ToArray(), "D"); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Image); +#else + using (JsonDocument document = JsonDocument.Parse(Image)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif } if (_additionalBinaryDataProperties?.ContainsKey("prompt") != true) { @@ -67,6 +89,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -90,6 +113,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ImageEditOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ImageEditOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +131,8 @@ internal static ImageEditOptions DeserializeImageEditOptions(JsonElement element { return null; } + InternalCreateImageEditRequestBackground? background = default; + InternalCreateImageEditRequestQuality? quality = default; InternalCreateImageEditRequestModel? model = default; BinaryData image = default; string prompt = default; @@ -118,6 +144,26 @@ internal static ImageEditOptions DeserializeImageEditOptions(JsonElement element IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { + if (prop.NameEquals("background"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + background = null; + continue; + } + background = new InternalCreateImageEditRequestBackground(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("quality"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + quality = null; + continue; + } + quality = new InternalCreateImageEditRequestQuality(prop.Value.GetString()); + continue; + } if (prop.NameEquals("model"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -130,7 +176,7 @@ internal static ImageEditOptions DeserializeImageEditOptions(JsonElement element } if (prop.NameEquals("image"u8)) { - image = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); + image = BinaryData.FromString(prop.Value.GetRawText()); continue; } if (prop.NameEquals("prompt"u8)) @@ -182,9 +228,12 @@ internal static ImageEditOptions DeserializeImageEditOptions(JsonElement element endUserId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ImageEditOptions( + background, + quality, model, image, prompt, @@ -198,13 +247,14 @@ internal static ImageEditOptions DeserializeImageEditOptions(JsonElement element BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ImageEditOptions)} does not support writing '{options.Format}' format."); } @@ -212,6 +262,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ImageEditOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ImageEditOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -228,21 +279,5 @@ protected virtual ImageEditOptions PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ImageEditOptions imageEditOptions) - { - if (imageEditOptions == null) - { - return null; - } - return BinaryContent.Create(imageEditOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ImageEditOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeImageEditOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ImageEditOptions.cs b/src/Generated/Models/ImageEditOptions.cs index c204556ea..773289878 100644 --- a/src/Generated/Models/ImageEditOptions.cs +++ b/src/Generated/Models/ImageEditOptions.cs @@ -11,8 +11,10 @@ public partial class ImageEditOptions { private protected IDictionary _additionalBinaryDataProperties; - internal ImageEditOptions(InternalCreateImageEditRequestModel? model, BinaryData image, string prompt, BinaryData mask, long? n, GeneratedImageSize? size, GeneratedImageFormat? responseFormat, string endUserId, IDictionary additionalBinaryDataProperties) + internal ImageEditOptions(InternalCreateImageEditRequestBackground? background, InternalCreateImageEditRequestQuality? quality, InternalCreateImageEditRequestModel? model, BinaryData image, string prompt, BinaryData mask, long? n, GeneratedImageSize? size, GeneratedImageFormat? responseFormat, string endUserId, IDictionary additionalBinaryDataProperties) { + Background = background; + Quality = quality; Model = model; Image = image; Prompt = prompt; @@ -24,6 +26,10 @@ internal ImageEditOptions(InternalCreateImageEditRequestModel? model, BinaryData _additionalBinaryDataProperties = additionalBinaryDataProperties; } + internal InternalCreateImageEditRequestBackground? Background { get; set; } + + internal InternalCreateImageEditRequestQuality? Quality { get; set; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ImageGenerationOptions.Serialization.cs b/src/Generated/Models/ImageGenerationOptions.Serialization.cs index f4d097c38..5f57ac184 100644 --- a/src/Generated/Models/ImageGenerationOptions.Serialization.cs +++ b/src/Generated/Models/ImageGenerationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Images { public partial class ImageGenerationOptions : IJsonModel { + public ImageGenerationOptions() + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +47,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("size"u8); writer.WriteStringValue(Size.Value.ToString()); } + if (Optional.IsDefined(Background) && _additionalBinaryDataProperties?.ContainsKey("background") != true) + { + writer.WritePropertyName("background"u8); + writer.WriteStringValue(Background.Value.ToString()); + } if (Optional.IsDefined(Style) && _additionalBinaryDataProperties?.ContainsKey("style") != true) { writer.WritePropertyName("style"u8); @@ -67,6 +77,22 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } + if (Optional.IsDefined(OutputCompressionFactor) && _additionalBinaryDataProperties?.ContainsKey("output_compression") != true) + { + writer.WritePropertyName("output_compression"u8); + writer.WriteNumberValue(OutputCompressionFactor.Value); + } + if (Optional.IsDefined(OutputFileFormat) && _additionalBinaryDataProperties?.ContainsKey("output_format") != true) + { + writer.WritePropertyName("output_format"u8); + writer.WriteStringValue(OutputFileFormat.Value.ToString()); + } + if (Optional.IsDefined(ModerationLevel) && _additionalBinaryDataProperties?.ContainsKey("moderation") != true) + { + writer.WritePropertyName("moderation"u8); + writer.WriteStringValue(ModerationLevel.Value.ToString()); + } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -90,6 +116,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ImageGenerationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ImageGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,11 +137,15 @@ internal static ImageGenerationOptions DeserializeImageGenerationOptions(JsonEle GeneratedImageQuality? quality = default; GeneratedImageFormat? responseFormat = default; GeneratedImageSize? size = default; + GeneratedImageBackground? background = default; GeneratedImageStyle? style = default; InternalCreateImageRequestModel? model = default; string prompt = default; long? n = default; string endUserId = default; + int? outputCompressionFactor = default; + GeneratedImageFileFormat? outputFileFormat = default; + GeneratedImageModerationLevel? moderationLevel = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -122,6 +153,7 @@ internal static ImageGenerationOptions DeserializeImageGenerationOptions(JsonEle { if (prop.Value.ValueKind == JsonValueKind.Null) { + quality = null; continue; } quality = new GeneratedImageQuality(prop.Value.GetString()); @@ -147,6 +179,16 @@ internal static ImageGenerationOptions DeserializeImageGenerationOptions(JsonEle size = new GeneratedImageSize(prop.Value.GetString()); continue; } + if (prop.NameEquals("background"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + background = null; + continue; + } + background = new GeneratedImageBackground(prop.Value.GetString()); + continue; + } if (prop.NameEquals("style"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -187,29 +229,65 @@ internal static ImageGenerationOptions DeserializeImageGenerationOptions(JsonEle endUserId = prop.Value.GetString(); continue; } + if (prop.NameEquals("output_compression"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + outputCompressionFactor = null; + continue; + } + outputCompressionFactor = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + outputFileFormat = null; + continue; + } + outputFileFormat = new GeneratedImageFileFormat(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("moderation"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + moderationLevel = null; + continue; + } + moderationLevel = new GeneratedImageModerationLevel(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ImageGenerationOptions( quality, responseFormat, size, + background, style, model, prompt, n, endUserId, + outputCompressionFactor, + outputFileFormat, + moderationLevel, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ImageGenerationOptions)} does not support writing '{options.Format}' format."); } @@ -217,6 +295,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ImageGenerationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ImageGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -233,21 +312,5 @@ protected virtual ImageGenerationOptions PersistableModelCreateCore(BinaryData d } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ImageGenerationOptions imageGenerationOptions) - { - if (imageGenerationOptions == null) - { - return null; - } - return BinaryContent.Create(imageGenerationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ImageGenerationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeImageGenerationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ImageGenerationOptions.cs b/src/Generated/Models/ImageGenerationOptions.cs index f38aeba44..8fdcf818a 100644 --- a/src/Generated/Models/ImageGenerationOptions.cs +++ b/src/Generated/Models/ImageGenerationOptions.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Images { @@ -11,16 +12,20 @@ public partial class ImageGenerationOptions { private protected IDictionary _additionalBinaryDataProperties; - internal ImageGenerationOptions(GeneratedImageQuality? quality, GeneratedImageFormat? responseFormat, GeneratedImageSize? size, GeneratedImageStyle? style, InternalCreateImageRequestModel? model, string prompt, long? n, string endUserId, IDictionary additionalBinaryDataProperties) + internal ImageGenerationOptions(GeneratedImageQuality? quality, GeneratedImageFormat? responseFormat, GeneratedImageSize? size, GeneratedImageBackground? background, GeneratedImageStyle? style, InternalCreateImageRequestModel? model, string prompt, long? n, string endUserId, int? outputCompressionFactor, GeneratedImageFileFormat? outputFileFormat, GeneratedImageModerationLevel? moderationLevel, IDictionary additionalBinaryDataProperties) { Quality = quality; ResponseFormat = responseFormat; Size = size; + Background = background; Style = style; Model = model; Prompt = prompt; N = n; EndUserId = endUserId; + OutputCompressionFactor = outputCompressionFactor; + OutputFileFormat = outputFileFormat; + ModerationLevel = moderationLevel; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -30,6 +35,9 @@ internal ImageGenerationOptions(GeneratedImageQuality? quality, GeneratedImageFo public GeneratedImageSize? Size { get; set; } + [Experimental("OPENAI001")] + public GeneratedImageBackground? Background { get; set; } + public GeneratedImageStyle? Style { get; set; } internal IDictionary SerializedAdditionalRawData diff --git a/src/Generated/Models/ImageInputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ImageInputTokenUsageDetails.Serialization.cs new file mode 100644 index 000000000..d8db6226f --- /dev/null +++ b/src/Generated/Models/ImageInputTokenUsageDetails.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Images +{ + public partial class ImageInputTokenUsageDetails : IJsonModel + { + internal ImageInputTokenUsageDetails() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ImageInputTokenUsageDetails)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("text_tokens") != true) + { + writer.WritePropertyName("text_tokens"u8); + writer.WriteNumberValue(TextTokenCount); + } + if (_additionalBinaryDataProperties?.ContainsKey("image_tokens") != true) + { + writer.WritePropertyName("image_tokens"u8); + writer.WriteNumberValue(ImageTokenCount); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + ImageInputTokenUsageDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual ImageInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ImageInputTokenUsageDetails)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeImageInputTokenUsageDetails(document.RootElement, options); + } + + internal static ImageInputTokenUsageDetails DeserializeImageInputTokenUsageDetails(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int textTokenCount = default; + int imageTokenCount = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("text_tokens"u8)) + { + textTokenCount = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("image_tokens"u8)) + { + imageTokenCount = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ImageInputTokenUsageDetails(textTokenCount, imageTokenCount, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ImageInputTokenUsageDetails)} does not support writing '{options.Format}' format."); + } + } + + ImageInputTokenUsageDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual ImageInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeImageInputTokenUsageDetails(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ImageInputTokenUsageDetails)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ImageInputTokenUsageDetails.cs b/src/Generated/Models/ImageInputTokenUsageDetails.cs new file mode 100644 index 000000000..53837640a --- /dev/null +++ b/src/Generated/Models/ImageInputTokenUsageDetails.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Images +{ + public partial class ImageInputTokenUsageDetails + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ImageInputTokenUsageDetails(int textTokenCount, int imageTokenCount) + { + TextTokenCount = textTokenCount; + ImageTokenCount = imageTokenCount; + } + + internal ImageInputTokenUsageDetails(int textTokenCount, int imageTokenCount, IDictionary additionalBinaryDataProperties) + { + TextTokenCount = textTokenCount; + ImageTokenCount = imageTokenCount; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ImageTokenUsage.Serialization.cs b/src/Generated/Models/ImageTokenUsage.Serialization.cs new file mode 100644 index 000000000..a2afc166f --- /dev/null +++ b/src/Generated/Models/ImageTokenUsage.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Images +{ + public partial class ImageTokenUsage : IJsonModel + { + internal ImageTokenUsage() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ImageTokenUsage)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("input_tokens") != true) + { + writer.WritePropertyName("input_tokens"u8); + writer.WriteNumberValue(InputTokenCount); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_tokens") != true) + { + writer.WritePropertyName("output_tokens"u8); + writer.WriteNumberValue(OutputTokenCount); + } + if (_additionalBinaryDataProperties?.ContainsKey("total_tokens") != true) + { + writer.WritePropertyName("total_tokens"u8); + writer.WriteNumberValue(TotalTokenCount); + } + if (_additionalBinaryDataProperties?.ContainsKey("input_tokens_details") != true) + { + writer.WritePropertyName("input_tokens_details"u8); + writer.WriteObjectValue(InputTokenDetails, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + ImageTokenUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual ImageTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ImageTokenUsage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeImageTokenUsage(document.RootElement, options); + } + + internal static ImageTokenUsage DeserializeImageTokenUsage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int inputTokenCount = default; + int outputTokenCount = default; + int totalTokenCount = default; + ImageInputTokenUsageDetails inputTokenDetails = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("input_tokens"u8)) + { + inputTokenCount = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_tokens"u8)) + { + outputTokenCount = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("total_tokens"u8)) + { + totalTokenCount = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("input_tokens_details"u8)) + { + inputTokenDetails = ImageInputTokenUsageDetails.DeserializeImageInputTokenUsageDetails(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ImageTokenUsage(inputTokenCount, outputTokenCount, totalTokenCount, inputTokenDetails, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ImageTokenUsage)} does not support writing '{options.Format}' format."); + } + } + + ImageTokenUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual ImageTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeImageTokenUsage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ImageTokenUsage)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ImageTokenUsage.cs b/src/Generated/Models/ImageTokenUsage.cs new file mode 100644 index 000000000..78a9e846d --- /dev/null +++ b/src/Generated/Models/ImageTokenUsage.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Images +{ + public partial class ImageTokenUsage + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ImageTokenUsage(int inputTokenCount, int outputTokenCount, int totalTokenCount, ImageInputTokenUsageDetails inputTokenDetails) + { + InputTokenCount = inputTokenCount; + OutputTokenCount = outputTokenCount; + TotalTokenCount = totalTokenCount; + InputTokenDetails = inputTokenDetails; + } + + internal ImageTokenUsage(int inputTokenCount, int outputTokenCount, int totalTokenCount, ImageInputTokenUsageDetails inputTokenDetails, IDictionary additionalBinaryDataProperties) + { + InputTokenCount = inputTokenCount; + OutputTokenCount = outputTokenCount; + TotalTokenCount = totalTokenCount; + InputTokenDetails = inputTokenDetails; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ImageVariationOptions.Serialization.cs b/src/Generated/Models/ImageVariationOptions.Serialization.cs index 9be8aef7c..28cfb1b7b 100644 --- a/src/Generated/Models/ImageVariationOptions.Serialization.cs +++ b/src/Generated/Models/ImageVariationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Images { public partial class ImageVariationOptions : IJsonModel { + public ImageVariationOptions() + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -57,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("user"u8); writer.WriteStringValue(EndUserId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -80,6 +86,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ImageVariationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ImageVariationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -156,6 +163,7 @@ internal static ImageVariationOptions DeserializeImageVariationOptions(JsonEleme endUserId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ImageVariationOptions( @@ -170,13 +178,14 @@ internal static ImageVariationOptions DeserializeImageVariationOptions(JsonEleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ImageVariationOptions)} does not support writing '{options.Format}' format."); } @@ -184,6 +193,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ImageVariationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ImageVariationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -200,21 +210,5 @@ protected virtual ImageVariationOptions PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ImageVariationOptions imageVariationOptions) - { - if (imageVariationOptions == null) - { - return null; - } - return BinaryContent.Create(imageVariationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ImageVariationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeImageVariationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InputAudioClearedUpdate.Serialization.cs b/src/Generated/Models/InputAudioClearedUpdate.Serialization.cs new file mode 100644 index 000000000..0e483dee1 --- /dev/null +++ b/src/Generated/Models/InputAudioClearedUpdate.Serialization.cs @@ -0,0 +1,110 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioClearedUpdate : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioClearedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InputAudioClearedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InputAudioClearedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioClearedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputAudioClearedUpdate(document.RootElement, options); + } + + internal static InputAudioClearedUpdate DeserializeInputAudioClearedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InputAudioClearedUpdate(kind, eventId, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputAudioClearedUpdate)} does not support writing '{options.Format}' format."); + } + } + + InputAudioClearedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InputAudioClearedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputAudioClearedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputAudioClearedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputAudioClearedUpdate.cs b/src/Generated/Models/InputAudioClearedUpdate.cs new file mode 100644 index 000000000..e4da4a626 --- /dev/null +++ b/src/Generated/Models/InputAudioClearedUpdate.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class InputAudioClearedUpdate : RealtimeUpdate + { + internal InputAudioClearedUpdate() : this(RealtimeUpdateKind.InputAudioCleared, null, null) + { + } + + internal InputAudioClearedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties) : base(kind, eventId, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InputAudioCommittedUpdate.Serialization.cs b/src/Generated/Models/InputAudioCommittedUpdate.Serialization.cs new file mode 100644 index 000000000..741771f01 --- /dev/null +++ b/src/Generated/Models/InputAudioCommittedUpdate.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioCommittedUpdate : IJsonModel + { + internal InputAudioCommittedUpdate() : this(RealtimeUpdateKind.InputAudioCommitted, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioCommittedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("previous_item_id") != true) + { + writer.WritePropertyName("previous_item_id"u8); + writer.WriteStringValue(PreviousItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + } + + InputAudioCommittedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InputAudioCommittedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioCommittedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputAudioCommittedUpdate(document.RootElement, options); + } + + internal static InputAudioCommittedUpdate DeserializeInputAudioCommittedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string previousItemId = default; + string itemId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("previous_item_id"u8)) + { + previousItemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InputAudioCommittedUpdate(kind, eventId, additionalBinaryDataProperties, previousItemId, itemId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputAudioCommittedUpdate)} does not support writing '{options.Format}' format."); + } + } + + InputAudioCommittedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InputAudioCommittedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputAudioCommittedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputAudioCommittedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputAudioCommittedUpdate.cs b/src/Generated/Models/InputAudioCommittedUpdate.cs new file mode 100644 index 000000000..c56d614b3 --- /dev/null +++ b/src/Generated/Models/InputAudioCommittedUpdate.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class InputAudioCommittedUpdate : RealtimeUpdate + { + internal InputAudioCommittedUpdate(string previousItemId, string itemId) : base(RealtimeUpdateKind.InputAudioCommitted) + { + PreviousItemId = previousItemId; + ItemId = itemId; + } + + internal InputAudioCommittedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string previousItemId, string itemId) : base(kind, eventId, additionalBinaryDataProperties) + { + PreviousItemId = previousItemId; + ItemId = itemId; + } + + public string PreviousItemId { get; } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/InputAudioSpeechFinishedUpdate.Serialization.cs b/src/Generated/Models/InputAudioSpeechFinishedUpdate.Serialization.cs new file mode 100644 index 000000000..ebe03af8e --- /dev/null +++ b/src/Generated/Models/InputAudioSpeechFinishedUpdate.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioSpeechFinishedUpdate : IJsonModel + { + internal InputAudioSpeechFinishedUpdate() : this(RealtimeUpdateKind.InputSpeechStopped, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioSpeechFinishedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("audio_end_ms") != true) + { + writer.WritePropertyName("audio_end_ms"u8); + writer.WriteNumberValue(_audioEndMs); + } + } + + InputAudioSpeechFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InputAudioSpeechFinishedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioSpeechFinishedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputAudioSpeechFinishedUpdate(document.RootElement, options); + } + + internal static InputAudioSpeechFinishedUpdate DeserializeInputAudioSpeechFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int audioEndMs = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("audio_end_ms"u8)) + { + audioEndMs = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InputAudioSpeechFinishedUpdate(kind, eventId, additionalBinaryDataProperties, itemId, audioEndMs); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputAudioSpeechFinishedUpdate)} does not support writing '{options.Format}' format."); + } + } + + InputAudioSpeechFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InputAudioSpeechFinishedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputAudioSpeechFinishedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputAudioSpeechFinishedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputAudioSpeechFinishedUpdate.cs b/src/Generated/Models/InputAudioSpeechFinishedUpdate.cs new file mode 100644 index 000000000..ab437c624 --- /dev/null +++ b/src/Generated/Models/InputAudioSpeechFinishedUpdate.cs @@ -0,0 +1,26 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class InputAudioSpeechFinishedUpdate : RealtimeUpdate + { + internal InputAudioSpeechFinishedUpdate(string itemId, int audioEndMs) : base(RealtimeUpdateKind.InputSpeechStopped) + { + ItemId = itemId; + _audioEndMs = audioEndMs; + } + + internal InputAudioSpeechFinishedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string itemId, int audioEndMs) : base(kind, eventId, additionalBinaryDataProperties) + { + ItemId = itemId; + _audioEndMs = audioEndMs; + } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/InputAudioSpeechStartedUpdate.Serialization.cs b/src/Generated/Models/InputAudioSpeechStartedUpdate.Serialization.cs new file mode 100644 index 000000000..47ae7b0f9 --- /dev/null +++ b/src/Generated/Models/InputAudioSpeechStartedUpdate.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioSpeechStartedUpdate : IJsonModel + { + internal InputAudioSpeechStartedUpdate() : this(RealtimeUpdateKind.InputSpeechStarted, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioSpeechStartedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("audio_start_ms") != true) + { + writer.WritePropertyName("audio_start_ms"u8); + writer.WriteNumberValue(_audioStartMs); + } + } + + InputAudioSpeechStartedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InputAudioSpeechStartedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioSpeechStartedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputAudioSpeechStartedUpdate(document.RootElement, options); + } + + internal static InputAudioSpeechStartedUpdate DeserializeInputAudioSpeechStartedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int audioStartMs = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("audio_start_ms"u8)) + { + audioStartMs = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InputAudioSpeechStartedUpdate(kind, eventId, additionalBinaryDataProperties, itemId, audioStartMs); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputAudioSpeechStartedUpdate)} does not support writing '{options.Format}' format."); + } + } + + InputAudioSpeechStartedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InputAudioSpeechStartedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputAudioSpeechStartedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputAudioSpeechStartedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputAudioSpeechStartedUpdate.cs b/src/Generated/Models/InputAudioSpeechStartedUpdate.cs new file mode 100644 index 000000000..d66788173 --- /dev/null +++ b/src/Generated/Models/InputAudioSpeechStartedUpdate.cs @@ -0,0 +1,26 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class InputAudioSpeechStartedUpdate : RealtimeUpdate + { + internal InputAudioSpeechStartedUpdate(string itemId, int audioStartMs) : base(RealtimeUpdateKind.InputSpeechStarted) + { + ItemId = itemId; + _audioStartMs = audioStartMs; + } + + internal InputAudioSpeechStartedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string itemId, int audioStartMs) : base(kind, eventId, additionalBinaryDataProperties) + { + ItemId = itemId; + _audioStartMs = audioStartMs; + } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/InputAudioTranscriptionDeltaUpdate.Serialization.cs b/src/Generated/Models/InputAudioTranscriptionDeltaUpdate.Serialization.cs new file mode 100644 index 000000000..2393e5c30 --- /dev/null +++ b/src/Generated/Models/InputAudioTranscriptionDeltaUpdate.Serialization.cs @@ -0,0 +1,183 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioTranscriptionDeltaUpdate : IJsonModel + { + internal InputAudioTranscriptionDeltaUpdate() : this(RealtimeUpdateKind.InputTranscriptionDelta, null, null, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioTranscriptionDeltaUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (Optional.IsDefined(ContentIndex) && _additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex.Value); + } + if (Optional.IsDefined(Delta) && _additionalBinaryDataProperties?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); + writer.WriteStringValue(Delta); + } + if (Optional.IsCollectionDefined(Logprobs) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) + { + writer.WritePropertyName("logprobs"u8); + writer.WriteStartArray(); + foreach (InternalDotNetRealtimeLogProbProperties item in Logprobs) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InputAudioTranscriptionDeltaUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InputAudioTranscriptionDeltaUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioTranscriptionDeltaUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputAudioTranscriptionDeltaUpdate(document.RootElement, options); + } + + internal static InputAudioTranscriptionDeltaUpdate DeserializeInputAudioTranscriptionDeltaUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int? contentIndex = default; + string delta = default; + IList logprobs = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + contentIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("delta"u8)) + { + delta = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprobs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalDotNetRealtimeLogProbProperties.DeserializeInternalDotNetRealtimeLogProbProperties(item, options)); + } + logprobs = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InputAudioTranscriptionDeltaUpdate( + kind, + eventId, + additionalBinaryDataProperties, + itemId, + contentIndex, + delta, + logprobs ?? new ChangeTrackingList()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputAudioTranscriptionDeltaUpdate)} does not support writing '{options.Format}' format."); + } + } + + InputAudioTranscriptionDeltaUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InputAudioTranscriptionDeltaUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputAudioTranscriptionDeltaUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputAudioTranscriptionDeltaUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputAudioTranscriptionDeltaUpdate.cs b/src/Generated/Models/InputAudioTranscriptionDeltaUpdate.cs new file mode 100644 index 000000000..855902f7e --- /dev/null +++ b/src/Generated/Models/InputAudioTranscriptionDeltaUpdate.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioTranscriptionDeltaUpdate : RealtimeUpdate + { + internal InputAudioTranscriptionDeltaUpdate(string itemId) : base(RealtimeUpdateKind.InputTranscriptionDelta) + { + ItemId = itemId; + Logprobs = new ChangeTrackingList(); + } + + internal InputAudioTranscriptionDeltaUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string itemId, int? contentIndex, string delta, IList logprobs) : base(kind, eventId, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ItemId = itemId; + ContentIndex = contentIndex; + Delta = delta; + Logprobs = logprobs ?? new ChangeTrackingList(); + } + + public string ItemId { get; } + + public int? ContentIndex { get; } + + public string Delta { get; } + } +} diff --git a/src/Generated/Models/InputAudioTranscriptionFailedUpdate.Serialization.cs b/src/Generated/Models/InputAudioTranscriptionFailedUpdate.Serialization.cs new file mode 100644 index 000000000..488bcd098 --- /dev/null +++ b/src/Generated/Models/InputAudioTranscriptionFailedUpdate.Serialization.cs @@ -0,0 +1,153 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioTranscriptionFailedUpdate : IJsonModel + { + internal InputAudioTranscriptionFailedUpdate() : this(RealtimeUpdateKind.InputTranscriptionFailed, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioTranscriptionFailedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(_error, options); + } + } + + InputAudioTranscriptionFailedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InputAudioTranscriptionFailedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioTranscriptionFailedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputAudioTranscriptionFailedUpdate(document.RootElement, options); + } + + internal static InputAudioTranscriptionFailedUpdate DeserializeInputAudioTranscriptionFailedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int contentIndex = default; + InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + contentIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("error"u8)) + { + error = InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.DeserializeInternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InputAudioTranscriptionFailedUpdate( + kind, + eventId, + additionalBinaryDataProperties, + itemId, + contentIndex, + error); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputAudioTranscriptionFailedUpdate)} does not support writing '{options.Format}' format."); + } + } + + InputAudioTranscriptionFailedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InputAudioTranscriptionFailedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputAudioTranscriptionFailedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputAudioTranscriptionFailedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputAudioTranscriptionFailedUpdate.cs b/src/Generated/Models/InputAudioTranscriptionFailedUpdate.cs new file mode 100644 index 000000000..dd0048377 --- /dev/null +++ b/src/Generated/Models/InputAudioTranscriptionFailedUpdate.cs @@ -0,0 +1,30 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class InputAudioTranscriptionFailedUpdate : RealtimeUpdate + { + internal InputAudioTranscriptionFailedUpdate(string itemId, int contentIndex, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error) : base(RealtimeUpdateKind.InputTranscriptionFailed) + { + ItemId = itemId; + ContentIndex = contentIndex; + _error = error; + } + + internal InputAudioTranscriptionFailedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError error) : base(kind, eventId, additionalBinaryDataProperties) + { + ItemId = itemId; + ContentIndex = contentIndex; + _error = error; + } + + public string ItemId { get; } + + public int ContentIndex { get; } + } +} diff --git a/src/Generated/Models/InputAudioTranscriptionFinishedUpdate.Serialization.cs b/src/Generated/Models/InputAudioTranscriptionFinishedUpdate.Serialization.cs new file mode 100644 index 000000000..e144b29a8 --- /dev/null +++ b/src/Generated/Models/InputAudioTranscriptionFinishedUpdate.Serialization.cs @@ -0,0 +1,179 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioTranscriptionFinishedUpdate : IJsonModel + { + internal InputAudioTranscriptionFinishedUpdate() : this(RealtimeUpdateKind.InputTranscriptionFinished, null, null, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioTranscriptionFinishedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("transcript") != true) + { + writer.WritePropertyName("transcript"u8); + writer.WriteStringValue(Transcript); + } + if (Optional.IsCollectionDefined(Logprobs) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) + { + writer.WritePropertyName("logprobs"u8); + writer.WriteStartArray(); + foreach (InternalDotNetRealtimeLogProbProperties item in Logprobs) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InputAudioTranscriptionFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InputAudioTranscriptionFinishedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputAudioTranscriptionFinishedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputAudioTranscriptionFinishedUpdate(document.RootElement, options); + } + + internal static InputAudioTranscriptionFinishedUpdate DeserializeInputAudioTranscriptionFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int contentIndex = default; + string transcript = default; + IList logprobs = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + contentIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("transcript"u8)) + { + transcript = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprobs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalDotNetRealtimeLogProbProperties.DeserializeInternalDotNetRealtimeLogProbProperties(item, options)); + } + logprobs = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InputAudioTranscriptionFinishedUpdate( + kind, + eventId, + additionalBinaryDataProperties, + itemId, + contentIndex, + transcript, + logprobs ?? new ChangeTrackingList()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputAudioTranscriptionFinishedUpdate)} does not support writing '{options.Format}' format."); + } + } + + InputAudioTranscriptionFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InputAudioTranscriptionFinishedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputAudioTranscriptionFinishedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputAudioTranscriptionFinishedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputAudioTranscriptionFinishedUpdate.cs b/src/Generated/Models/InputAudioTranscriptionFinishedUpdate.cs new file mode 100644 index 000000000..faf0c050e --- /dev/null +++ b/src/Generated/Models/InputAudioTranscriptionFinishedUpdate.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputAudioTranscriptionFinishedUpdate : RealtimeUpdate + { + internal InputAudioTranscriptionFinishedUpdate(string itemId, int contentIndex, string transcript) : base(RealtimeUpdateKind.InputTranscriptionFinished) + { + ItemId = itemId; + ContentIndex = contentIndex; + Transcript = transcript; + Logprobs = new ChangeTrackingList(); + } + + internal InputAudioTranscriptionFinishedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, string transcript, IList logprobs) : base(kind, eventId, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ItemId = itemId; + ContentIndex = contentIndex; + Transcript = transcript; + Logprobs = logprobs ?? new ChangeTrackingList(); + } + + public string ItemId { get; } + + public int ContentIndex { get; } + + public string Transcript { get; } + } +} diff --git a/src/Generated/Models/InputNoiseReductionKind.Serialization.cs b/src/Generated/Models/InputNoiseReductionKind.Serialization.cs new file mode 100644 index 000000000..1cae020c0 --- /dev/null +++ b/src/Generated/Models/InputNoiseReductionKind.Serialization.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Realtime +{ + internal static partial class InputNoiseReductionKindExtensions + { + public static string ToSerialString(this InputNoiseReductionKind value) => value switch + { + InputNoiseReductionKind.NearField => "near_field", + InputNoiseReductionKind.FarField => "far_field", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown InputNoiseReductionKind value.") + }; + + public static InputNoiseReductionKind ToInputNoiseReductionKind(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "near_field")) + { + return InputNoiseReductionKind.NearField; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "far_field")) + { + return InputNoiseReductionKind.FarField; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown InputNoiseReductionKind value."); + } + } +} diff --git a/src/Generated/Models/InputNoiseReductionOptions.Serialization.cs b/src/Generated/Models/InputNoiseReductionOptions.Serialization.cs new file mode 100644 index 000000000..8c9512524 --- /dev/null +++ b/src/Generated/Models/InputNoiseReductionOptions.Serialization.cs @@ -0,0 +1,111 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + [PersistableModelProxy(typeof(InternalUnknownRealtimeAudioNoiseReduction))] + public partial class InputNoiseReductionOptions : IJsonModel + { + internal InputNoiseReductionOptions() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputNoiseReductionOptions)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToSerialString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InputNoiseReductionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InputNoiseReductionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputNoiseReductionOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputNoiseReductionOptions(document.RootElement, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputNoiseReductionOptions)} does not support writing '{options.Format}' format."); + } + } + + InputNoiseReductionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InputNoiseReductionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputNoiseReductionOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputNoiseReductionOptions)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputNoiseReductionOptions.cs b/src/Generated/Models/InputNoiseReductionOptions.cs new file mode 100644 index 000000000..b19329fbe --- /dev/null +++ b/src/Generated/Models/InputNoiseReductionOptions.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class InputNoiseReductionOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InputNoiseReductionOptions(InputNoiseReductionKind kind) + { + Kind = kind; + } + + internal InputNoiseReductionOptions(InputNoiseReductionKind kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InputTranscriptionModel.cs b/src/Generated/Models/InputTranscriptionModel.cs new file mode 100644 index 000000000..9bfcf2aad --- /dev/null +++ b/src/Generated/Models/InputTranscriptionModel.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + public readonly partial struct InputTranscriptionModel : IEquatable + { + private readonly string _value; + private const string Whisper1Value = "whisper-1"; + + public InputTranscriptionModel(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static InputTranscriptionModel Whisper1 { get; } = new InputTranscriptionModel(Whisper1Value); + + public static bool operator ==(InputTranscriptionModel left, InputTranscriptionModel right) => left.Equals(right); + + public static bool operator !=(InputTranscriptionModel left, InputTranscriptionModel right) => !left.Equals(right); + + public static implicit operator InputTranscriptionModel(string value) => new InputTranscriptionModel(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InputTranscriptionModel other && Equals(other); + + public bool Equals(InputTranscriptionModel 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/InputTranscriptionOptions.Serialization.cs b/src/Generated/Models/InputTranscriptionOptions.Serialization.cs new file mode 100644 index 000000000..f83aba3c5 --- /dev/null +++ b/src/Generated/Models/InputTranscriptionOptions.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class InputTranscriptionOptions : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputTranscriptionOptions)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.Value.ToString()); + } + if (Optional.IsDefined(Language) && _additionalBinaryDataProperties?.ContainsKey("language") != true) + { + writer.WritePropertyName("language"u8); + writer.WriteStringValue(Language); + } + if (Optional.IsDefined(Prompt) && _additionalBinaryDataProperties?.ContainsKey("prompt") != true) + { + writer.WritePropertyName("prompt"u8); + writer.WriteStringValue(Prompt); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InputTranscriptionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InputTranscriptionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputTranscriptionOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputTranscriptionOptions(document.RootElement, options); + } + + internal static InputTranscriptionOptions DeserializeInputTranscriptionOptions(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InputTranscriptionModel? model = default; + string language = default; + string prompt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("model"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + model = new InputTranscriptionModel(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("language"u8)) + { + language = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("prompt"u8)) + { + prompt = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InputTranscriptionOptions(model, language, prompt, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputTranscriptionOptions)} does not support writing '{options.Format}' format."); + } + } + + InputTranscriptionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InputTranscriptionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputTranscriptionOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputTranscriptionOptions)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InputTranscriptionOptions.cs b/src/Generated/Models/InputTranscriptionOptions.cs new file mode 100644 index 000000000..f73468d31 --- /dev/null +++ b/src/Generated/Models/InputTranscriptionOptions.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class InputTranscriptionOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + public InputTranscriptionOptions() + { + } + + internal InputTranscriptionOptions(InputTranscriptionModel? model, string language, string prompt, IDictionary additionalBinaryDataProperties) + { + Model = model; + Language = language; + Prompt = prompt; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public InputTranscriptionModel? Model { get; set; } + + public string Language { get; set; } + + public string Prompt { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalAddUploadPartRequest.Serialization.cs b/src/Generated/Models/InternalAddUploadPartRequest.Serialization.cs index e244636e1..e948f2dd0 100644 --- a/src/Generated/Models/InternalAddUploadPartRequest.Serialization.cs +++ b/src/Generated/Models/InternalAddUploadPartRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("data"u8); writer.WriteBase64StringValue(Data.ToArray(), "D"); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalAddUploadPartRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalAddUploadPartRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalAddUploadPartRequest DeserializeInternalAddUploadPartReq data = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAddUploadPartRequest(data, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalAddUploadPartRequest DeserializeInternalAddUploadPartReq BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalAddUploadPartRequest)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalAddUploadPartRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalAddUploadPartRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalAddUploadPartRequest PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAddUploadPartRequest internalAddUploadPartRequest) - { - if (internalAddUploadPartRequest == null) - { - return null; - } - return BinaryContent.Create(internalAddUploadPartRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAddUploadPartRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAddUploadPartRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalAnnotationFileCitation.Serialization.cs b/src/Generated/Models/InternalAnnotationFileCitation.Serialization.cs new file mode 100644 index 000000000..212653f5a --- /dev/null +++ b/src/Generated/Models/InternalAnnotationFileCitation.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalAnnotationFileCitation : IJsonModel + { + internal InternalAnnotationFileCitation() : this(ResponseMessageAnnotationKind.FileCitation, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalAnnotationFileCitation)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (_additionalBinaryDataProperties?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + } + + InternalAnnotationFileCitation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalAnnotationFileCitation)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalAnnotationFileCitation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalAnnotationFileCitation(document.RootElement, options); + } + + internal static InternalAnnotationFileCitation DeserializeInternalAnnotationFileCitation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseMessageAnnotationKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string fileId = default; + int index = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToResponseMessageAnnotationKind(); + continue; + } + if (prop.NameEquals("file_id"u8)) + { + fileId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("index"u8)) + { + index = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalAnnotationFileCitation(kind, additionalBinaryDataProperties, fileId, index); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalAnnotationFileCitation)} does not support writing '{options.Format}' format."); + } + } + + InternalAnnotationFileCitation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalAnnotationFileCitation)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalAnnotationFileCitation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalAnnotationFileCitation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalAnnotationFileCitation.cs b/src/Generated/Models/InternalAnnotationFileCitation.cs new file mode 100644 index 000000000..26d15241d --- /dev/null +++ b/src/Generated/Models/InternalAnnotationFileCitation.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalAnnotationFileCitation : ResponseMessageAnnotation + { + public InternalAnnotationFileCitation(string fileId, int index) : base(ResponseMessageAnnotationKind.FileCitation) + { + Argument.AssertNotNull(fileId, nameof(fileId)); + + FileId = fileId; + Index = index; + } + + internal InternalAnnotationFileCitation(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties, string fileId, int index) : base(kind, additionalBinaryDataProperties) + { + FileId = fileId; + Index = index; + } + + public string FileId { get; set; } + + public int Index { get; set; } + } +} diff --git a/src/Generated/Models/InternalAnnotationFilePath.Serialization.cs b/src/Generated/Models/InternalAnnotationFilePath.Serialization.cs new file mode 100644 index 000000000..cf76a2a44 --- /dev/null +++ b/src/Generated/Models/InternalAnnotationFilePath.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalAnnotationFilePath : IJsonModel + { + internal InternalAnnotationFilePath() : this(ResponseMessageAnnotationKind.FilePath, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalAnnotationFilePath)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (_additionalBinaryDataProperties?.ContainsKey("index") != true) + { + writer.WritePropertyName("index"u8); + writer.WriteNumberValue(Index); + } + } + + InternalAnnotationFilePath IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalAnnotationFilePath)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalAnnotationFilePath)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalAnnotationFilePath(document.RootElement, options); + } + + internal static InternalAnnotationFilePath DeserializeInternalAnnotationFilePath(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseMessageAnnotationKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string fileId = default; + int index = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToResponseMessageAnnotationKind(); + continue; + } + if (prop.NameEquals("file_id"u8)) + { + fileId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("index"u8)) + { + index = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalAnnotationFilePath(kind, additionalBinaryDataProperties, fileId, index); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalAnnotationFilePath)} does not support writing '{options.Format}' format."); + } + } + + InternalAnnotationFilePath IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalAnnotationFilePath)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalAnnotationFilePath(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalAnnotationFilePath)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalAnnotationFilePath.cs b/src/Generated/Models/InternalAnnotationFilePath.cs new file mode 100644 index 000000000..8fbfba0c9 --- /dev/null +++ b/src/Generated/Models/InternalAnnotationFilePath.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalAnnotationFilePath : ResponseMessageAnnotation + { + public InternalAnnotationFilePath(string fileId, int index) : base(ResponseMessageAnnotationKind.FilePath) + { + Argument.AssertNotNull(fileId, nameof(fileId)); + + FileId = fileId; + Index = index; + } + + internal InternalAnnotationFilePath(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties, string fileId, int index) : base(kind, additionalBinaryDataProperties) + { + FileId = fileId; + Index = index; + } + + public string FileId { get; set; } + + public int Index { get; set; } + } +} diff --git a/src/Generated/Models/InternalAnnotationUrlCitation.Serialization.cs b/src/Generated/Models/InternalAnnotationUrlCitation.Serialization.cs new file mode 100644 index 000000000..85a76102e --- /dev/null +++ b/src/Generated/Models/InternalAnnotationUrlCitation.Serialization.cs @@ -0,0 +1,158 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalAnnotationUrlCitation : IJsonModel + { + internal InternalAnnotationUrlCitation() : this(ResponseMessageAnnotationKind.UriCitation, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalAnnotationUrlCitation)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("url") != true) + { + writer.WritePropertyName("url"u8); + writer.WriteStringValue(Url.AbsoluteUri); + } + if (_additionalBinaryDataProperties?.ContainsKey("start_index") != true) + { + writer.WritePropertyName("start_index"u8); + writer.WriteNumberValue(StartIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("end_index") != true) + { + writer.WritePropertyName("end_index"u8); + writer.WriteNumberValue(EndIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("title") != true) + { + writer.WritePropertyName("title"u8); + writer.WriteStringValue(Title); + } + } + + InternalAnnotationUrlCitation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalAnnotationUrlCitation)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalAnnotationUrlCitation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalAnnotationUrlCitation(document.RootElement, options); + } + + internal static InternalAnnotationUrlCitation DeserializeInternalAnnotationUrlCitation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseMessageAnnotationKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + Uri url = default; + int startIndex = default; + int endIndex = default; + string title = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToResponseMessageAnnotationKind(); + continue; + } + if (prop.NameEquals("url"u8)) + { + url = new Uri(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("start_index"u8)) + { + startIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("end_index"u8)) + { + endIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("title"u8)) + { + title = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalAnnotationUrlCitation( + kind, + additionalBinaryDataProperties, + url, + startIndex, + endIndex, + title); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalAnnotationUrlCitation)} does not support writing '{options.Format}' format."); + } + } + + InternalAnnotationUrlCitation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalAnnotationUrlCitation)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalAnnotationUrlCitation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalAnnotationUrlCitation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalAnnotationUrlCitation.cs b/src/Generated/Models/InternalAnnotationUrlCitation.cs new file mode 100644 index 000000000..e4e45387f --- /dev/null +++ b/src/Generated/Models/InternalAnnotationUrlCitation.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalAnnotationUrlCitation : ResponseMessageAnnotation + { + public InternalAnnotationUrlCitation(Uri url, int startIndex, int endIndex, string title) : base(ResponseMessageAnnotationKind.UriCitation) + { + Argument.AssertNotNull(url, nameof(url)); + Argument.AssertNotNull(title, nameof(title)); + + Url = url; + StartIndex = startIndex; + EndIndex = endIndex; + Title = title; + } + + internal InternalAnnotationUrlCitation(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties, Uri url, int startIndex, int endIndex, string title) : base(kind, additionalBinaryDataProperties) + { + Url = url; + StartIndex = startIndex; + EndIndex = endIndex; + Title = title; + } + + public Uri Url { get; set; } + + public int StartIndex { get; set; } + + public int EndIndex { get; set; } + + public string Title { get; set; } + } +} diff --git a/src/Generated/Models/InternalApproximateLocation.Serialization.cs b/src/Generated/Models/InternalApproximateLocation.Serialization.cs new file mode 100644 index 000000000..b6a8db8c3 --- /dev/null +++ b/src/Generated/Models/InternalApproximateLocation.Serialization.cs @@ -0,0 +1,174 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalApproximateLocation : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalApproximateLocation)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(Country) && _additionalBinaryDataProperties?.ContainsKey("country") != true) + { + writer.WritePropertyName("country"u8); + writer.WriteStringValue(Country); + } + if (Optional.IsDefined(Region) && _additionalBinaryDataProperties?.ContainsKey("region") != true) + { + writer.WritePropertyName("region"u8); + writer.WriteStringValue(Region); + } + if (Optional.IsDefined(City) && _additionalBinaryDataProperties?.ContainsKey("city") != true) + { + writer.WritePropertyName("city"u8); + writer.WriteStringValue(City); + } + if (Optional.IsDefined(Timezone) && _additionalBinaryDataProperties?.ContainsKey("timezone") != true) + { + writer.WritePropertyName("timezone"u8); + writer.WriteStringValue(Timezone); + } + } + + InternalApproximateLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalApproximateLocation)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalApproximateLocation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalApproximateLocation(document.RootElement, options); + } + + internal static InternalApproximateLocation DeserializeInternalApproximateLocation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalWebSearchUserLocationKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string country = default; + string region = default; + string city = default; + string timezone = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalWebSearchUserLocationKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("country"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + country = null; + continue; + } + country = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("region"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + region = null; + continue; + } + region = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("city"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + city = null; + continue; + } + city = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("timezone"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + timezone = null; + continue; + } + timezone = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalApproximateLocation( + kind, + additionalBinaryDataProperties, + country, + region, + city, + timezone); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalApproximateLocation)} does not support writing '{options.Format}' format."); + } + } + + InternalApproximateLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalApproximateLocation)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalApproximateLocation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalApproximateLocation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalApproximateLocation.cs b/src/Generated/Models/InternalApproximateLocation.cs new file mode 100644 index 000000000..4438aa077 --- /dev/null +++ b/src/Generated/Models/InternalApproximateLocation.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalApproximateLocation : InternalLocation + { + public InternalApproximateLocation() : this(InternalWebSearchUserLocationKind.Approximate, null, null, null, null, null) + { + } + + internal InternalApproximateLocation(InternalWebSearchUserLocationKind kind, IDictionary additionalBinaryDataProperties, string country, string region, string city, string timezone) : base(kind, additionalBinaryDataProperties) + { + Country = country; + Region = region; + City = city; + Timezone = timezone; + } + + public string Country { get; set; } + + public string Region { get; set; } + + public string City { get; set; } + + public string Timezone { get; set; } + } +} diff --git a/src/Generated/Models/InternalAssistantObjectObject.cs b/src/Generated/Models/InternalAssistantObjectObject.cs deleted file mode 100644 index 51276ac20..000000000 --- a/src/Generated/Models/InternalAssistantObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalAssistantObjectObject : IEquatable - { - private readonly string _value; - private const string AssistantValue = "assistant"; - - public InternalAssistantObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalAssistantObjectObject Assistant { get; } = new InternalAssistantObjectObject(AssistantValue); - - public static bool operator ==(InternalAssistantObjectObject left, InternalAssistantObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalAssistantObjectObject left, InternalAssistantObjectObject right) => !left.Equals(right); - - public static implicit operator InternalAssistantObjectObject(string value) => new InternalAssistantObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalAssistantObjectObject other && Equals(other); - - public bool Equals(InternalAssistantObjectObject 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/InternalAssistantResponseFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalAssistantResponseFormatJsonObject.Serialization.cs deleted file mode 100644 index fa99ded1d..000000000 --- a/src/Generated/Models/InternalAssistantResponseFormatJsonObject.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalAssistantResponseFormatJsonObject : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatJsonObject)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalAssistantResponseFormatJsonObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalAssistantResponseFormatJsonObject)JsonModelCreateCore(ref reader, options); - - protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatJsonObject)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalAssistantResponseFormatJsonObject(document.RootElement, options); - } - - internal static InternalAssistantResponseFormatJsonObject DeserializeInternalAssistantResponseFormatJsonObject(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "json_object"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalAssistantResponseFormatJsonObject(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatJsonObject)} does not support writing '{options.Format}' format."); - } - } - - InternalAssistantResponseFormatJsonObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalAssistantResponseFormatJsonObject)PersistableModelCreateCore(data, options); - - protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalAssistantResponseFormatJsonObject(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatJsonObject)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAssistantResponseFormatJsonObject internalAssistantResponseFormatJsonObject) - { - if (internalAssistantResponseFormatJsonObject == null) - { - return null; - } - return BinaryContent.Create(internalAssistantResponseFormatJsonObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAssistantResponseFormatJsonObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAssistantResponseFormatJsonObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalAssistantResponseFormatJsonObject.cs b/src/Generated/Models/InternalAssistantResponseFormatJsonObject.cs deleted file mode 100644 index 48b864882..000000000 --- a/src/Generated/Models/InternalAssistantResponseFormatJsonObject.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Assistants -{ - internal partial class InternalAssistantResponseFormatJsonObject : AssistantResponseFormat - { - public InternalAssistantResponseFormatJsonObject() : base("json_object") - { - } - - internal InternalAssistantResponseFormatJsonObject(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.Serialization.cs deleted file mode 100644 index 7b88fb4da..000000000 --- a/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.Serialization.cs +++ /dev/null @@ -1,131 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; -using OpenAI.Internal; - -namespace OpenAI.Assistants -{ - internal partial class InternalAssistantResponseFormatJsonSchema : IJsonModel - { - internal InternalAssistantResponseFormatJsonSchema() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatJsonSchema)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("json_schema") != true) - { - writer.WritePropertyName("json_schema"u8); - writer.WriteObjectValue(JsonSchema, options); - } - } - - InternalAssistantResponseFormatJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalAssistantResponseFormatJsonSchema)JsonModelCreateCore(ref reader, options); - - protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatJsonSchema)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalAssistantResponseFormatJsonSchema(document.RootElement, options); - } - - internal static InternalAssistantResponseFormatJsonSchema DeserializeInternalAssistantResponseFormatJsonSchema(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "json_schema"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalResponseFormatJsonSchemaJsonSchema jsonSchema = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("json_schema"u8)) - { - jsonSchema = InternalResponseFormatJsonSchemaJsonSchema.DeserializeInternalResponseFormatJsonSchemaJsonSchema(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalAssistantResponseFormatJsonSchema(@type, additionalBinaryDataProperties, jsonSchema); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatJsonSchema)} does not support writing '{options.Format}' format."); - } - } - - InternalAssistantResponseFormatJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalAssistantResponseFormatJsonSchema)PersistableModelCreateCore(data, options); - - protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalAssistantResponseFormatJsonSchema(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatJsonSchema)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAssistantResponseFormatJsonSchema internalAssistantResponseFormatJsonSchema) - { - if (internalAssistantResponseFormatJsonSchema == null) - { - return null; - } - return BinaryContent.Create(internalAssistantResponseFormatJsonSchema, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAssistantResponseFormatJsonSchema(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAssistantResponseFormatJsonSchema(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.cs b/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.cs deleted file mode 100644 index abe5b17c3..000000000 --- a/src/Generated/Models/InternalAssistantResponseFormatJsonSchema.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; -using OpenAI.Internal; - -namespace OpenAI.Assistants -{ - internal partial class InternalAssistantResponseFormatJsonSchema : AssistantResponseFormat - { - public InternalAssistantResponseFormatJsonSchema(InternalResponseFormatJsonSchemaJsonSchema jsonSchema) : base("json_schema") - { - Argument.AssertNotNull(jsonSchema, nameof(jsonSchema)); - - JsonSchema = jsonSchema; - } - - internal InternalAssistantResponseFormatJsonSchema(string @type, IDictionary additionalBinaryDataProperties, InternalResponseFormatJsonSchemaJsonSchema jsonSchema) : base(@type, additionalBinaryDataProperties) - { - JsonSchema = jsonSchema; - } - - public InternalResponseFormatJsonSchemaJsonSchema JsonSchema { get; } - } -} diff --git a/src/Generated/Models/InternalAssistantResponseFormatText.Serialization.cs b/src/Generated/Models/InternalAssistantResponseFormatText.Serialization.cs deleted file mode 100644 index 691a9e688..000000000 --- a/src/Generated/Models/InternalAssistantResponseFormatText.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalAssistantResponseFormatText : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatText)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalAssistantResponseFormatText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalAssistantResponseFormatText)JsonModelCreateCore(ref reader, options); - - protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatText)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalAssistantResponseFormatText(document.RootElement, options); - } - - internal static InternalAssistantResponseFormatText DeserializeInternalAssistantResponseFormatText(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "text"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalAssistantResponseFormatText(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatText)} does not support writing '{options.Format}' format."); - } - } - - InternalAssistantResponseFormatText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalAssistantResponseFormatText)PersistableModelCreateCore(data, options); - - protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalAssistantResponseFormatText(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalAssistantResponseFormatText)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAssistantResponseFormatText internalAssistantResponseFormatText) - { - if (internalAssistantResponseFormatText == null) - { - return null; - } - return BinaryContent.Create(internalAssistantResponseFormatText, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAssistantResponseFormatText(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAssistantResponseFormatText(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalAssistantResponseFormatText.cs b/src/Generated/Models/InternalAssistantResponseFormatText.cs deleted file mode 100644 index 82330418f..000000000 --- a/src/Generated/Models/InternalAssistantResponseFormatText.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Assistants -{ - internal partial class InternalAssistantResponseFormatText : AssistantResponseFormat - { - public InternalAssistantResponseFormatText() : base("text") - { - } - - internal InternalAssistantResponseFormatText(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalAssistantSupportedModels.cs b/src/Generated/Models/InternalAssistantSupportedModels.cs index 77d90308b..861194072 100644 --- a/src/Generated/Models/InternalAssistantSupportedModels.cs +++ b/src/Generated/Models/InternalAssistantSupportedModels.cs @@ -11,6 +11,12 @@ namespace OpenAI.Assistants internal readonly partial struct InternalAssistantSupportedModels : IEquatable { private readonly string _value; + private const string Gpt41Value = "gpt-4.1"; + private const string Gpt41MiniValue = "gpt-4.1-mini"; + private const string Gpt41NanoValue = "gpt-4.1-nano"; + private const string Gpt4120250414Value = "gpt-4.1-2025-04-14"; + private const string Gpt41Mini20250414Value = "gpt-4.1-mini-2025-04-14"; + private const string Gpt41Nano20250414Value = "gpt-4.1-nano-2025-04-14"; private const string O3MiniValue = "o3-mini"; private const string O3Mini20250131Value = "o3-mini-2025-01-31"; private const string O1Value = "o1"; @@ -49,65 +55,77 @@ public InternalAssistantSupportedModels(string value) _value = value; } - public static InternalAssistantSupportedModels O3Mini { get; } = new InternalAssistantSupportedModels(O3MiniValue); + internal static InternalAssistantSupportedModels Gpt41 { get; } = new InternalAssistantSupportedModels(Gpt41Value); - public static InternalAssistantSupportedModels O3Mini20250131 { get; } = new InternalAssistantSupportedModels(O3Mini20250131Value); + internal static InternalAssistantSupportedModels Gpt41Mini { get; } = new InternalAssistantSupportedModels(Gpt41MiniValue); - public static InternalAssistantSupportedModels O1 { get; } = new InternalAssistantSupportedModels(O1Value); + internal static InternalAssistantSupportedModels Gpt41Nano { get; } = new InternalAssistantSupportedModels(Gpt41NanoValue); - public static InternalAssistantSupportedModels O120241217 { get; } = new InternalAssistantSupportedModels(O120241217Value); + internal static InternalAssistantSupportedModels Gpt4120250414 { get; } = new InternalAssistantSupportedModels(Gpt4120250414Value); - public static InternalAssistantSupportedModels Gpt4o { get; } = new InternalAssistantSupportedModels(Gpt4oValue); + internal static InternalAssistantSupportedModels Gpt41Mini20250414 { get; } = new InternalAssistantSupportedModels(Gpt41Mini20250414Value); - public static InternalAssistantSupportedModels Gpt4o20241120 { get; } = new InternalAssistantSupportedModels(Gpt4o20241120Value); + internal static InternalAssistantSupportedModels Gpt41Nano20250414 { get; } = new InternalAssistantSupportedModels(Gpt41Nano20250414Value); - public static InternalAssistantSupportedModels Gpt4o20240806 { get; } = new InternalAssistantSupportedModels(Gpt4o20240806Value); + internal static InternalAssistantSupportedModels O3Mini { get; } = new InternalAssistantSupportedModels(O3MiniValue); - public static InternalAssistantSupportedModels Gpt4o20240513 { get; } = new InternalAssistantSupportedModels(Gpt4o20240513Value); + internal static InternalAssistantSupportedModels O3Mini20250131 { get; } = new InternalAssistantSupportedModels(O3Mini20250131Value); - public static InternalAssistantSupportedModels Gpt4oMini { get; } = new InternalAssistantSupportedModels(Gpt4oMiniValue); + internal static InternalAssistantSupportedModels O1 { get; } = new InternalAssistantSupportedModels(O1Value); - public static InternalAssistantSupportedModels Gpt4oMini20240718 { get; } = new InternalAssistantSupportedModels(Gpt4oMini20240718Value); + internal static InternalAssistantSupportedModels O120241217 { get; } = new InternalAssistantSupportedModels(O120241217Value); - public static InternalAssistantSupportedModels Gpt45Preview { get; } = new InternalAssistantSupportedModels(Gpt45PreviewValue); + internal static InternalAssistantSupportedModels Gpt4o { get; } = new InternalAssistantSupportedModels(Gpt4oValue); - public static InternalAssistantSupportedModels Gpt45Preview20250227 { get; } = new InternalAssistantSupportedModels(Gpt45Preview20250227Value); + internal static InternalAssistantSupportedModels Gpt4o20241120 { get; } = new InternalAssistantSupportedModels(Gpt4o20241120Value); - public static InternalAssistantSupportedModels Gpt4Turbo { get; } = new InternalAssistantSupportedModels(Gpt4TurboValue); + internal static InternalAssistantSupportedModels Gpt4o20240806 { get; } = new InternalAssistantSupportedModels(Gpt4o20240806Value); - public static InternalAssistantSupportedModels Gpt4Turbo20240409 { get; } = new InternalAssistantSupportedModels(Gpt4Turbo20240409Value); + internal static InternalAssistantSupportedModels Gpt4o20240513 { get; } = new InternalAssistantSupportedModels(Gpt4o20240513Value); - public static InternalAssistantSupportedModels Gpt40125Preview { get; } = new InternalAssistantSupportedModels(Gpt40125PreviewValue); + internal static InternalAssistantSupportedModels Gpt4oMini { get; } = new InternalAssistantSupportedModels(Gpt4oMiniValue); - public static InternalAssistantSupportedModels Gpt4TurboPreview { get; } = new InternalAssistantSupportedModels(Gpt4TurboPreviewValue); + internal static InternalAssistantSupportedModels Gpt4oMini20240718 { get; } = new InternalAssistantSupportedModels(Gpt4oMini20240718Value); - public static InternalAssistantSupportedModels Gpt41106Preview { get; } = new InternalAssistantSupportedModels(Gpt41106PreviewValue); + internal static InternalAssistantSupportedModels Gpt45Preview { get; } = new InternalAssistantSupportedModels(Gpt45PreviewValue); - public static InternalAssistantSupportedModels Gpt4VisionPreview { get; } = new InternalAssistantSupportedModels(Gpt4VisionPreviewValue); + internal static InternalAssistantSupportedModels Gpt45Preview20250227 { get; } = new InternalAssistantSupportedModels(Gpt45Preview20250227Value); - public static InternalAssistantSupportedModels Gpt4 { get; } = new InternalAssistantSupportedModels(Gpt4Value); + internal static InternalAssistantSupportedModels Gpt4Turbo { get; } = new InternalAssistantSupportedModels(Gpt4TurboValue); - public static InternalAssistantSupportedModels Gpt40314 { get; } = new InternalAssistantSupportedModels(Gpt40314Value); + internal static InternalAssistantSupportedModels Gpt4Turbo20240409 { get; } = new InternalAssistantSupportedModels(Gpt4Turbo20240409Value); - public static InternalAssistantSupportedModels Gpt40613 { get; } = new InternalAssistantSupportedModels(Gpt40613Value); + internal static InternalAssistantSupportedModels Gpt40125Preview { get; } = new InternalAssistantSupportedModels(Gpt40125PreviewValue); - public static InternalAssistantSupportedModels Gpt432k { get; } = new InternalAssistantSupportedModels(Gpt432kValue); + internal static InternalAssistantSupportedModels Gpt4TurboPreview { get; } = new InternalAssistantSupportedModels(Gpt4TurboPreviewValue); - public static InternalAssistantSupportedModels Gpt432k0314 { get; } = new InternalAssistantSupportedModels(Gpt432k0314Value); + internal static InternalAssistantSupportedModels Gpt41106Preview { get; } = new InternalAssistantSupportedModels(Gpt41106PreviewValue); - public static InternalAssistantSupportedModels Gpt432k0613 { get; } = new InternalAssistantSupportedModels(Gpt432k0613Value); + internal static InternalAssistantSupportedModels Gpt4VisionPreview { get; } = new InternalAssistantSupportedModels(Gpt4VisionPreviewValue); - public static InternalAssistantSupportedModels Gpt35Turbo { get; } = new InternalAssistantSupportedModels(Gpt35TurboValue); + internal static InternalAssistantSupportedModels Gpt4 { get; } = new InternalAssistantSupportedModels(Gpt4Value); - public static InternalAssistantSupportedModels Gpt35Turbo16k { get; } = new InternalAssistantSupportedModels(Gpt35Turbo16kValue); + internal static InternalAssistantSupportedModels Gpt40314 { get; } = new InternalAssistantSupportedModels(Gpt40314Value); - public static InternalAssistantSupportedModels Gpt35Turbo0613 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo0613Value); + internal static InternalAssistantSupportedModels Gpt40613 { get; } = new InternalAssistantSupportedModels(Gpt40613Value); - public static InternalAssistantSupportedModels Gpt35Turbo1106 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo1106Value); + internal static InternalAssistantSupportedModels Gpt432k { get; } = new InternalAssistantSupportedModels(Gpt432kValue); - public static InternalAssistantSupportedModels Gpt35Turbo0125 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo0125Value); + internal static InternalAssistantSupportedModels Gpt432k0314 { get; } = new InternalAssistantSupportedModels(Gpt432k0314Value); - public static InternalAssistantSupportedModels Gpt35Turbo16k0613 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo16k0613Value); + internal static InternalAssistantSupportedModels Gpt432k0613 { get; } = new InternalAssistantSupportedModels(Gpt432k0613Value); + + internal static InternalAssistantSupportedModels Gpt35Turbo { get; } = new InternalAssistantSupportedModels(Gpt35TurboValue); + + internal static InternalAssistantSupportedModels Gpt35Turbo16k { get; } = new InternalAssistantSupportedModels(Gpt35Turbo16kValue); + + internal static InternalAssistantSupportedModels Gpt35Turbo0613 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo0613Value); + + internal static InternalAssistantSupportedModels Gpt35Turbo1106 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo1106Value); + + internal static InternalAssistantSupportedModels Gpt35Turbo0125 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo0125Value); + + internal static InternalAssistantSupportedModels Gpt35Turbo16k0613 { get; } = new InternalAssistantSupportedModels(Gpt35Turbo16k0613Value); public static bool operator ==(InternalAssistantSupportedModels left, InternalAssistantSupportedModels right) => left.Equals(right); diff --git a/src/Generated/Models/InternalAssistantToolDefinitionType.cs b/src/Generated/Models/InternalAssistantToolDefinitionType.cs new file mode 100644 index 000000000..e3b92b801 --- /dev/null +++ b/src/Generated/Models/InternalAssistantToolDefinitionType.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal readonly partial struct InternalAssistantToolDefinitionType : IEquatable + { + private readonly string _value; + private const string CodeInterpreterValue = "code_interpreter"; + private const string FileSearchValue = "file_search"; + private const string FunctionValue = "function"; + + public InternalAssistantToolDefinitionType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalAssistantToolDefinitionType CodeInterpreter { get; } = new InternalAssistantToolDefinitionType(CodeInterpreterValue); + + internal static InternalAssistantToolDefinitionType FileSearch { get; } = new InternalAssistantToolDefinitionType(FileSearchValue); + + internal static InternalAssistantToolDefinitionType Function { get; } = new InternalAssistantToolDefinitionType(FunctionValue); + + public static bool operator ==(InternalAssistantToolDefinitionType left, InternalAssistantToolDefinitionType right) => left.Equals(right); + + public static bool operator !=(InternalAssistantToolDefinitionType left, InternalAssistantToolDefinitionType right) => !left.Equals(right); + + public static implicit operator InternalAssistantToolDefinitionType(string value) => new InternalAssistantToolDefinitionType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalAssistantToolDefinitionType other && Equals(other); + + public bool Equals(InternalAssistantToolDefinitionType 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/InternalAssistantToolsFileSearchFileSearch.Serialization.cs b/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs index 0dbb0a164..9ace2516a 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchFileSearch.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("max_num_results"u8); writer.WriteNumberValue(InternalMaxNumResults.Value); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalAssistantToolsFileSearchFileSearch IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalAssistantToolsFileSearchFileSearch JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static InternalAssistantToolsFileSearchFileSearch DeserializeInternalAs internalMaxNumResults = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAssistantToolsFileSearchFileSearch(rankingOptions, internalMaxNumResults, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static InternalAssistantToolsFileSearchFileSearch DeserializeInternalAs BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalAssistantToolsFileSearchFileSearch)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalAssistantToolsFileSearchFileSearch IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalAssistantToolsFileSearchFileSearch PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalAssistantToolsFileSearchFileSearch PersistableModelCre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAssistantToolsFileSearchFileSearch internalAssistantToolsFileSearchFileSearch) - { - if (internalAssistantToolsFileSearchFileSearch == null) - { - return null; - } - return BinaryContent.Create(internalAssistantToolsFileSearchFileSearch, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAssistantToolsFileSearchFileSearch(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAssistantToolsFileSearchFileSearch(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs index adebde7f6..0c5e01d29 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -30,8 +31,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalAssistantToolsFileSearchTypeOnly IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalAssistantToolsFileSearchTypeOnly JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -72,29 +75,31 @@ internal static InternalAssistantToolsFileSearchTypeOnly DeserializeInternalAssi { return null; } - InternalAssistantToolsFileSearchTypeOnlyType @type = default; + string kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalAssistantToolsFileSearchTypeOnlyType(prop.Value.GetString()); + kind = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalAssistantToolsFileSearchTypeOnly(@type, additionalBinaryDataProperties); + return new InternalAssistantToolsFileSearchTypeOnly(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalAssistantToolsFileSearchTypeOnly)} does not support writing '{options.Format}' format."); } @@ -102,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalAssistantToolsFileSearchTypeOnly IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalAssistantToolsFileSearchTypeOnly PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,21 +124,5 @@ protected virtual InternalAssistantToolsFileSearchTypeOnly PersistableModelCreat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAssistantToolsFileSearchTypeOnly internalAssistantToolsFileSearchTypeOnly) - { - if (internalAssistantToolsFileSearchTypeOnly == null) - { - return null; - } - return BinaryContent.Create(internalAssistantToolsFileSearchTypeOnly, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAssistantToolsFileSearchTypeOnly(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAssistantToolsFileSearchTypeOnly(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.cs b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.cs index 1d969ec0b..24789ce14 100644 --- a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.cs +++ b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnly.cs @@ -15,13 +15,13 @@ public InternalAssistantToolsFileSearchTypeOnly() { } - internal InternalAssistantToolsFileSearchTypeOnly(InternalAssistantToolsFileSearchTypeOnlyType @type, IDictionary additionalBinaryDataProperties) + internal InternalAssistantToolsFileSearchTypeOnly(string kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalAssistantToolsFileSearchTypeOnlyType Type { get; } = "file_search"; + public string Kind { get; } = "file_search"; internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnlyType.cs b/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnlyType.cs deleted file mode 100644 index 3c6f5cfc2..000000000 --- a/src/Generated/Models/InternalAssistantToolsFileSearchTypeOnlyType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalAssistantToolsFileSearchTypeOnlyType : IEquatable - { - private readonly string _value; - private const string FileSearchValue = "file_search"; - - public InternalAssistantToolsFileSearchTypeOnlyType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalAssistantToolsFileSearchTypeOnlyType FileSearch { get; } = new InternalAssistantToolsFileSearchTypeOnlyType(FileSearchValue); - - public static bool operator ==(InternalAssistantToolsFileSearchTypeOnlyType left, InternalAssistantToolsFileSearchTypeOnlyType right) => left.Equals(right); - - public static bool operator !=(InternalAssistantToolsFileSearchTypeOnlyType left, InternalAssistantToolsFileSearchTypeOnlyType right) => !left.Equals(right); - - public static implicit operator InternalAssistantToolsFileSearchTypeOnlyType(string value) => new InternalAssistantToolsFileSearchTypeOnlyType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalAssistantToolsFileSearchTypeOnlyType other && Equals(other); - - public bool Equals(InternalAssistantToolsFileSearchTypeOnlyType 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/InternalAssistantsNamedToolChoiceFunction.Serialization.cs b/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs index 4c4b7495a..9308b242c 100644 --- a/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs +++ b/src/Generated/Models/InternalAssistantsNamedToolChoiceFunction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalAssistantsNamedToolChoiceFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalAssistantsNamedToolChoiceFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalAssistantsNamedToolChoiceFunction DeserializeInternalAss name = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalAssistantsNamedToolChoiceFunction(name, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalAssistantsNamedToolChoiceFunction DeserializeInternalAss BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalAssistantsNamedToolChoiceFunction)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalAssistantsNamedToolChoiceFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalAssistantsNamedToolChoiceFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalAssistantsNamedToolChoiceFunction PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAssistantsNamedToolChoiceFunction internalAssistantsNamedToolChoiceFunction) - { - if (internalAssistantsNamedToolChoiceFunction == null) - { - return null; - } - return BinaryContent.Create(internalAssistantsNamedToolChoiceFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAssistantsNamedToolChoiceFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAssistantsNamedToolChoiceFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalAssistantsNamedToolChoiceType.cs b/src/Generated/Models/InternalAssistantsNamedToolChoiceType.cs index c8eec5f29..0ef9c9c7d 100644 --- a/src/Generated/Models/InternalAssistantsNamedToolChoiceType.cs +++ b/src/Generated/Models/InternalAssistantsNamedToolChoiceType.cs @@ -22,11 +22,11 @@ public InternalAssistantsNamedToolChoiceType(string value) _value = value; } - public static InternalAssistantsNamedToolChoiceType Function { get; } = new InternalAssistantsNamedToolChoiceType(FunctionValue); + internal static InternalAssistantsNamedToolChoiceType Function { get; } = new InternalAssistantsNamedToolChoiceType(FunctionValue); - public static InternalAssistantsNamedToolChoiceType CodeInterpreter { get; } = new InternalAssistantsNamedToolChoiceType(CodeInterpreterValue); + internal static InternalAssistantsNamedToolChoiceType CodeInterpreter { get; } = new InternalAssistantsNamedToolChoiceType(CodeInterpreterValue); - public static InternalAssistantsNamedToolChoiceType FileSearch { get; } = new InternalAssistantsNamedToolChoiceType(FileSearchValue); + internal static InternalAssistantsNamedToolChoiceType FileSearch { get; } = new InternalAssistantsNamedToolChoiceType(FileSearchValue); public static bool operator ==(InternalAssistantsNamedToolChoiceType left, InternalAssistantsNamedToolChoiceType right) => left.Equals(right); diff --git a/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs b/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs deleted file mode 100644 index 6804f8839..000000000 --- a/src/Generated/Models/InternalAutoChunkingStrategy.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal partial class InternalAutoChunkingStrategy : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalAutoChunkingStrategy)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalAutoChunkingStrategy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalAutoChunkingStrategy)JsonModelCreateCore(ref reader, options); - - protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalAutoChunkingStrategy)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalAutoChunkingStrategy(document.RootElement, options); - } - - internal static InternalAutoChunkingStrategy DeserializeInternalAutoChunkingStrategy(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "auto"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalAutoChunkingStrategy(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalAutoChunkingStrategy)} does not support writing '{options.Format}' format."); - } - } - - InternalAutoChunkingStrategy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalAutoChunkingStrategy)PersistableModelCreateCore(data, options); - - protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalAutoChunkingStrategy(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalAutoChunkingStrategy)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAutoChunkingStrategy internalAutoChunkingStrategy) - { - if (internalAutoChunkingStrategy == null) - { - return null; - } - return BinaryContent.Create(internalAutoChunkingStrategy, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAutoChunkingStrategy(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAutoChunkingStrategy(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalAutoChunkingStrategy.cs b/src/Generated/Models/InternalAutoChunkingStrategy.cs deleted file mode 100644 index 0ff708766..000000000 --- a/src/Generated/Models/InternalAutoChunkingStrategy.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.VectorStores -{ - internal partial class InternalAutoChunkingStrategy : FileChunkingStrategy - { - public InternalAutoChunkingStrategy() : base("auto") - { - } - - internal InternalAutoChunkingStrategy(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs index c0f13df24..3291913a7 100644 --- a/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs +++ b/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,7 +33,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalAutoChunkingStrategyRequestParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalAutoChunkingStrategyRequestParam)JsonModelCreateCore(ref reader, options); - protected override InternalFileChunkingStrategyRequestParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyRequestParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -49,29 +51,31 @@ internal static InternalAutoChunkingStrategyRequestParam DeserializeInternalAuto { return null; } - string @type = "auto"; + InternalChunkingStrategyRequestParamType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalChunkingStrategyRequestParamType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalAutoChunkingStrategyRequestParam(@type, additionalBinaryDataProperties); + return new InternalAutoChunkingStrategyRequestParam(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalAutoChunkingStrategyRequestParam)} does not support writing '{options.Format}' format."); } @@ -79,7 +83,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalAutoChunkingStrategyRequestParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalAutoChunkingStrategyRequestParam)PersistableModelCreateCore(data, options); - protected override InternalFileChunkingStrategyRequestParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyRequestParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -95,21 +100,5 @@ protected override InternalFileChunkingStrategyRequestParam PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalAutoChunkingStrategyRequestParam internalAutoChunkingStrategyRequestParam) - { - if (internalAutoChunkingStrategyRequestParam == null) - { - return null; - } - return BinaryContent.Create(internalAutoChunkingStrategyRequestParam, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalAutoChunkingStrategyRequestParam(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalAutoChunkingStrategyRequestParam(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.cs b/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.cs index 9fd245b0c..c917dc10b 100644 --- a/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.cs +++ b/src/Generated/Models/InternalAutoChunkingStrategyRequestParam.cs @@ -7,13 +7,13 @@ namespace OpenAI.VectorStores { - internal partial class InternalAutoChunkingStrategyRequestParam : InternalFileChunkingStrategyRequestParam + internal partial class InternalAutoChunkingStrategyRequestParam : InternalChunkingStrategyRequestParam { - public InternalAutoChunkingStrategyRequestParam() : base("auto") + public InternalAutoChunkingStrategyRequestParam() : this(InternalChunkingStrategyRequestParamType.Auto, null) { } - internal InternalAutoChunkingStrategyRequestParam(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) + internal InternalAutoChunkingStrategyRequestParam(InternalChunkingStrategyRequestParamType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalBatchCompletionTimeframe.cs b/src/Generated/Models/InternalBatchCompletionTimeframe.cs deleted file mode 100644 index b3a3eb0cd..000000000 --- a/src/Generated/Models/InternalBatchCompletionTimeframe.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Batch -{ - internal readonly partial struct InternalBatchCompletionTimeframe : IEquatable - { - private readonly string _value; - private const string _24hValue = "24h"; - - public InternalBatchCompletionTimeframe(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalBatchCompletionTimeframe _24h { get; } = new InternalBatchCompletionTimeframe(_24hValue); - - public static bool operator ==(InternalBatchCompletionTimeframe left, InternalBatchCompletionTimeframe right) => left.Equals(right); - - public static bool operator !=(InternalBatchCompletionTimeframe left, InternalBatchCompletionTimeframe right) => !left.Equals(right); - - public static implicit operator InternalBatchCompletionTimeframe(string value) => new InternalBatchCompletionTimeframe(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalBatchCompletionTimeframe other && Equals(other); - - public bool Equals(InternalBatchCompletionTimeframe 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/InternalBatchError.Serialization.cs b/src/Generated/Models/InternalBatchError.Serialization.cs index 0940dccad..cd40839de 100644 --- a/src/Generated/Models/InternalBatchError.Serialization.cs +++ b/src/Generated/Models/InternalBatchError.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -47,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("line"u8); writer.WriteNumberValue(Line.Value); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -70,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalBatchError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalBatchError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -124,6 +127,7 @@ internal static InternalBatchError DeserializeInternalBatchError(JsonElement ele line = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchError(code, message, @param, line, additionalBinaryDataProperties); @@ -131,13 +135,14 @@ internal static InternalBatchError DeserializeInternalBatchError(JsonElement ele BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalBatchError)} does not support writing '{options.Format}' format."); } @@ -145,6 +150,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalBatchError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalBatchError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -161,21 +167,5 @@ protected virtual InternalBatchError PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalBatchError internalBatchError) - { - if (internalBatchError == null) - { - return null; - } - return BinaryContent.Create(internalBatchError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalBatchError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalBatchError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalBatchErrors.Serialization.cs b/src/Generated/Models/InternalBatchErrors.Serialization.cs index 9c03f2263..0c900f91f 100644 --- a/src/Generated/Models/InternalBatchErrors.Serialization.cs +++ b/src/Generated/Models/InternalBatchErrors.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -30,7 +31,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(Object) && _additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.Value.ToString()); + writer.WriteStringValue(Object); } if (Optional.IsCollectionDefined(Data) && _additionalBinaryDataProperties?.ContainsKey("data") != true) { @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalBatchErrors IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalBatchErrors JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,18 +85,14 @@ internal static InternalBatchErrors DeserializeInternalBatchErrors(JsonElement e { return null; } - InternalBatchErrorsObject? @object = default; + string @object = default; IList data = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("object"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - @object = new InternalBatchErrorsObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("data"u8)) @@ -110,6 +109,7 @@ internal static InternalBatchErrors DeserializeInternalBatchErrors(JsonElement e data = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchErrors(@object, data ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -117,13 +117,14 @@ internal static InternalBatchErrors DeserializeInternalBatchErrors(JsonElement e BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalBatchErrors)} does not support writing '{options.Format}' format."); } @@ -131,6 +132,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalBatchErrors IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalBatchErrors PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -147,21 +149,5 @@ protected virtual InternalBatchErrors PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalBatchErrors internalBatchErrors) - { - if (internalBatchErrors == null) - { - return null; - } - return BinaryContent.Create(internalBatchErrors, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalBatchErrors(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalBatchErrors(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalBatchErrors.cs b/src/Generated/Models/InternalBatchErrors.cs index 49098797b..3c0f83526 100644 --- a/src/Generated/Models/InternalBatchErrors.cs +++ b/src/Generated/Models/InternalBatchErrors.cs @@ -12,21 +12,21 @@ internal partial class InternalBatchErrors { private protected IDictionary _additionalBinaryDataProperties; - internal InternalBatchErrors() + internal InternalBatchErrors() : this(null, null, null) { - Data = new ChangeTrackingList(); } - internal InternalBatchErrors(InternalBatchErrorsObject? @object, IList data, IDictionary additionalBinaryDataProperties) + internal InternalBatchErrors(string @object, IList data, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Object = @object; - Data = data; + Data = data ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalBatchErrorsObject? Object { get; } + public string Object { get; } - public IList Data { get; } + internal IList Data { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalBatchErrorsObject.cs b/src/Generated/Models/InternalBatchErrorsObject.cs deleted file mode 100644 index ee716ad76..000000000 --- a/src/Generated/Models/InternalBatchErrorsObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Batch -{ - internal readonly partial struct InternalBatchErrorsObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalBatchErrorsObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalBatchErrorsObject List { get; } = new InternalBatchErrorsObject(ListValue); - - public static bool operator ==(InternalBatchErrorsObject left, InternalBatchErrorsObject right) => left.Equals(right); - - public static bool operator !=(InternalBatchErrorsObject left, InternalBatchErrorsObject right) => !left.Equals(right); - - public static implicit operator InternalBatchErrorsObject(string value) => new InternalBatchErrorsObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalBatchErrorsObject other && Equals(other); - - public bool Equals(InternalBatchErrorsObject 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/InternalBatchJob.Serialization.cs b/src/Generated/Models/InternalBatchJob.Serialization.cs index cc9e8cb13..5ece5d44f 100644 --- a/src/Generated/Models/InternalBatchJob.Serialization.cs +++ b/src/Generated/Models/InternalBatchJob.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Batch { internal partial class InternalBatchJob : IJsonModel { - internal InternalBatchJob() + internal InternalBatchJob() : this(null, null, null, null, null, null, default, null, null, default, default, default, default, default, default, default, default, default, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -39,7 +40,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("endpoint") != true) { @@ -149,6 +150,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("metadata"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -172,6 +174,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalBatchJob IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalBatchJob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -190,7 +193,7 @@ internal static InternalBatchJob DeserializeInternalBatchJob(JsonElement element return null; } string id = default; - InternalBatchObject @object = default; + string @object = default; string endpoint = default; InternalBatchErrors errors = default; string inputFileId = default; @@ -219,7 +222,7 @@ internal static InternalBatchJob DeserializeInternalBatchJob(JsonElement element } if (prop.NameEquals("object"u8)) { - @object = new InternalBatchObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("endpoint"u8)) @@ -369,6 +372,7 @@ internal static InternalBatchJob DeserializeInternalBatchJob(JsonElement element metadata = dictionary; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchJob( @@ -397,13 +401,14 @@ internal static InternalBatchJob DeserializeInternalBatchJob(JsonElement element BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalBatchJob)} does not support writing '{options.Format}' format."); } @@ -411,6 +416,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalBatchJob IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalBatchJob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -427,21 +433,5 @@ protected virtual InternalBatchJob PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalBatchJob internalBatchJob) - { - if (internalBatchJob == null) - { - return null; - } - return BinaryContent.Create(internalBatchJob, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalBatchJob(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalBatchJob(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalBatchJob.cs b/src/Generated/Models/InternalBatchJob.cs index fcffc3b52..8a827b463 100644 --- a/src/Generated/Models/InternalBatchJob.cs +++ b/src/Generated/Models/InternalBatchJob.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Batch { @@ -13,17 +14,19 @@ internal partial class InternalBatchJob internal InternalBatchJob(string id, string endpoint, string inputFileId, string completionWindow, InternalBatchStatus status, DateTimeOffset createdAt, IDictionary metadata) { + // Plugin customization: ensure initialization of collections Id = id; Endpoint = endpoint; InputFileId = inputFileId; CompletionWindow = completionWindow; Status = status; CreatedAt = createdAt; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); } - internal InternalBatchJob(string id, InternalBatchObject @object, string endpoint, InternalBatchErrors errors, string inputFileId, string completionWindow, InternalBatchStatus status, string outputFileId, string errorFileId, DateTimeOffset createdAt, DateTimeOffset? inProgressAt, DateTimeOffset? expiresAt, DateTimeOffset? finalizingAt, DateTimeOffset? completedAt, DateTimeOffset? failedAt, DateTimeOffset? expiredAt, DateTimeOffset? cancellingAt, DateTimeOffset? cancelledAt, InternalBatchRequestCounts requestCounts, IDictionary metadata, IDictionary additionalBinaryDataProperties) + internal InternalBatchJob(string id, string @object, string endpoint, InternalBatchErrors errors, string inputFileId, string completionWindow, InternalBatchStatus status, string outputFileId, string errorFileId, DateTimeOffset createdAt, DateTimeOffset? inProgressAt, DateTimeOffset? expiresAt, DateTimeOffset? finalizingAt, DateTimeOffset? completedAt, DateTimeOffset? failedAt, DateTimeOffset? expiredAt, DateTimeOffset? cancellingAt, DateTimeOffset? cancelledAt, InternalBatchRequestCounts requestCounts, IDictionary metadata, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; Object = @object; Endpoint = endpoint; @@ -43,23 +46,23 @@ internal InternalBatchJob(string id, InternalBatchObject @object, string endpoin CancellingAt = cancellingAt; CancelledAt = cancelledAt; RequestCounts = requestCounts; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } public string Id { get; } - public InternalBatchObject Object { get; } = "batch"; + public string Object { get; } = "batch"; public string Endpoint { get; } - public InternalBatchErrors Errors { get; } + internal InternalBatchErrors Errors { get; } public string InputFileId { get; } public string CompletionWindow { get; } - public InternalBatchStatus Status { get; } + internal InternalBatchStatus Status { get; } public string OutputFileId { get; } @@ -83,7 +86,7 @@ internal InternalBatchJob(string id, InternalBatchObject @object, string endpoin public DateTimeOffset? CancelledAt { get; } - public InternalBatchRequestCounts RequestCounts { get; } + internal InternalBatchRequestCounts RequestCounts { get; } public IDictionary Metadata { get; } diff --git a/src/Generated/Models/InternalBatchObject.cs b/src/Generated/Models/InternalBatchObject.cs deleted file mode 100644 index c1d37dbda..000000000 --- a/src/Generated/Models/InternalBatchObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Batch -{ - internal readonly partial struct InternalBatchObject : IEquatable - { - private readonly string _value; - private const string BatchValue = "batch"; - - public InternalBatchObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalBatchObject Batch { get; } = new InternalBatchObject(BatchValue); - - public static bool operator ==(InternalBatchObject left, InternalBatchObject right) => left.Equals(right); - - public static bool operator !=(InternalBatchObject left, InternalBatchObject right) => !left.Equals(right); - - public static implicit operator InternalBatchObject(string value) => new InternalBatchObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalBatchObject other && Equals(other); - - public bool Equals(InternalBatchObject 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/InternalBatchRequestCounts.Serialization.cs b/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs index 61e6b74c4..87c0d3398 100644 --- a/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestCounts.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("failed"u8); writer.WriteNumberValue(Failed); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalBatchRequestCounts IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestCounts JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalBatchRequestCounts DeserializeInternalBatchRequestCounts failed = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestCounts(total, completed, failed, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalBatchRequestCounts DeserializeInternalBatchRequestCounts BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalBatchRequestCounts)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalBatchRequestCounts IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestCounts PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalBatchRequestCounts PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalBatchRequestCounts internalBatchRequestCounts) - { - if (internalBatchRequestCounts == null) - { - return null; - } - return BinaryContent.Create(internalBatchRequestCounts, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalBatchRequestCounts(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalBatchRequestCounts(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalBatchRequestInput.Serialization.cs b/src/Generated/Models/InternalBatchRequestInput.Serialization.cs index 356543095..0916d6289 100644 --- a/src/Generated/Models/InternalBatchRequestInput.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestInput.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,13 +36,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(Method) && _additionalBinaryDataProperties?.ContainsKey("method") != true) { writer.WritePropertyName("method"u8); - writer.WriteStringValue(Method.Value.ToString()); + writer.WriteStringValue(Method); } if (Optional.IsDefined(Url) && _additionalBinaryDataProperties?.ContainsKey("url") != true) { writer.WritePropertyName("url"u8); writer.WriteStringValue(Url.AbsoluteUri); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalBatchRequestInput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestInput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -83,7 +86,7 @@ internal static InternalBatchRequestInput DeserializeInternalBatchRequestInput(J return null; } string customId = default; - InternalBatchRequestInputMethod? @method = default; + string @method = default; Uri url = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -95,11 +98,7 @@ internal static InternalBatchRequestInput DeserializeInternalBatchRequestInput(J } if (prop.NameEquals("method"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - @method = new InternalBatchRequestInputMethod(prop.Value.GetString()); + @method = prop.Value.GetString(); continue; } if (prop.NameEquals("url"u8)) @@ -111,6 +110,7 @@ internal static InternalBatchRequestInput DeserializeInternalBatchRequestInput(J url = new Uri(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestInput(customId, @method, url, additionalBinaryDataProperties); @@ -118,13 +118,14 @@ internal static InternalBatchRequestInput DeserializeInternalBatchRequestInput(J BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalBatchRequestInput)} does not support writing '{options.Format}' format."); } @@ -132,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalBatchRequestInput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestInput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -148,21 +150,5 @@ protected virtual InternalBatchRequestInput PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalBatchRequestInput internalBatchRequestInput) - { - if (internalBatchRequestInput == null) - { - return null; - } - return BinaryContent.Create(internalBatchRequestInput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalBatchRequestInput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalBatchRequestInput(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalBatchRequestInput.cs b/src/Generated/Models/InternalBatchRequestInput.cs index 73e2768f9..984632f2d 100644 --- a/src/Generated/Models/InternalBatchRequestInput.cs +++ b/src/Generated/Models/InternalBatchRequestInput.cs @@ -15,7 +15,7 @@ public InternalBatchRequestInput() { } - internal InternalBatchRequestInput(string customId, InternalBatchRequestInputMethod? @method, Uri url, IDictionary additionalBinaryDataProperties) + internal InternalBatchRequestInput(string customId, string @method, Uri url, IDictionary additionalBinaryDataProperties) { CustomId = customId; Method = @method; @@ -25,7 +25,7 @@ internal InternalBatchRequestInput(string customId, InternalBatchRequestInputMet public string CustomId { get; set; } - public InternalBatchRequestInputMethod? Method { get; set; } + public string Method { get; set; } public Uri Url { get; set; } diff --git a/src/Generated/Models/InternalBatchRequestInputMethod.cs b/src/Generated/Models/InternalBatchRequestInputMethod.cs deleted file mode 100644 index 8e1e03a89..000000000 --- a/src/Generated/Models/InternalBatchRequestInputMethod.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Batch -{ - internal readonly partial struct InternalBatchRequestInputMethod : IEquatable - { - private readonly string _value; - private const string POSTValue = "POST"; - - public InternalBatchRequestInputMethod(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalBatchRequestInputMethod POST { get; } = new InternalBatchRequestInputMethod(POSTValue); - - public static bool operator ==(InternalBatchRequestInputMethod left, InternalBatchRequestInputMethod right) => left.Equals(right); - - public static bool operator !=(InternalBatchRequestInputMethod left, InternalBatchRequestInputMethod right) => !left.Equals(right); - - public static implicit operator InternalBatchRequestInputMethod(string value) => new InternalBatchRequestInputMethod(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalBatchRequestInputMethod other && Equals(other); - - public bool Equals(InternalBatchRequestInputMethod 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/InternalBatchRequestOutput.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs index 6da0cfd42..a2e122d41 100644 --- a/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutput.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -47,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("error"u8); writer.WriteObjectValue(Error, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -70,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalBatchRequestOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -124,6 +127,7 @@ internal static InternalBatchRequestOutput DeserializeInternalBatchRequestOutput error = InternalBatchRequestOutputError.DeserializeInternalBatchRequestOutputError(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestOutput(id, customId, response, error, additionalBinaryDataProperties); @@ -131,13 +135,14 @@ internal static InternalBatchRequestOutput DeserializeInternalBatchRequestOutput BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalBatchRequestOutput)} does not support writing '{options.Format}' format."); } @@ -145,6 +150,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalBatchRequestOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -161,21 +167,5 @@ protected virtual InternalBatchRequestOutput PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalBatchRequestOutput internalBatchRequestOutput) - { - if (internalBatchRequestOutput == null) - { - return null; - } - return BinaryContent.Create(internalBatchRequestOutput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalBatchRequestOutput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalBatchRequestOutput(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalBatchRequestOutput.cs b/src/Generated/Models/InternalBatchRequestOutput.cs index a277639b4..16973f6ec 100644 --- a/src/Generated/Models/InternalBatchRequestOutput.cs +++ b/src/Generated/Models/InternalBatchRequestOutput.cs @@ -28,9 +28,9 @@ internal InternalBatchRequestOutput(string id, string customId, InternalBatchReq public string CustomId { get; } - public InternalBatchRequestOutputResponse Response { get; } + internal InternalBatchRequestOutputResponse Response { get; } - public InternalBatchRequestOutputError Error { get; } + internal InternalBatchRequestOutputError Error { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs index 32cfaa289..1df3ab156 100644 --- a/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutputError.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalBatchRequestOutputError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestOutputError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,6 +95,7 @@ internal static InternalBatchRequestOutputError DeserializeInternalBatchRequestO message = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestOutputError(code, message, additionalBinaryDataProperties); @@ -99,13 +103,14 @@ internal static InternalBatchRequestOutputError DeserializeInternalBatchRequestO BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalBatchRequestOutputError)} does not support writing '{options.Format}' format."); } @@ -113,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalBatchRequestOutputError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestOutputError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,21 +135,5 @@ protected virtual InternalBatchRequestOutputError PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalBatchRequestOutputError internalBatchRequestOutputError) - { - if (internalBatchRequestOutputError == null) - { - return null; - } - return BinaryContent.Create(internalBatchRequestOutputError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalBatchRequestOutputError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalBatchRequestOutputError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs b/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs index 7e6bc041e..a63cbccfa 100644 --- a/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs +++ b/src/Generated/Models/InternalBatchRequestOutputResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -60,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -83,6 +85,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalBatchRequestOutputResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestOutputResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -141,6 +144,7 @@ internal static InternalBatchRequestOutputResponse DeserializeInternalBatchReque body = dictionary; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalBatchRequestOutputResponse(statusCode, requestId, body ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); @@ -148,13 +152,14 @@ internal static InternalBatchRequestOutputResponse DeserializeInternalBatchReque BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalBatchRequestOutputResponse)} does not support writing '{options.Format}' format."); } @@ -162,6 +167,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalBatchRequestOutputResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalBatchRequestOutputResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -178,21 +184,5 @@ protected virtual InternalBatchRequestOutputResponse PersistableModelCreateCore( } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalBatchRequestOutputResponse internalBatchRequestOutputResponse) - { - if (internalBatchRequestOutputResponse == null) - { - return null; - } - return BinaryContent.Create(internalBatchRequestOutputResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalBatchRequestOutputResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalBatchRequestOutputResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalBatchRequestOutputResponse.cs b/src/Generated/Models/InternalBatchRequestOutputResponse.cs index b1866554e..0a9c03577 100644 --- a/src/Generated/Models/InternalBatchRequestOutputResponse.cs +++ b/src/Generated/Models/InternalBatchRequestOutputResponse.cs @@ -12,16 +12,16 @@ internal partial class InternalBatchRequestOutputResponse { private protected IDictionary _additionalBinaryDataProperties; - internal InternalBatchRequestOutputResponse() + internal InternalBatchRequestOutputResponse() : this(default, null, null, null) { - Body = new ChangeTrackingDictionary(); } internal InternalBatchRequestOutputResponse(int? statusCode, string requestId, IDictionary body, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections StatusCode = statusCode; RequestId = requestId; - Body = body; + Body = body ?? new ChangeTrackingDictionary(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalBatchStatus.cs b/src/Generated/Models/InternalBatchStatus.cs index 33c7f6439..3edeb43ce 100644 --- a/src/Generated/Models/InternalBatchStatus.cs +++ b/src/Generated/Models/InternalBatchStatus.cs @@ -27,21 +27,21 @@ public InternalBatchStatus(string value) _value = value; } - public static InternalBatchStatus Validating { get; } = new InternalBatchStatus(ValidatingValue); + internal static InternalBatchStatus Validating { get; } = new InternalBatchStatus(ValidatingValue); - public static InternalBatchStatus Failed { get; } = new InternalBatchStatus(FailedValue); + internal static InternalBatchStatus Failed { get; } = new InternalBatchStatus(FailedValue); - public static InternalBatchStatus InProgress { get; } = new InternalBatchStatus(InProgressValue); + internal static InternalBatchStatus InProgress { get; } = new InternalBatchStatus(InProgressValue); - public static InternalBatchStatus Finalizing { get; } = new InternalBatchStatus(FinalizingValue); + internal static InternalBatchStatus Finalizing { get; } = new InternalBatchStatus(FinalizingValue); - public static InternalBatchStatus Completed { get; } = new InternalBatchStatus(CompletedValue); + internal static InternalBatchStatus Completed { get; } = new InternalBatchStatus(CompletedValue); - public static InternalBatchStatus Expired { get; } = new InternalBatchStatus(ExpiredValue); + internal static InternalBatchStatus Expired { get; } = new InternalBatchStatus(ExpiredValue); - public static InternalBatchStatus Cancelling { get; } = new InternalBatchStatus(CancellingValue); + internal static InternalBatchStatus Cancelling { get; } = new InternalBatchStatus(CancellingValue); - public static InternalBatchStatus Cancelled { get; } = new InternalBatchStatus(CancelledValue); + internal static InternalBatchStatus Cancelled { get; } = new InternalBatchStatus(CancelledValue); public static bool operator ==(InternalBatchStatus left, InternalBatchStatus right) => left.Equals(right); diff --git a/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs b/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs index 7a00efa66..c2eca0978 100644 --- a/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionFunctionCallOption.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionFunctionCallOption IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionFunctionCallOption JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalChatCompletionFunctionCallOption DeserializeInternalChat name = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionFunctionCallOption(name, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalChatCompletionFunctionCallOption DeserializeInternalChat BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionFunctionCallOption)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionFunctionCallOption IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionFunctionCallOption PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalChatCompletionFunctionCallOption PersistableModelCreat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionFunctionCallOption internalChatCompletionFunctionCallOption) - { - if (internalChatCompletionFunctionCallOption == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionFunctionCallOption, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionFunctionCallOption(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionFunctionCallOption(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionList.Serialization.cs b/src/Generated/Models/InternalChatCompletionList.Serialization.cs new file mode 100644 index 000000000..b3f113fa8 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionList.Serialization.cs @@ -0,0 +1,192 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionList : IJsonModel + { + internal InternalChatCompletionList() : this(null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChatCompletionList)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (ChatCompletion item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalChatCompletionList IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalChatCompletionList JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChatCompletionList)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChatCompletionList(document.RootElement, options); + } + + internal static InternalChatCompletionList DeserializeInternalChatCompletionList(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + string firstId = default; + string lastId = default; + bool hasMore = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ChatCompletion.DeserializeChatCompletion(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("first_id"u8)) + { + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + lastId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalChatCompletionList( + @object, + data, + firstId, + lastId, + hasMore, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalChatCompletionList)} does not support writing '{options.Format}' format."); + } + } + + InternalChatCompletionList IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalChatCompletionList PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChatCompletionList(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChatCompletionList)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalChatCompletionList.cs b/src/Generated/Models/InternalChatCompletionList.cs new file mode 100644 index 000000000..3ddc4ac06 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionList.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionList + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalChatCompletionList(IEnumerable data, string firstId, string lastId, bool hasMore) + { + Data = data.ToList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + } + + internal InternalChatCompletionList(string @object, IList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "list"; + + public IList Data { get; } + + public string FirstId { get; } + + public string LastId { get; } + + public bool HasMore { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalChatCompletionMessageList.Serialization.cs b/src/Generated/Models/InternalChatCompletionMessageList.Serialization.cs new file mode 100644 index 000000000..6ae688646 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionMessageList.Serialization.cs @@ -0,0 +1,192 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionMessageList : IJsonModel + { + internal InternalChatCompletionMessageList() : this(null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChatCompletionMessageList)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalChatCompletionMessageListDatum item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalChatCompletionMessageList IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalChatCompletionMessageList JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChatCompletionMessageList)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChatCompletionMessageList(document.RootElement, options); + } + + internal static InternalChatCompletionMessageList DeserializeInternalChatCompletionMessageList(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + string firstId = default; + string lastId = default; + bool hasMore = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalChatCompletionMessageListDatum.DeserializeInternalChatCompletionMessageListDatum(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("first_id"u8)) + { + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + lastId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalChatCompletionMessageList( + @object, + data, + firstId, + lastId, + hasMore, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalChatCompletionMessageList)} does not support writing '{options.Format}' format."); + } + } + + InternalChatCompletionMessageList IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalChatCompletionMessageList PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChatCompletionMessageList(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChatCompletionMessageList)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalChatCompletionMessageList.cs b/src/Generated/Models/InternalChatCompletionMessageList.cs new file mode 100644 index 000000000..9f836c305 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionMessageList.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionMessageList + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalChatCompletionMessageList(IEnumerable data, string firstId, string lastId, bool hasMore) + { + Data = data.ToList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + } + + internal InternalChatCompletionMessageList(string @object, IList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "list"; + + internal IList Data { get; } + + public string FirstId { get; } + + public string LastId { get; } + + public bool HasMore { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalChatCompletionMessageListDatum.Serialization.cs b/src/Generated/Models/InternalChatCompletionMessageListDatum.Serialization.cs new file mode 100644 index 000000000..92f5db6c0 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionMessageListDatum.Serialization.cs @@ -0,0 +1,280 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionMessageListDatum : IJsonModel + { + internal InternalChatCompletionMessageListDatum() : this(null, null, null, null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChatCompletionMessageListDatum)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + if (Optional.IsDefined(Content)) + { + writer.WritePropertyName("content"u8); + writer.WriteStringValue(Content); + } + else + { + writer.WriteNull("content"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) + { + if (Optional.IsDefined(Refusal)) + { + writer.WritePropertyName("refusal"u8); + writer.WriteStringValue(Refusal); + } + else + { + writer.WriteNull("refusal"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (Optional.IsCollectionDefined(ToolCalls) && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) + { + writer.WritePropertyName("tool_calls"u8); + writer.WriteStartArray(); + foreach (ChatToolCall item in ToolCalls) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsCollectionDefined(Annotations) && _additionalBinaryDataProperties?.ContainsKey("annotations") != true) + { + writer.WritePropertyName("annotations"u8); + writer.WriteStartArray(); + foreach (ChatMessageAnnotation item in Annotations) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(FunctionCall) && _additionalBinaryDataProperties?.ContainsKey("function_call") != true) + { + writer.WritePropertyName("function_call"u8); + writer.WriteObjectValue(FunctionCall, options); + } + if (Optional.IsDefined(Audio) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) + { + writer.WritePropertyName("audio"u8); + writer.WriteObjectValue(Audio, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role.ToSerialString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalChatCompletionMessageListDatum IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalChatCompletionMessageListDatum JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChatCompletionMessageListDatum)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChatCompletionMessageListDatum(document.RootElement, options); + } + + internal static InternalChatCompletionMessageListDatum DeserializeInternalChatCompletionMessageListDatum(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string content = default; + string refusal = default; + IReadOnlyList toolCalls = default; + IList annotations = default; + InternalChatCompletionResponseMessageFunctionCall functionCall = default; + ChatOutputAudio audio = default; + string id = default; + ChatMessageRole role = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("content"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + content = null; + continue; + } + content = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("refusal"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + refusal = null; + continue; + } + refusal = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("tool_calls"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ChatToolCall.DeserializeChatToolCall(item, options)); + } + toolCalls = array; + continue; + } + if (prop.NameEquals("annotations"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ChatMessageAnnotation.DeserializeChatMessageAnnotation(item, options)); + } + annotations = array; + continue; + } + if (prop.NameEquals("function_call"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + functionCall = InternalChatCompletionResponseMessageFunctionCall.DeserializeInternalChatCompletionResponseMessageFunctionCall(prop.Value, options); + continue; + } + if (prop.NameEquals("audio"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + audio = null; + continue; + } + audio = ChatOutputAudio.DeserializeChatOutputAudio(prop.Value, options); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("role"u8)) + { + role = prop.Value.GetString().ToChatMessageRole(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalChatCompletionMessageListDatum( + content, + refusal, + toolCalls ?? new ChangeTrackingList(), + annotations ?? new ChangeTrackingList(), + functionCall, + audio, + id, + role, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalChatCompletionMessageListDatum)} does not support writing '{options.Format}' format."); + } + } + + InternalChatCompletionMessageListDatum IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalChatCompletionMessageListDatum PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChatCompletionMessageListDatum(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChatCompletionMessageListDatum)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalChatCompletionMessageListDatum.cs b/src/Generated/Models/InternalChatCompletionMessageListDatum.cs new file mode 100644 index 000000000..ccf4e8d15 --- /dev/null +++ b/src/Generated/Models/InternalChatCompletionMessageListDatum.cs @@ -0,0 +1,59 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalChatCompletionMessageListDatum + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalChatCompletionMessageListDatum(string content, string refusal, string id, ChatMessageRole role) + { + Content = content; + Refusal = refusal; + ToolCalls = new ChangeTrackingList(); + Annotations = new ChangeTrackingList(); + Id = id; + Role = role; + } + + internal InternalChatCompletionMessageListDatum(string content, string refusal, IReadOnlyList toolCalls, IList annotations, InternalChatCompletionResponseMessageFunctionCall functionCall, ChatOutputAudio audio, string id, ChatMessageRole role, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Content = content; + Refusal = refusal; + ToolCalls = toolCalls ?? new ChangeTrackingList(); + Annotations = annotations ?? new ChangeTrackingList(); + FunctionCall = functionCall; + Audio = audio; + Id = id; + Role = role; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Content { get; } + + public string Refusal { get; } + + public IReadOnlyList ToolCalls { get; } + + public IList Annotations { get; } + + internal InternalChatCompletionResponseMessageFunctionCall FunctionCall { get; } + + public ChatOutputAudio Audio { get; } + + public string Id { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs index ad43dca7d..1d0051cda 100644 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkFunction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8Js writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("arguments"u8); SerializeArgumentsValue(writer, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionMessageToolCallChunkFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionMessageToolCallChunkFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,6 +95,7 @@ internal static InternalChatCompletionMessageToolCallChunkFunction DeserializeIn DeserializeArgumentsValue(prop, ref arguments); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionMessageToolCallChunkFunction(name, arguments, additionalBinaryDataProperties); @@ -99,13 +103,14 @@ internal static InternalChatCompletionMessageToolCallChunkFunction DeserializeIn BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionMessageToolCallChunkFunction)} does not support writing '{options.Format}' format."); } @@ -113,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionMessageToolCallChunkFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionMessageToolCallChunkFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,21 +135,5 @@ protected virtual InternalChatCompletionMessageToolCallChunkFunction Persistable } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionMessageToolCallChunkFunction internalChatCompletionMessageToolCallChunkFunction) - { - if (internalChatCompletionMessageToolCallChunkFunction == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionMessageToolCallChunkFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionMessageToolCallChunkFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionMessageToolCallChunkFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkType.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallChunkType.cs deleted file mode 100644 index 105152fba..000000000 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallChunkType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionMessageToolCallChunkType : IEquatable - { - private readonly string _value; - private const string FunctionValue = "function"; - - public InternalChatCompletionMessageToolCallChunkType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionMessageToolCallChunkType Function { get; } = new InternalChatCompletionMessageToolCallChunkType(FunctionValue); - - public static bool operator ==(InternalChatCompletionMessageToolCallChunkType left, InternalChatCompletionMessageToolCallChunkType right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionMessageToolCallChunkType left, InternalChatCompletionMessageToolCallChunkType right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionMessageToolCallChunkType(string value) => new InternalChatCompletionMessageToolCallChunkType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionMessageToolCallChunkType other && Equals(other); - - public bool Equals(InternalChatCompletionMessageToolCallChunkType 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/InternalChatCompletionMessageToolCallFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs index 634017aef..96638e34e 100644 --- a/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionMessageToolCallFunction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("arguments"u8); SerializeArgumentsValue(writer, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionMessageToolCallFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionMessageToolCallFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static InternalChatCompletionMessageToolCallFunction DeserializeInterna DeserializeArgumentsValue(prop, ref arguments); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionMessageToolCallFunction(name, arguments, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static InternalChatCompletionMessageToolCallFunction DeserializeInterna BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionMessageToolCallFunction)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionMessageToolCallFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionMessageToolCallFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalChatCompletionMessageToolCallFunction PersistableModel } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionMessageToolCallFunction internalChatCompletionMessageToolCallFunction) - { - if (internalChatCompletionMessageToolCallFunction == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionMessageToolCallFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionMessageToolCallFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionMessageToolCallFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs index 85943af54..a70983226 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoice.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,13 +35,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind); } if (_additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); writer.WriteObjectValue(Function, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionNamedToolChoice IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionNamedToolChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,14 +84,14 @@ internal static InternalChatCompletionNamedToolChoice DeserializeInternalChatCom { return null; } - InternalChatCompletionNamedToolChoiceType @type = default; + string kind = default; InternalChatCompletionNamedToolChoiceFunction function = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalChatCompletionNamedToolChoiceType(prop.Value.GetString()); + kind = prop.Value.GetString(); continue; } if (prop.NameEquals("function"u8)) @@ -96,20 +99,22 @@ internal static InternalChatCompletionNamedToolChoice DeserializeInternalChatCom function = InternalChatCompletionNamedToolChoiceFunction.DeserializeInternalChatCompletionNamedToolChoiceFunction(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatCompletionNamedToolChoice(@type, function, additionalBinaryDataProperties); + return new InternalChatCompletionNamedToolChoice(kind, function, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionNamedToolChoice)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionNamedToolChoice IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionNamedToolChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalChatCompletionNamedToolChoice PersistableModelCreateCo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionNamedToolChoice internalChatCompletionNamedToolChoice) - { - if (internalChatCompletionNamedToolChoice == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionNamedToolChoice, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionNamedToolChoice(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionNamedToolChoice(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoice.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoice.cs index 31efb2d80..cf5ecd35c 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoice.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoice.cs @@ -12,23 +12,23 @@ internal partial class InternalChatCompletionNamedToolChoice { private protected IDictionary _additionalBinaryDataProperties; - public InternalChatCompletionNamedToolChoice(InternalChatCompletionNamedToolChoiceFunction function) + internal InternalChatCompletionNamedToolChoice(InternalChatCompletionNamedToolChoiceFunction function) { Argument.AssertNotNull(function, nameof(function)); Function = function; } - internal InternalChatCompletionNamedToolChoice(InternalChatCompletionNamedToolChoiceType @type, InternalChatCompletionNamedToolChoiceFunction function, IDictionary additionalBinaryDataProperties) + internal InternalChatCompletionNamedToolChoice(string kind, InternalChatCompletionNamedToolChoiceFunction function, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; Function = function; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalChatCompletionNamedToolChoiceType Type { get; } = "function"; + public string Kind { get; } = "function"; - public InternalChatCompletionNamedToolChoiceFunction Function { get; } + internal InternalChatCompletionNamedToolChoiceFunction Function { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs index 65ccae31d..de5a825eb 100644 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionNamedToolChoiceFunction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionNamedToolChoiceFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionNamedToolChoiceFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalChatCompletionNamedToolChoiceFunction DeserializeInterna name = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionNamedToolChoiceFunction(name, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalChatCompletionNamedToolChoiceFunction DeserializeInterna BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionNamedToolChoiceFunction)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionNamedToolChoiceFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionNamedToolChoiceFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalChatCompletionNamedToolChoiceFunction PersistableModel } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionNamedToolChoiceFunction internalChatCompletionNamedToolChoiceFunction) - { - if (internalChatCompletionNamedToolChoiceFunction == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionNamedToolChoiceFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionNamedToolChoiceFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionNamedToolChoiceFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionNamedToolChoiceType.cs b/src/Generated/Models/InternalChatCompletionNamedToolChoiceType.cs deleted file mode 100644 index 0fe3d7180..000000000 --- a/src/Generated/Models/InternalChatCompletionNamedToolChoiceType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionNamedToolChoiceType : IEquatable - { - private readonly string _value; - private const string FunctionValue = "function"; - - public InternalChatCompletionNamedToolChoiceType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionNamedToolChoiceType Function { get; } = new InternalChatCompletionNamedToolChoiceType(FunctionValue); - - public static bool operator ==(InternalChatCompletionNamedToolChoiceType left, InternalChatCompletionNamedToolChoiceType right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionNamedToolChoiceType left, InternalChatCompletionNamedToolChoiceType right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionNamedToolChoiceType(string value) => new InternalChatCompletionNamedToolChoiceType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionNamedToolChoiceType other && Equals(other); - - public bool Equals(InternalChatCompletionNamedToolChoiceType 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/InternalChatCompletionRequestMessageContentPartAudio.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.Serialization.cs index ff9774e9f..fcd44abf7 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,47 +24,26 @@ void IJsonModel.Write(Utf8 writer.WriteEndObject(); } - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartAudio)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } + base.JsonModelWriteCore(writer, options); if (_additionalBinaryDataProperties?.ContainsKey("input_audio") != true) { writer.WritePropertyName("input_audio"u8); writer.WriteObjectValue(InputAudio, options); } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } } - InternalChatCompletionRequestMessageContentPartAudio IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + InternalChatCompletionRequestMessageContentPartAudio IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartAudio)JsonModelCreateCore(ref reader, options); - protected virtual InternalChatCompletionRequestMessageContentPartAudio JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -81,43 +60,40 @@ internal static InternalChatCompletionRequestMessageContentPartAudio Deserialize { return null; } - InternalChatCompletionRequestMessageContentPartAudioType @type = default; - InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("type"u8)) - { - @type = new InternalChatCompletionRequestMessageContentPartAudioType(prop.Value.GetString()); - continue; - } if (prop.NameEquals("input_audio"u8)) { inputAudio = InternalChatCompletionRequestMessageContentPartAudioInputAudio.DeserializeInternalChatCompletionRequestMessageContentPartAudioInputAudio(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatCompletionRequestMessageContentPartAudio(@type, inputAudio, additionalBinaryDataProperties); + return new InternalChatCompletionRequestMessageContentPartAudio(additionalBinaryDataProperties, inputAudio); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartAudio)} does not support writing '{options.Format}' format."); } } - InternalChatCompletionRequestMessageContentPartAudio IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + InternalChatCompletionRequestMessageContentPartAudio IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartAudio)PersistableModelCreateCore(data, options); - protected virtual InternalChatCompletionRequestMessageContentPartAudio PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -133,21 +109,5 @@ protected virtual InternalChatCompletionRequestMessageContentPartAudio Persistab } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionRequestMessageContentPartAudio internalChatCompletionRequestMessageContentPartAudio) - { - if (internalChatCompletionRequestMessageContentPartAudio == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionRequestMessageContentPartAudio, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionRequestMessageContentPartAudio(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionRequestMessageContentPartAudio(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.cs index c1d6b3edf..db60dff10 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudio.cs @@ -8,32 +8,20 @@ namespace OpenAI.Chat { - internal partial class InternalChatCompletionRequestMessageContentPartAudio + internal partial class InternalChatCompletionRequestMessageContentPartAudio : ChatMessageContentPart { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalChatCompletionRequestMessageContentPartAudio(InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio) + internal InternalChatCompletionRequestMessageContentPartAudio(InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio) { Argument.AssertNotNull(inputAudio, nameof(inputAudio)); InputAudio = inputAudio; } - internal InternalChatCompletionRequestMessageContentPartAudio(InternalChatCompletionRequestMessageContentPartAudioType @type, InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio, IDictionary additionalBinaryDataProperties) + internal InternalChatCompletionRequestMessageContentPartAudio(IDictionary additionalBinaryDataProperties, InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio) : base(additionalBinaryDataProperties) { - Type = @type; InputAudio = inputAudio; - _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalChatCompletionRequestMessageContentPartAudioType Type { get; } = "input_audio"; - - public InternalChatCompletionRequestMessageContentPartAudioInputAudio InputAudio { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } + internal InternalChatCompletionRequestMessageContentPartAudioInputAudio InputAudio { get; } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioInputAudio.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioInputAudio.Serialization.cs index 419b7b229..a3dd3d428 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioInputAudio.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioInputAudio.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel. writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("format"u8); writer.WriteStringValue(Format.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionRequestMessageContentPartAudioInputAudio IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionRequestMessageContentPartAudioInputAudio JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static InternalChatCompletionRequestMessageContentPartAudioInputAudio D format = new ChatInputAudioFormat(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionRequestMessageContentPartAudioInputAudio(data, format, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static InternalChatCompletionRequestMessageContentPartAudioInputAudio D BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartAudioInputAudio)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionRequestMessageContentPartAudioInputAudio IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionRequestMessageContentPartAudioInputAudio PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalChatCompletionRequestMessageContentPartAudioInputAudio } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionRequestMessageContentPartAudioInputAudio internalChatCompletionRequestMessageContentPartAudioInputAudio) - { - if (internalChatCompletionRequestMessageContentPartAudioInputAudio == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionRequestMessageContentPartAudioInputAudio, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionRequestMessageContentPartAudioInputAudio(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionRequestMessageContentPartAudioInputAudio(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioType.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioType.cs deleted file mode 100644 index e7d2eb1b6..000000000 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartAudioType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionRequestMessageContentPartAudioType : IEquatable - { - private readonly string _value; - private const string InputAudioValue = "input_audio"; - - public InternalChatCompletionRequestMessageContentPartAudioType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionRequestMessageContentPartAudioType InputAudio { get; } = new InternalChatCompletionRequestMessageContentPartAudioType(InputAudioValue); - - public static bool operator ==(InternalChatCompletionRequestMessageContentPartAudioType left, InternalChatCompletionRequestMessageContentPartAudioType right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionRequestMessageContentPartAudioType left, InternalChatCompletionRequestMessageContentPartAudioType right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionRequestMessageContentPartAudioType(string value) => new InternalChatCompletionRequestMessageContentPartAudioType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionRequestMessageContentPartAudioType other && Equals(other); - - public bool Equals(InternalChatCompletionRequestMessageContentPartAudioType 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/InternalChatCompletionRequestMessageContentPartFile.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.Serialization.cs index f39cfe468..4cc8e2aca 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,47 +24,26 @@ void IJsonModel.Write(Utf8J writer.WriteEndObject(); } - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartFile)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } + base.JsonModelWriteCore(writer, options); if (_additionalBinaryDataProperties?.ContainsKey("file") != true) { writer.WritePropertyName("file"u8); writer.WriteObjectValue(File, options); } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } } - InternalChatCompletionRequestMessageContentPartFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + InternalChatCompletionRequestMessageContentPartFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartFile)JsonModelCreateCore(ref reader, options); - protected virtual InternalChatCompletionRequestMessageContentPartFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -81,43 +60,40 @@ internal static InternalChatCompletionRequestMessageContentPartFile DeserializeI { return null; } - InternalChatCompletionRequestMessageContentPartFileType @type = default; - InternalChatCompletionRequestMessageContentPartFileFile @file = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalChatCompletionRequestMessageContentPartFileFile @file = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("type"u8)) - { - @type = new InternalChatCompletionRequestMessageContentPartFileType(prop.Value.GetString()); - continue; - } if (prop.NameEquals("file"u8)) { @file = InternalChatCompletionRequestMessageContentPartFileFile.DeserializeInternalChatCompletionRequestMessageContentPartFileFile(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatCompletionRequestMessageContentPartFile(@type, @file, additionalBinaryDataProperties); + return new InternalChatCompletionRequestMessageContentPartFile(additionalBinaryDataProperties, @file); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartFile)} does not support writing '{options.Format}' format."); } } - InternalChatCompletionRequestMessageContentPartFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + InternalChatCompletionRequestMessageContentPartFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartFile)PersistableModelCreateCore(data, options); - protected virtual InternalChatCompletionRequestMessageContentPartFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -133,21 +109,5 @@ protected virtual InternalChatCompletionRequestMessageContentPartFile Persistabl } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionRequestMessageContentPartFile internalChatCompletionRequestMessageContentPartFile) - { - if (internalChatCompletionRequestMessageContentPartFile == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionRequestMessageContentPartFile, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionRequestMessageContentPartFile(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionRequestMessageContentPartFile(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.cs index 0bca8f3d9..335ffbc2b 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFile.cs @@ -8,32 +8,20 @@ namespace OpenAI.Chat { - internal partial class InternalChatCompletionRequestMessageContentPartFile + internal partial class InternalChatCompletionRequestMessageContentPartFile : ChatMessageContentPart { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalChatCompletionRequestMessageContentPartFile(InternalChatCompletionRequestMessageContentPartFileFile @file) + internal InternalChatCompletionRequestMessageContentPartFile(InternalChatCompletionRequestMessageContentPartFileFile @file) { Argument.AssertNotNull(@file, nameof(@file)); File = @file; } - internal InternalChatCompletionRequestMessageContentPartFile(InternalChatCompletionRequestMessageContentPartFileType @type, InternalChatCompletionRequestMessageContentPartFileFile @file, IDictionary additionalBinaryDataProperties) + internal InternalChatCompletionRequestMessageContentPartFile(IDictionary additionalBinaryDataProperties, InternalChatCompletionRequestMessageContentPartFileFile @file) : base(additionalBinaryDataProperties) { - Type = @type; File = @file; - _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalChatCompletionRequestMessageContentPartFileType Type { get; } = "file"; - - public InternalChatCompletionRequestMessageContentPartFileFile File { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } + internal InternalChatCompletionRequestMessageContentPartFileFile File { get; } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.Serialization.cs index 4bdc69847..99026ba00 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(U writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,11 +38,12 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (Optional.IsDefined(FileData) && _additionalBinaryDataProperties?.ContainsKey("file_data") != true) + if (Optional.IsDefined(InternalFileData) && _additionalBinaryDataProperties?.ContainsKey("file_data") != true) { writer.WritePropertyName("file_data"u8); - writer.WriteStringValue(FileData); + writer.WriteStringValue(InternalFileData); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionRequestMessageContentPartFileFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionRequestMessageContentPartFileFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -84,7 +87,7 @@ internal static InternalChatCompletionRequestMessageContentPartFileFile Deserial } string filename = default; string fileId = default; - string fileData = default; + string internalFileData = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -100,23 +103,25 @@ internal static InternalChatCompletionRequestMessageContentPartFileFile Deserial } if (prop.NameEquals("file_data"u8)) { - fileData = prop.Value.GetString(); + internalFileData = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatCompletionRequestMessageContentPartFileFile(filename, fileId, fileData, additionalBinaryDataProperties); + return new InternalChatCompletionRequestMessageContentPartFileFile(filename, fileId, internalFileData, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartFileFile)} does not support writing '{options.Format}' format."); } @@ -124,6 +129,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionRequestMessageContentPartFileFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionRequestMessageContentPartFileFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -140,21 +146,5 @@ protected virtual InternalChatCompletionRequestMessageContentPartFileFile Persis } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionRequestMessageContentPartFileFile internalChatCompletionRequestMessageContentPartFileFile) - { - if (internalChatCompletionRequestMessageContentPartFileFile == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionRequestMessageContentPartFileFile, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionRequestMessageContentPartFileFile(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionRequestMessageContentPartFileFile(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.cs index 1d2e317f4..5f28b0b1a 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileFile.cs @@ -15,11 +15,11 @@ public InternalChatCompletionRequestMessageContentPartFileFile() { } - internal InternalChatCompletionRequestMessageContentPartFileFile(string filename, string fileId, string fileData, IDictionary additionalBinaryDataProperties) + internal InternalChatCompletionRequestMessageContentPartFileFile(string filename, string fileId, string internalFileData, IDictionary additionalBinaryDataProperties) { Filename = filename; FileId = fileId; - FileData = fileData; + InternalFileData = internalFileData; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileType.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileType.cs deleted file mode 100644 index bac939c73..000000000 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartFileType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionRequestMessageContentPartFileType : IEquatable - { - private readonly string _value; - private const string FileValue = "file"; - - public InternalChatCompletionRequestMessageContentPartFileType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionRequestMessageContentPartFileType File { get; } = new InternalChatCompletionRequestMessageContentPartFileType(FileValue); - - public static bool operator ==(InternalChatCompletionRequestMessageContentPartFileType left, InternalChatCompletionRequestMessageContentPartFileType right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionRequestMessageContentPartFileType left, InternalChatCompletionRequestMessageContentPartFileType right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionRequestMessageContentPartFileType(string value) => new InternalChatCompletionRequestMessageContentPartFileType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionRequestMessageContentPartFileType other && Equals(other); - - public bool Equals(InternalChatCompletionRequestMessageContentPartFileType 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/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs index 3f05dc32d..aa8be7c2b 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,47 +24,26 @@ void IJsonModel.Write(Utf8 writer.WriteEndObject(); } - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartImage)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } + base.JsonModelWriteCore(writer, options); if (_additionalBinaryDataProperties?.ContainsKey("image_url") != true) { writer.WritePropertyName("image_url"u8); writer.WriteObjectValue(ImageUrl, options); } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } } - InternalChatCompletionRequestMessageContentPartImage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + InternalChatCompletionRequestMessageContentPartImage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartImage)JsonModelCreateCore(ref reader, options); - protected virtual InternalChatCompletionRequestMessageContentPartImage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -81,43 +60,40 @@ internal static InternalChatCompletionRequestMessageContentPartImage Deserialize { return null; } - InternalChatCompletionRequestMessageContentPartImageType @type = default; - InternalChatCompletionRequestMessageContentPartImageImageUrl imageUrl = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalChatCompletionRequestMessageContentPartImageImageUrl imageUrl = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("type"u8)) - { - @type = new InternalChatCompletionRequestMessageContentPartImageType(prop.Value.GetString()); - continue; - } if (prop.NameEquals("image_url"u8)) { imageUrl = InternalChatCompletionRequestMessageContentPartImageImageUrl.DeserializeInternalChatCompletionRequestMessageContentPartImageImageUrl(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatCompletionRequestMessageContentPartImage(@type, imageUrl, additionalBinaryDataProperties); + return new InternalChatCompletionRequestMessageContentPartImage(additionalBinaryDataProperties, imageUrl); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartImage)} does not support writing '{options.Format}' format."); } } - InternalChatCompletionRequestMessageContentPartImage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + InternalChatCompletionRequestMessageContentPartImage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartImage)PersistableModelCreateCore(data, options); - protected virtual InternalChatCompletionRequestMessageContentPartImage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -133,21 +109,5 @@ protected virtual InternalChatCompletionRequestMessageContentPartImage Persistab } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionRequestMessageContentPartImage internalChatCompletionRequestMessageContentPartImage) - { - if (internalChatCompletionRequestMessageContentPartImage == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionRequestMessageContentPartImage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionRequestMessageContentPartImage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionRequestMessageContentPartImage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.cs index 2b8d104c8..5a8f4b165 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImage.cs @@ -8,32 +8,20 @@ namespace OpenAI.Chat { - internal partial class InternalChatCompletionRequestMessageContentPartImage + internal partial class InternalChatCompletionRequestMessageContentPartImage : ChatMessageContentPart { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalChatCompletionRequestMessageContentPartImage(InternalChatCompletionRequestMessageContentPartImageImageUrl imageUrl) + internal InternalChatCompletionRequestMessageContentPartImage(InternalChatCompletionRequestMessageContentPartImageImageUrl imageUrl) { Argument.AssertNotNull(imageUrl, nameof(imageUrl)); ImageUrl = imageUrl; } - internal InternalChatCompletionRequestMessageContentPartImage(InternalChatCompletionRequestMessageContentPartImageType @type, InternalChatCompletionRequestMessageContentPartImageImageUrl imageUrl, IDictionary additionalBinaryDataProperties) + internal InternalChatCompletionRequestMessageContentPartImage(IDictionary additionalBinaryDataProperties, InternalChatCompletionRequestMessageContentPartImageImageUrl imageUrl) : base(additionalBinaryDataProperties) { - Type = @type; ImageUrl = imageUrl; - _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalChatCompletionRequestMessageContentPartImageType Type { get; } = "image_url"; - - public InternalChatCompletionRequestMessageContentPartImageImageUrl ImageUrl { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } + internal InternalChatCompletionRequestMessageContentPartImageImageUrl ImageUrl { get; } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs index b43eb47a7..0531eba0a 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -39,8 +40,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("url") != true) { writer.WritePropertyName("url"u8); - writer.WriteStringValue(Url); + writer.WriteStringValue(InternalUrl); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionRequestMessageContentPartImageImageUrl IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionRequestMessageContentPartImageImageUrl JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,7 +85,7 @@ internal static InternalChatCompletionRequestMessageContentPartImageImageUrl Des return null; } ChatImageDetailLevel? detail = default; - string url = default; + string internalUrl = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -97,23 +100,25 @@ internal static InternalChatCompletionRequestMessageContentPartImageImageUrl Des } if (prop.NameEquals("url"u8)) { - url = prop.Value.GetString(); + internalUrl = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatCompletionRequestMessageContentPartImageImageUrl(detail, url, additionalBinaryDataProperties); + return new InternalChatCompletionRequestMessageContentPartImageImageUrl(detail, internalUrl, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartImageImageUrl)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionRequestMessageContentPartImageImageUrl IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionRequestMessageContentPartImageImageUrl PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalChatCompletionRequestMessageContentPartImageImageUrl P } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionRequestMessageContentPartImageImageUrl internalChatCompletionRequestMessageContentPartImageImageUrl) - { - if (internalChatCompletionRequestMessageContentPartImageImageUrl == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionRequestMessageContentPartImageImageUrl, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionRequestMessageContentPartImageImageUrl(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionRequestMessageContentPartImageImageUrl(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs index ceb265278..c0664911a 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageImageUrl.cs @@ -11,6 +11,13 @@ internal partial class InternalChatCompletionRequestMessageContentPartImageImage { private protected IDictionary _additionalBinaryDataProperties; + internal InternalChatCompletionRequestMessageContentPartImageImageUrl(ChatImageDetailLevel? detail, string internalUrl, IDictionary additionalBinaryDataProperties) + { + Detail = detail; + InternalUrl = internalUrl; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + public ChatImageDetailLevel? Detail { get; set; } internal IDictionary SerializedAdditionalRawData diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageType.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageType.cs deleted file mode 100644 index 90bc6204d..000000000 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartImageType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionRequestMessageContentPartImageType : IEquatable - { - private readonly string _value; - private const string ImageUrlValue = "image_url"; - - public InternalChatCompletionRequestMessageContentPartImageType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionRequestMessageContentPartImageType ImageUrl { get; } = new InternalChatCompletionRequestMessageContentPartImageType(ImageUrlValue); - - public static bool operator ==(InternalChatCompletionRequestMessageContentPartImageType left, InternalChatCompletionRequestMessageContentPartImageType right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionRequestMessageContentPartImageType left, InternalChatCompletionRequestMessageContentPartImageType right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionRequestMessageContentPartImageType(string value) => new InternalChatCompletionRequestMessageContentPartImageType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionRequestMessageContentPartImageType other && Equals(other); - - public bool Equals(InternalChatCompletionRequestMessageContentPartImageType 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/InternalChatCompletionRequestMessageContentPartRefusal.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.Serialization.cs index 566a6ccef..8dff892df 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,10 +13,6 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionRequestMessageContentPartRefusal : IJsonModel { - internal InternalChatCompletionRequestMessageContentPartRefusal() - { - } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -24,47 +20,21 @@ void IJsonModel.Write(Ut writer.WriteEndObject(); } - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartRefusal)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) - { - writer.WritePropertyName("refusal"u8); - writer.WriteStringValue(Refusal); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } + base.JsonModelWriteCore(writer, options); } - InternalChatCompletionRequestMessageContentPartRefusal IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + InternalChatCompletionRequestMessageContentPartRefusal IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartRefusal)JsonModelCreateCore(ref reader, options); - protected virtual InternalChatCompletionRequestMessageContentPartRefusal JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -81,43 +51,34 @@ internal static InternalChatCompletionRequestMessageContentPartRefusal Deseriali { return null; } - InternalChatCompletionRequestMessageContentPartRefusalType @type = default; - string refusal = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("type"u8)) - { - @type = new InternalChatCompletionRequestMessageContentPartRefusalType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("refusal"u8)) - { - refusal = prop.Value.GetString(); - continue; - } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatCompletionRequestMessageContentPartRefusal(@type, refusal, additionalBinaryDataProperties); + return new InternalChatCompletionRequestMessageContentPartRefusal(additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartRefusal)} does not support writing '{options.Format}' format."); } } - InternalChatCompletionRequestMessageContentPartRefusal IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + InternalChatCompletionRequestMessageContentPartRefusal IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartRefusal)PersistableModelCreateCore(data, options); - protected virtual InternalChatCompletionRequestMessageContentPartRefusal PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -133,21 +94,5 @@ protected virtual InternalChatCompletionRequestMessageContentPartRefusal Persist } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionRequestMessageContentPartRefusal internalChatCompletionRequestMessageContentPartRefusal) - { - if (internalChatCompletionRequestMessageContentPartRefusal == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionRequestMessageContentPartRefusal, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionRequestMessageContentPartRefusal(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionRequestMessageContentPartRefusal(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.cs index 458939ce0..1cac64ee8 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusal.cs @@ -4,36 +4,17 @@ using System; using System.Collections.Generic; -using OpenAI; namespace OpenAI.Chat { - internal partial class InternalChatCompletionRequestMessageContentPartRefusal + internal partial class InternalChatCompletionRequestMessageContentPartRefusal : ChatMessageContentPart { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalChatCompletionRequestMessageContentPartRefusal(string refusal) + public InternalChatCompletionRequestMessageContentPartRefusal() { - Argument.AssertNotNull(refusal, nameof(refusal)); - - Refusal = refusal; } - internal InternalChatCompletionRequestMessageContentPartRefusal(InternalChatCompletionRequestMessageContentPartRefusalType @type, string refusal, IDictionary additionalBinaryDataProperties) - { - Type = @type; - Refusal = refusal; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalChatCompletionRequestMessageContentPartRefusalType Type { get; } = "refusal"; - - public string Refusal { get; } - - internal IDictionary SerializedAdditionalRawData + internal InternalChatCompletionRequestMessageContentPartRefusal(IDictionary additionalBinaryDataProperties) : base(additionalBinaryDataProperties) { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusalType.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusalType.cs deleted file mode 100644 index 1096b7c85..000000000 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartRefusalType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionRequestMessageContentPartRefusalType : IEquatable - { - private readonly string _value; - private const string RefusalValue = "refusal"; - - public InternalChatCompletionRequestMessageContentPartRefusalType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionRequestMessageContentPartRefusalType Refusal { get; } = new InternalChatCompletionRequestMessageContentPartRefusalType(RefusalValue); - - public static bool operator ==(InternalChatCompletionRequestMessageContentPartRefusalType left, InternalChatCompletionRequestMessageContentPartRefusalType right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionRequestMessageContentPartRefusalType left, InternalChatCompletionRequestMessageContentPartRefusalType right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionRequestMessageContentPartRefusalType(string value) => new InternalChatCompletionRequestMessageContentPartRefusalType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionRequestMessageContentPartRefusalType other && Equals(other); - - public bool Equals(InternalChatCompletionRequestMessageContentPartRefusalType 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/InternalChatCompletionRequestMessageContentPartText.Serialization.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs index 166dcc2a3..50589d489 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,10 +13,6 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionRequestMessageContentPartText : IJsonModel { - internal InternalChatCompletionRequestMessageContentPartText() - { - } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -24,47 +20,21 @@ void IJsonModel.Write(Utf8J writer.WriteEndObject(); } - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") { throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartText)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("text") != true) - { - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } + base.JsonModelWriteCore(writer, options); } - InternalChatCompletionRequestMessageContentPartText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + InternalChatCompletionRequestMessageContentPartText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartText)JsonModelCreateCore(ref reader, options); - protected virtual InternalChatCompletionRequestMessageContentPartText JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -81,43 +51,34 @@ internal static InternalChatCompletionRequestMessageContentPartText DeserializeI { return null; } - InternalChatCompletionRequestMessageContentPartTextType @type = default; - string text = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("type"u8)) - { - @type = new InternalChatCompletionRequestMessageContentPartTextType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("text"u8)) - { - text = prop.Value.GetString(); - continue; - } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatCompletionRequestMessageContentPartText(@type, text, additionalBinaryDataProperties); + return new InternalChatCompletionRequestMessageContentPartText(additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionRequestMessageContentPartText)} does not support writing '{options.Format}' format."); } } - InternalChatCompletionRequestMessageContentPartText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + InternalChatCompletionRequestMessageContentPartText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatCompletionRequestMessageContentPartText)PersistableModelCreateCore(data, options); - protected virtual InternalChatCompletionRequestMessageContentPartText PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -133,21 +94,5 @@ protected virtual InternalChatCompletionRequestMessageContentPartText Persistabl } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionRequestMessageContentPartText internalChatCompletionRequestMessageContentPartText) - { - if (internalChatCompletionRequestMessageContentPartText == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionRequestMessageContentPartText, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionRequestMessageContentPartText(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionRequestMessageContentPartText(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.cs index e97d6a9c4..4efab5b41 100644 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.cs +++ b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartText.cs @@ -4,36 +4,17 @@ using System; using System.Collections.Generic; -using OpenAI; namespace OpenAI.Chat { - internal partial class InternalChatCompletionRequestMessageContentPartText + internal partial class InternalChatCompletionRequestMessageContentPartText : ChatMessageContentPart { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalChatCompletionRequestMessageContentPartText(string text) + public InternalChatCompletionRequestMessageContentPartText() { - Argument.AssertNotNull(text, nameof(text)); - - Text = text; } - internal InternalChatCompletionRequestMessageContentPartText(InternalChatCompletionRequestMessageContentPartTextType @type, string text, IDictionary additionalBinaryDataProperties) - { - Type = @type; - Text = text; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalChatCompletionRequestMessageContentPartTextType Type { get; } = "text"; - - public string Text { get; } - - internal IDictionary SerializedAdditionalRawData + internal InternalChatCompletionRequestMessageContentPartText(IDictionary additionalBinaryDataProperties) : base(additionalBinaryDataProperties) { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; } } } diff --git a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartTextType.cs b/src/Generated/Models/InternalChatCompletionRequestMessageContentPartTextType.cs deleted file mode 100644 index 5f8e3c80d..000000000 --- a/src/Generated/Models/InternalChatCompletionRequestMessageContentPartTextType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionRequestMessageContentPartTextType : IEquatable - { - private readonly string _value; - private const string TextValue = "text"; - - public InternalChatCompletionRequestMessageContentPartTextType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionRequestMessageContentPartTextType Text { get; } = new InternalChatCompletionRequestMessageContentPartTextType(TextValue); - - public static bool operator ==(InternalChatCompletionRequestMessageContentPartTextType left, InternalChatCompletionRequestMessageContentPartTextType right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionRequestMessageContentPartTextType left, InternalChatCompletionRequestMessageContentPartTextType right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionRequestMessageContentPartTextType(string value) => new InternalChatCompletionRequestMessageContentPartTextType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionRequestMessageContentPartTextType other && Equals(other); - - public bool Equals(InternalChatCompletionRequestMessageContentPartTextType 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/InternalChatCompletionResponseMessage.Serialization.cs b/src/Generated/Models/InternalChatCompletionResponseMessage.Serialization.cs index 421c7a66f..161b6aa9f 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessage.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Chat { internal partial class InternalChatCompletionResponseMessage : IJsonModel { - internal InternalChatCompletionResponseMessage() + internal InternalChatCompletionResponseMessage() : this(null, null, null, null, default, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -43,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("refusal"u8); } } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(ToolCalls) && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) { writer.WritePropertyName("tool_calls"u8); @@ -90,6 +92,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("function_call"u8); writer.WriteObjectValue(FunctionCall, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -113,6 +116,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionResponseMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionResponseMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -207,6 +211,7 @@ internal static InternalChatCompletionResponseMessage DeserializeInternalChatCom functionCall = ChatFunctionCall.DeserializeChatFunctionCall(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionResponseMessage( @@ -222,13 +227,14 @@ internal static InternalChatCompletionResponseMessage DeserializeInternalChatCom BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionResponseMessage)} does not support writing '{options.Format}' format."); } @@ -236,6 +242,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionResponseMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionResponseMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -252,21 +259,5 @@ protected virtual InternalChatCompletionResponseMessage PersistableModelCreateCo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionResponseMessage internalChatCompletionResponseMessage) - { - if (internalChatCompletionResponseMessage == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionResponseMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionResponseMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionResponseMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionResponseMessage.cs b/src/Generated/Models/InternalChatCompletionResponseMessage.cs index fc63a5473..463f78ea7 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessage.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessage.cs @@ -12,23 +12,24 @@ internal partial class InternalChatCompletionResponseMessage { private protected IDictionary _additionalBinaryDataProperties; - internal InternalChatCompletionResponseMessage(string refusal, ChatMessageContent content) + internal InternalChatCompletionResponseMessage(string refusal, ChatMessageRole role, ChatMessageContent content) { + // Plugin customization: ensure initialization of collections Refusal = refusal; ToolCalls = new ChangeTrackingList(); Annotations = new ChangeTrackingList(); - // Plugin customization: ensure initialization of collection + Role = role; Content = content ?? new ChatMessageContent(); } internal InternalChatCompletionResponseMessage(string refusal, IReadOnlyList toolCalls, IList annotations, ChatOutputAudio audio, ChatMessageRole role, ChatMessageContent content, ChatFunctionCall functionCall, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Refusal = refusal; - ToolCalls = toolCalls; - Annotations = annotations; + ToolCalls = toolCalls ?? new ChangeTrackingList(); + Annotations = annotations ?? new ChangeTrackingList(); Audio = audio; Role = role; - // Plugin customization: ensure initialization of collection Content = content ?? new ChatMessageContent(); FunctionCall = functionCall; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationType.cs b/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationType.cs deleted file mode 100644 index 312ff7502..000000000 --- a/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionResponseMessageAnnotationType : IEquatable - { - private readonly string _value; - private const string UrlCitationValue = "url_citation"; - - public InternalChatCompletionResponseMessageAnnotationType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionResponseMessageAnnotationType UrlCitation { get; } = new InternalChatCompletionResponseMessageAnnotationType(UrlCitationValue); - - public static bool operator ==(InternalChatCompletionResponseMessageAnnotationType left, InternalChatCompletionResponseMessageAnnotationType right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionResponseMessageAnnotationType left, InternalChatCompletionResponseMessageAnnotationType right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionResponseMessageAnnotationType(string value) => new InternalChatCompletionResponseMessageAnnotationType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionResponseMessageAnnotationType other && Equals(other); - - public bool Equals(InternalChatCompletionResponseMessageAnnotationType 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/InternalChatCompletionResponseMessageAnnotationUrlCitation.Serialization.cs b/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationUrlCitation.Serialization.cs index 27b7b369f..eb3f9e217 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationUrlCitation.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessageAnnotationUrlCitation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("title"u8); writer.WriteStringValue(Title); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionResponseMessageAnnotationUrlCitation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionResponseMessageAnnotationUrlCitation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,6 +121,7 @@ internal static InternalChatCompletionResponseMessageAnnotationUrlCitation Deser title = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionResponseMessageAnnotationUrlCitation(endIndex, startIndex, url, title, additionalBinaryDataProperties); @@ -125,13 +129,14 @@ internal static InternalChatCompletionResponseMessageAnnotationUrlCitation Deser BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionResponseMessageAnnotationUrlCitation)} does not support writing '{options.Format}' format."); } @@ -139,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionResponseMessageAnnotationUrlCitation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionResponseMessageAnnotationUrlCitation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +161,5 @@ protected virtual InternalChatCompletionResponseMessageAnnotationUrlCitation Per } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionResponseMessageAnnotationUrlCitation internalChatCompletionResponseMessageAnnotationUrlCitation) - { - if (internalChatCompletionResponseMessageAnnotationUrlCitation == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionResponseMessageAnnotationUrlCitation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionResponseMessageAnnotationUrlCitation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionResponseMessageAnnotationUrlCitation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.Serialization.cs b/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.Serialization.cs index 877fb2c5d..f029aca59 100644 --- a/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionResponseMessageFunctionCall.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Jso writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("arguments"u8); writer.WriteStringValue(Arguments); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionResponseMessageFunctionCall IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionResponseMessageFunctionCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static InternalChatCompletionResponseMessageFunctionCall DeserializeInt arguments = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionResponseMessageFunctionCall(name, arguments, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static InternalChatCompletionResponseMessageFunctionCall DeserializeInt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionResponseMessageFunctionCall)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionResponseMessageFunctionCall IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionResponseMessageFunctionCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalChatCompletionResponseMessageFunctionCall PersistableM } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionResponseMessageFunctionCall internalChatCompletionResponseMessageFunctionCall) - { - if (internalChatCompletionResponseMessageFunctionCall == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionResponseMessageFunctionCall, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionResponseMessageFunctionCall(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionResponseMessageFunctionCall(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionResponseMessageRole.cs b/src/Generated/Models/InternalChatCompletionResponseMessageRole.cs deleted file mode 100644 index 69b375aaf..000000000 --- a/src/Generated/Models/InternalChatCompletionResponseMessageRole.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionResponseMessageRole : IEquatable - { - private readonly string _value; - private const string AssistantValue = "assistant"; - - public InternalChatCompletionResponseMessageRole(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionResponseMessageRole Assistant { get; } = new InternalChatCompletionResponseMessageRole(AssistantValue); - - public static bool operator ==(InternalChatCompletionResponseMessageRole left, InternalChatCompletionResponseMessageRole right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionResponseMessageRole left, InternalChatCompletionResponseMessageRole right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionResponseMessageRole(string value) => new InternalChatCompletionResponseMessageRole(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionResponseMessageRole other && Equals(other); - - public bool Equals(InternalChatCompletionResponseMessageRole 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/InternalChatCompletionStreamOptions.Serialization.cs b/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs index 114129354..86e8e0ea4 100644 --- a/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionStreamOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("include_usage"u8); writer.WriteBooleanValue(IncludeUsage.Value); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionStreamOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionStreamOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalChatCompletionStreamOptions DeserializeInternalChatCompl includeUsage = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionStreamOptions(includeUsage, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalChatCompletionStreamOptions DeserializeInternalChatCompl BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionStreamOptions)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionStreamOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionStreamOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalChatCompletionStreamOptions PersistableModelCreateCore } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionStreamOptions internalChatCompletionStreamOptions) - { - if (internalChatCompletionStreamOptions == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionStreamOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionStreamOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionStreamOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.Serialization.cs b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.Serialization.cs index 7d70eb599..77e16d083 100644 --- a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.Serialization.cs +++ b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("function_call"u8); writer.WriteObjectValue(FunctionCall, options); } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(ToolCalls) && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) { writer.WritePropertyName("tool_calls"u8); @@ -57,11 +59,13 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("role"u8); writer.WriteStringValue(Role.Value.ToSerialString()); } + // Plugin customization: add Content.IsInnerCollectionDefined() check if (Optional.IsDefined(Content) && Content.IsInnerCollectionDefined() && _additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); SerializeContentValue(writer, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -85,6 +89,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalChatCompletionStreamResponseDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionStreamResponseDelta JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -167,6 +172,7 @@ internal static InternalChatCompletionStreamResponseDelta DeserializeInternalCha DeserializeContentValue(prop, ref content); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalChatCompletionStreamResponseDelta( @@ -181,13 +187,14 @@ internal static InternalChatCompletionStreamResponseDelta DeserializeInternalCha BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatCompletionStreamResponseDelta)} does not support writing '{options.Format}' format."); } @@ -195,6 +202,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatCompletionStreamResponseDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalChatCompletionStreamResponseDelta PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -211,21 +219,5 @@ protected virtual InternalChatCompletionStreamResponseDelta PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatCompletionStreamResponseDelta internalChatCompletionStreamResponseDelta) - { - if (internalChatCompletionStreamResponseDelta == null) - { - return null; - } - return BinaryContent.Create(internalChatCompletionStreamResponseDelta, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatCompletionStreamResponseDelta(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatCompletionStreamResponseDelta(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs index 9202a8017..2a5c842f2 100644 --- a/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs +++ b/src/Generated/Models/InternalChatCompletionStreamResponseDelta.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Chat { @@ -11,14 +12,18 @@ internal partial class InternalChatCompletionStreamResponseDelta { private protected IDictionary _additionalBinaryDataProperties; + internal InternalChatCompletionStreamResponseDelta() : this(null, null, null, null, default, null, null) + { + } + internal InternalChatCompletionStreamResponseDelta(StreamingChatOutputAudioUpdate audio, StreamingChatFunctionCallUpdate functionCall, IReadOnlyList toolCalls, string refusal, ChatMessageRole? role, ChatMessageContent content, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Audio = audio; FunctionCall = functionCall; - ToolCalls = toolCalls; + ToolCalls = toolCalls ?? new ChangeTrackingList(); Refusal = refusal; Role = role; - // Plugin customization: ensure initialization of collection Content = content ?? new ChatMessageContent(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalChatCompletionStreamResponseDeltaRole.cs b/src/Generated/Models/InternalChatCompletionStreamResponseDeltaRole.cs deleted file mode 100644 index 666eced49..000000000 --- a/src/Generated/Models/InternalChatCompletionStreamResponseDeltaRole.cs +++ /dev/null @@ -1,53 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalChatCompletionStreamResponseDeltaRole : IEquatable - { - private readonly string _value; - private const string DeveloperValue = "developer"; - private const string SystemValue = "system"; - private const string UserValue = "user"; - private const string AssistantValue = "assistant"; - private const string ToolValue = "tool"; - - public InternalChatCompletionStreamResponseDeltaRole(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalChatCompletionStreamResponseDeltaRole Developer { get; } = new InternalChatCompletionStreamResponseDeltaRole(DeveloperValue); - - public static InternalChatCompletionStreamResponseDeltaRole System { get; } = new InternalChatCompletionStreamResponseDeltaRole(SystemValue); - - public static InternalChatCompletionStreamResponseDeltaRole User { get; } = new InternalChatCompletionStreamResponseDeltaRole(UserValue); - - public static InternalChatCompletionStreamResponseDeltaRole Assistant { get; } = new InternalChatCompletionStreamResponseDeltaRole(AssistantValue); - - public static InternalChatCompletionStreamResponseDeltaRole Tool { get; } = new InternalChatCompletionStreamResponseDeltaRole(ToolValue); - - public static bool operator ==(InternalChatCompletionStreamResponseDeltaRole left, InternalChatCompletionStreamResponseDeltaRole right) => left.Equals(right); - - public static bool operator !=(InternalChatCompletionStreamResponseDeltaRole left, InternalChatCompletionStreamResponseDeltaRole right) => !left.Equals(right); - - public static implicit operator InternalChatCompletionStreamResponseDeltaRole(string value) => new InternalChatCompletionStreamResponseDeltaRole(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalChatCompletionStreamResponseDeltaRole other && Equals(other); - - public bool Equals(InternalChatCompletionStreamResponseDeltaRole 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/InternalChatOutputPredictionContent.Serialization.cs b/src/Generated/Models/InternalChatOutputPredictionContent.Serialization.cs index 166949e74..96af19cf1 100644 --- a/src/Generated/Models/InternalChatOutputPredictionContent.Serialization.cs +++ b/src/Generated/Models/InternalChatOutputPredictionContent.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Chat { internal partial class InternalChatOutputPredictionContent : IJsonModel { - internal InternalChatOutputPredictionContent() + internal InternalChatOutputPredictionContent() : this(InternalChatOutputPredictionKind.StaticContent, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalChatOutputPredictionContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatOutputPredictionContent)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatOutputPrediction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,14 @@ internal static InternalChatOutputPredictionContent DeserializeInternalChatOutpu { return null; } - InternalChatOutputPredictionKind @type = default; + InternalChatOutputPredictionKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); ChatMessageContent content = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalChatOutputPredictionKind(prop.Value.GetString()); + kind = new InternalChatOutputPredictionKind(prop.Value.GetString()); continue; } if (prop.NameEquals("content"u8)) @@ -73,20 +75,22 @@ internal static InternalChatOutputPredictionContent DeserializeInternalChatOutpu DeserializeContentValue(prop, ref content); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalChatOutputPredictionContent(@type, additionalBinaryDataProperties, content); + return new InternalChatOutputPredictionContent(kind, additionalBinaryDataProperties, content); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalChatOutputPredictionContent)} does not support writing '{options.Format}' format."); } @@ -94,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalChatOutputPredictionContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatOutputPredictionContent)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatOutputPrediction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +115,5 @@ protected override ChatOutputPrediction PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatOutputPredictionContent internalChatOutputPredictionContent) - { - if (internalChatOutputPredictionContent == null) - { - return null; - } - return BinaryContent.Create(internalChatOutputPredictionContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatOutputPredictionContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatOutputPredictionContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalChatOutputPredictionContent.cs b/src/Generated/Models/InternalChatOutputPredictionContent.cs index 7b56552b5..e498e96bf 100644 --- a/src/Generated/Models/InternalChatOutputPredictionContent.cs +++ b/src/Generated/Models/InternalChatOutputPredictionContent.cs @@ -12,15 +12,15 @@ internal partial class InternalChatOutputPredictionContent : ChatOutputPredictio { public InternalChatOutputPredictionContent(ChatMessageContent content) : base(InternalChatOutputPredictionKind.StaticContent) { + // Plugin customization: ensure initialization of collections Argument.AssertNotNull(content, nameof(content)); - // Plugin customization: ensure initialization of collection Content = content ?? new ChatMessageContent(); } - internal InternalChatOutputPredictionContent(InternalChatOutputPredictionKind @type, IDictionary additionalBinaryDataProperties, ChatMessageContent content) : base(@type, additionalBinaryDataProperties) + internal InternalChatOutputPredictionContent(InternalChatOutputPredictionKind kind, IDictionary additionalBinaryDataProperties, ChatMessageContent content) : base(kind, additionalBinaryDataProperties) { - // Plugin customization: ensure initialization of collection + // Plugin customization: ensure initialization of collections Content = content ?? new ChatMessageContent(); } } diff --git a/src/Generated/Models/InternalChatOutputPredictionKind.cs b/src/Generated/Models/InternalChatOutputPredictionKind.cs index 051d77c6c..27097ce95 100644 --- a/src/Generated/Models/InternalChatOutputPredictionKind.cs +++ b/src/Generated/Models/InternalChatOutputPredictionKind.cs @@ -11,7 +11,7 @@ namespace OpenAI.Chat internal readonly partial struct InternalChatOutputPredictionKind : IEquatable { private readonly string _value; - private const string ContentValue = "content"; + private const string StaticContentValue = "content"; public InternalChatOutputPredictionKind(string value) { @@ -20,6 +20,8 @@ public InternalChatOutputPredictionKind(string value) _value = value; } + internal static InternalChatOutputPredictionKind StaticContent { get; } = new InternalChatOutputPredictionKind(StaticContentValue); + public static bool operator ==(InternalChatOutputPredictionKind left, InternalChatOutputPredictionKind right) => left.Equals(right); public static bool operator !=(InternalChatOutputPredictionKind left, InternalChatOutputPredictionKind right) => !left.Equals(right); diff --git a/src/Generated/Models/InternalChatResponseFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalChatResponseFormatJsonObject.Serialization.cs deleted file mode 100644 index 577c68ce8..000000000 --- a/src/Generated/Models/InternalChatResponseFormatJsonObject.Serialization.cs +++ /dev/null @@ -1,108 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Chat -{ - internal partial class InternalChatResponseFormatJsonObject : IJsonModel - { - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalChatResponseFormatJsonObject)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalChatResponseFormatJsonObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatResponseFormatJsonObject)JsonModelCreateCore(ref reader, options); - - protected override ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalChatResponseFormatJsonObject)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalChatResponseFormatJsonObject(document.RootElement, options); - } - - internal static InternalChatResponseFormatJsonObject DeserializeInternalChatResponseFormatJsonObject(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "json_object"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalChatResponseFormatJsonObject(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalChatResponseFormatJsonObject)} does not support writing '{options.Format}' format."); - } - } - - InternalChatResponseFormatJsonObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatResponseFormatJsonObject)PersistableModelCreateCore(data, options); - - protected override ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalChatResponseFormatJsonObject(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalChatResponseFormatJsonObject)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatResponseFormatJsonObject internalChatResponseFormatJsonObject) - { - if (internalChatResponseFormatJsonObject == null) - { - return null; - } - return BinaryContent.Create(internalChatResponseFormatJsonObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatResponseFormatJsonObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatResponseFormatJsonObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalChatResponseFormatJsonObject.cs b/src/Generated/Models/InternalChatResponseFormatJsonObject.cs deleted file mode 100644 index 28d430907..000000000 --- a/src/Generated/Models/InternalChatResponseFormatJsonObject.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Chat -{ - internal partial class InternalChatResponseFormatJsonObject : ChatResponseFormat - { - public InternalChatResponseFormatJsonObject() : base("json_object") - { - } - - internal InternalChatResponseFormatJsonObject(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalChatResponseFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalChatResponseFormatJsonSchema.Serialization.cs deleted file mode 100644 index 47a5db24d..000000000 --- a/src/Generated/Models/InternalChatResponseFormatJsonSchema.Serialization.cs +++ /dev/null @@ -1,124 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; -using OpenAI.Internal; - -namespace OpenAI.Chat -{ - internal partial class InternalChatResponseFormatJsonSchema : IJsonModel - { - internal InternalChatResponseFormatJsonSchema() - { - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalChatResponseFormatJsonSchema)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("json_schema") != true) - { - writer.WritePropertyName("json_schema"u8); - writer.WriteObjectValue(JsonSchema, options); - } - } - - InternalChatResponseFormatJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatResponseFormatJsonSchema)JsonModelCreateCore(ref reader, options); - - protected override ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalChatResponseFormatJsonSchema)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalChatResponseFormatJsonSchema(document.RootElement, options); - } - - internal static InternalChatResponseFormatJsonSchema DeserializeInternalChatResponseFormatJsonSchema(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "json_schema"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalResponseFormatJsonSchemaJsonSchema jsonSchema = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("json_schema"u8)) - { - jsonSchema = InternalResponseFormatJsonSchemaJsonSchema.DeserializeInternalResponseFormatJsonSchemaJsonSchema(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalChatResponseFormatJsonSchema(@type, additionalBinaryDataProperties, jsonSchema); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalChatResponseFormatJsonSchema)} does not support writing '{options.Format}' format."); - } - } - - InternalChatResponseFormatJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatResponseFormatJsonSchema)PersistableModelCreateCore(data, options); - - protected override ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalChatResponseFormatJsonSchema(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalChatResponseFormatJsonSchema)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatResponseFormatJsonSchema internalChatResponseFormatJsonSchema) - { - if (internalChatResponseFormatJsonSchema == null) - { - return null; - } - return BinaryContent.Create(internalChatResponseFormatJsonSchema, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatResponseFormatJsonSchema(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatResponseFormatJsonSchema(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalChatResponseFormatJsonSchema.cs b/src/Generated/Models/InternalChatResponseFormatJsonSchema.cs deleted file mode 100644 index 42c9a120f..000000000 --- a/src/Generated/Models/InternalChatResponseFormatJsonSchema.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; -using OpenAI.Internal; - -namespace OpenAI.Chat -{ - internal partial class InternalChatResponseFormatJsonSchema : ChatResponseFormat - { - public InternalChatResponseFormatJsonSchema(InternalResponseFormatJsonSchemaJsonSchema jsonSchema) : base("json_schema") - { - Argument.AssertNotNull(jsonSchema, nameof(jsonSchema)); - - JsonSchema = jsonSchema; - } - - internal InternalChatResponseFormatJsonSchema(string @type, IDictionary additionalBinaryDataProperties, InternalResponseFormatJsonSchemaJsonSchema jsonSchema) : base(@type, additionalBinaryDataProperties) - { - JsonSchema = jsonSchema; - } - - public InternalResponseFormatJsonSchemaJsonSchema JsonSchema { get; } - } -} diff --git a/src/Generated/Models/InternalChatResponseFormatText.Serialization.cs b/src/Generated/Models/InternalChatResponseFormatText.Serialization.cs deleted file mode 100644 index dbf3ffada..000000000 --- a/src/Generated/Models/InternalChatResponseFormatText.Serialization.cs +++ /dev/null @@ -1,108 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Chat -{ - internal partial class InternalChatResponseFormatText : IJsonModel - { - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalChatResponseFormatText)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalChatResponseFormatText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalChatResponseFormatText)JsonModelCreateCore(ref reader, options); - - protected override ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalChatResponseFormatText)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalChatResponseFormatText(document.RootElement, options); - } - - internal static InternalChatResponseFormatText DeserializeInternalChatResponseFormatText(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "text"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalChatResponseFormatText(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalChatResponseFormatText)} does not support writing '{options.Format}' format."); - } - } - - InternalChatResponseFormatText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalChatResponseFormatText)PersistableModelCreateCore(data, options); - - protected override ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalChatResponseFormatText(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalChatResponseFormatText)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalChatResponseFormatText internalChatResponseFormatText) - { - if (internalChatResponseFormatText == null) - { - return null; - } - return BinaryContent.Create(internalChatResponseFormatText, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalChatResponseFormatText(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalChatResponseFormatText(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalChatResponseFormatText.cs b/src/Generated/Models/InternalChatResponseFormatText.cs deleted file mode 100644 index 4705b5972..000000000 --- a/src/Generated/Models/InternalChatResponseFormatText.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Chat -{ - internal partial class InternalChatResponseFormatText : ChatResponseFormat - { - public InternalChatResponseFormatText() : base("text") - { - } - - internal InternalChatResponseFormatText(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalChunkingStrategyRequestParam.Serialization.cs new file mode 100644 index 000000000..445bf0e9a --- /dev/null +++ b/src/Generated/Models/InternalChunkingStrategyRequestParam.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + [PersistableModelProxy(typeof(InternalUnknownChunkingStrategyRequestParamProxy))] + internal abstract partial class InternalChunkingStrategyRequestParam : IJsonModel + { + internal InternalChunkingStrategyRequestParam() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChunkingStrategyRequestParam)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalChunkingStrategyRequestParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalChunkingStrategyRequestParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChunkingStrategyRequestParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChunkingStrategyRequestParam(document.RootElement, options); + } + + internal static InternalChunkingStrategyRequestParam DeserializeInternalChunkingStrategyRequestParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "auto": + return InternalAutoChunkingStrategyRequestParam.DeserializeInternalAutoChunkingStrategyRequestParam(element, options); + case "static": + return InternalStaticChunkingStrategyRequestParam.DeserializeInternalStaticChunkingStrategyRequestParam(element, options); + } + } + return InternalUnknownChunkingStrategyRequestParamProxy.DeserializeInternalUnknownChunkingStrategyRequestParamProxy(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalChunkingStrategyRequestParam)} does not support writing '{options.Format}' format."); + } + } + + InternalChunkingStrategyRequestParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalChunkingStrategyRequestParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChunkingStrategyRequestParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChunkingStrategyRequestParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalChunkingStrategyRequestParam.cs b/src/Generated/Models/InternalChunkingStrategyRequestParam.cs new file mode 100644 index 000000000..33a8dd37b --- /dev/null +++ b/src/Generated/Models/InternalChunkingStrategyRequestParam.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal abstract partial class InternalChunkingStrategyRequestParam + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalChunkingStrategyRequestParam(InternalChunkingStrategyRequestParamType kind) + { + Kind = kind; + } + + internal InternalChunkingStrategyRequestParam(InternalChunkingStrategyRequestParamType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalChunkingStrategyRequestParamType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalChunkingStrategyRequestParamType.cs b/src/Generated/Models/InternalChunkingStrategyRequestParamType.cs new file mode 100644 index 000000000..9048bf279 --- /dev/null +++ b/src/Generated/Models/InternalChunkingStrategyRequestParamType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal readonly partial struct InternalChunkingStrategyRequestParamType : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + private const string StaticValue = "static"; + + public InternalChunkingStrategyRequestParamType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalChunkingStrategyRequestParamType Auto { get; } = new InternalChunkingStrategyRequestParamType(AutoValue); + + internal static InternalChunkingStrategyRequestParamType Static { get; } = new InternalChunkingStrategyRequestParamType(StaticValue); + + public static bool operator ==(InternalChunkingStrategyRequestParamType left, InternalChunkingStrategyRequestParamType right) => left.Equals(right); + + public static bool operator !=(InternalChunkingStrategyRequestParamType left, InternalChunkingStrategyRequestParamType right) => !left.Equals(right); + + public static implicit operator InternalChunkingStrategyRequestParamType(string value) => new InternalChunkingStrategyRequestParamType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalChunkingStrategyRequestParamType other && Equals(other); + + public bool Equals(InternalChunkingStrategyRequestParamType 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/InternalChunkingStrategyResponseParam.Serialization.cs b/src/Generated/Models/InternalChunkingStrategyResponseParam.Serialization.cs new file mode 100644 index 000000000..4e2f19ed7 --- /dev/null +++ b/src/Generated/Models/InternalChunkingStrategyResponseParam.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + [PersistableModelProxy(typeof(InternalUnknownChunkingStrategyResponseParam))] + internal abstract partial class InternalChunkingStrategyResponseParam : IJsonModel + { + internal InternalChunkingStrategyResponseParam() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChunkingStrategyResponseParam)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalChunkingStrategyResponseParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalChunkingStrategyResponseParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChunkingStrategyResponseParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChunkingStrategyResponseParam(document.RootElement, options); + } + + internal static InternalChunkingStrategyResponseParam DeserializeInternalChunkingStrategyResponseParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "static": + return InternalStaticChunkingStrategyResponseParam.DeserializeInternalStaticChunkingStrategyResponseParam(element, options); + case "other": + return InternalOtherChunkingStrategyResponseParam.DeserializeInternalOtherChunkingStrategyResponseParam(element, options); + } + } + return InternalUnknownChunkingStrategyResponseParam.DeserializeInternalUnknownChunkingStrategyResponseParam(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalChunkingStrategyResponseParam)} does not support writing '{options.Format}' format."); + } + } + + InternalChunkingStrategyResponseParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalChunkingStrategyResponseParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChunkingStrategyResponseParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChunkingStrategyResponseParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalChunkingStrategyResponseParam.cs b/src/Generated/Models/InternalChunkingStrategyResponseParam.cs new file mode 100644 index 000000000..6ef51ab52 --- /dev/null +++ b/src/Generated/Models/InternalChunkingStrategyResponseParam.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal abstract partial class InternalChunkingStrategyResponseParam + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalChunkingStrategyResponseParam(InternalChunkingStrategyResponseParamType kind) + { + Kind = kind; + } + + internal InternalChunkingStrategyResponseParam(InternalChunkingStrategyResponseParamType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalChunkingStrategyResponseParamType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalChunkingStrategyResponseParamType.cs b/src/Generated/Models/InternalChunkingStrategyResponseParamType.cs new file mode 100644 index 000000000..927c85292 --- /dev/null +++ b/src/Generated/Models/InternalChunkingStrategyResponseParamType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal readonly partial struct InternalChunkingStrategyResponseParamType : IEquatable + { + private readonly string _value; + private const string StaticValue = "static"; + private const string OtherValue = "other"; + + public InternalChunkingStrategyResponseParamType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalChunkingStrategyResponseParamType Static { get; } = new InternalChunkingStrategyResponseParamType(StaticValue); + + internal static InternalChunkingStrategyResponseParamType Other { get; } = new InternalChunkingStrategyResponseParamType(OtherValue); + + public static bool operator ==(InternalChunkingStrategyResponseParamType left, InternalChunkingStrategyResponseParamType right) => left.Equals(right); + + public static bool operator !=(InternalChunkingStrategyResponseParamType left, InternalChunkingStrategyResponseParamType right) => !left.Equals(right); + + public static implicit operator InternalChunkingStrategyResponseParamType(string value) => new InternalChunkingStrategyResponseParamType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalChunkingStrategyResponseParamType other && Equals(other); + + public bool Equals(InternalChunkingStrategyResponseParamType 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/InternalCodeInterpreterFileOutput.Serialization.cs b/src/Generated/Models/InternalCodeInterpreterFileOutput.Serialization.cs new file mode 100644 index 000000000..51fae99cb --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterFileOutput.Serialization.cs @@ -0,0 +1,153 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterFileOutput : IJsonModel + { + internal InternalCodeInterpreterFileOutput() : this(null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterFileOutput)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("files") != true) + { + writer.WritePropertyName("files"u8); + writer.WriteStartArray(); + foreach (InternalCodeInterpreterFileOutputFile item in Files) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCodeInterpreterFileOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCodeInterpreterFileOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterFileOutput)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCodeInterpreterFileOutput(document.RootElement, options); + } + + internal static InternalCodeInterpreterFileOutput DeserializeInternalCodeInterpreterFileOutput(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + IList files = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("files"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalCodeInterpreterFileOutputFile.DeserializeInternalCodeInterpreterFileOutputFile(item, options)); + } + files = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCodeInterpreterFileOutput(kind, files, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCodeInterpreterFileOutput)} does not support writing '{options.Format}' format."); + } + } + + InternalCodeInterpreterFileOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCodeInterpreterFileOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCodeInterpreterFileOutput(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCodeInterpreterFileOutput)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterFileOutput.cs b/src/Generated/Models/InternalCodeInterpreterFileOutput.cs new file mode 100644 index 000000000..ed0802417 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterFileOutput.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterFileOutput + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalCodeInterpreterFileOutput(IEnumerable files) + { + Argument.AssertNotNull(files, nameof(files)); + + Files = files.ToList(); + } + + internal InternalCodeInterpreterFileOutput(string kind, IList files, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Kind = kind; + Files = files ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "files"; + + internal IList Files { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterFileOutputFile.Serialization.cs b/src/Generated/Models/InternalCodeInterpreterFileOutputFile.Serialization.cs new file mode 100644 index 000000000..d4d3c3db0 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterFileOutputFile.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterFileOutputFile : IJsonModel + { + internal InternalCodeInterpreterFileOutputFile() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterFileOutputFile)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("mime_type") != true) + { + writer.WritePropertyName("mime_type"u8); + writer.WriteStringValue(MimeType); + } + if (_additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCodeInterpreterFileOutputFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCodeInterpreterFileOutputFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterFileOutputFile)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCodeInterpreterFileOutputFile(document.RootElement, options); + } + + internal static InternalCodeInterpreterFileOutputFile DeserializeInternalCodeInterpreterFileOutputFile(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string mimeType = default; + string fileId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("mime_type"u8)) + { + mimeType = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file_id"u8)) + { + fileId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCodeInterpreterFileOutputFile(mimeType, fileId, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCodeInterpreterFileOutputFile)} does not support writing '{options.Format}' format."); + } + } + + InternalCodeInterpreterFileOutputFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCodeInterpreterFileOutputFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCodeInterpreterFileOutputFile(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCodeInterpreterFileOutputFile)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterFileOutputFile.cs b/src/Generated/Models/InternalCodeInterpreterFileOutputFile.cs new file mode 100644 index 000000000..f37f61104 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterFileOutputFile.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterFileOutputFile + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalCodeInterpreterFileOutputFile(string mimeType, string fileId) + { + Argument.AssertNotNull(mimeType, nameof(mimeType)); + Argument.AssertNotNull(fileId, nameof(fileId)); + + MimeType = mimeType; + FileId = fileId; + } + + internal InternalCodeInterpreterFileOutputFile(string mimeType, string fileId, IDictionary additionalBinaryDataProperties) + { + MimeType = mimeType; + FileId = fileId; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string MimeType { get; set; } + + public string FileId { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterTextOutput.Serialization.cs b/src/Generated/Models/InternalCodeInterpreterTextOutput.Serialization.cs new file mode 100644 index 000000000..b48918080 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterTextOutput.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterTextOutput : IJsonModel + { + internal InternalCodeInterpreterTextOutput() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterTextOutput)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("logs") != true) + { + writer.WritePropertyName("logs"u8); + writer.WriteStringValue(Logs); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCodeInterpreterTextOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCodeInterpreterTextOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterTextOutput)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCodeInterpreterTextOutput(document.RootElement, options); + } + + internal static InternalCodeInterpreterTextOutput DeserializeInternalCodeInterpreterTextOutput(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + string logs = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logs"u8)) + { + logs = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCodeInterpreterTextOutput(kind, logs, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCodeInterpreterTextOutput)} does not support writing '{options.Format}' format."); + } + } + + InternalCodeInterpreterTextOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCodeInterpreterTextOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCodeInterpreterTextOutput(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCodeInterpreterTextOutput)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterTextOutput.cs b/src/Generated/Models/InternalCodeInterpreterTextOutput.cs new file mode 100644 index 000000000..70c47b111 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterTextOutput.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterTextOutput + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalCodeInterpreterTextOutput(string logs) + { + Argument.AssertNotNull(logs, nameof(logs)); + + Logs = logs; + } + + internal InternalCodeInterpreterTextOutput(string kind, string logs, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Logs = logs; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "logs"; + + public string Logs { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterTool.Serialization.cs b/src/Generated/Models/InternalCodeInterpreterTool.Serialization.cs new file mode 100644 index 000000000..e5e977273 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterTool.Serialization.cs @@ -0,0 +1,126 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterTool : IJsonModel + { + internal InternalCodeInterpreterTool() : this(InternalToolType.CodeInterpreter, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("container") != true) + { + writer.WritePropertyName("container"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Container); +#else + using (JsonDocument document = JsonDocument.Parse(Container)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalCodeInterpreterTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalCodeInterpreterTool)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCodeInterpreterTool(document.RootElement, options); + } + + internal static InternalCodeInterpreterTool DeserializeInternalCodeInterpreterTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + BinaryData container = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("container"u8)) + { + container = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCodeInterpreterTool(kind, additionalBinaryDataProperties, container); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCodeInterpreterTool)} does not support writing '{options.Format}' format."); + } + } + + InternalCodeInterpreterTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalCodeInterpreterTool)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCodeInterpreterTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCodeInterpreterTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterTool.cs b/src/Generated/Models/InternalCodeInterpreterTool.cs new file mode 100644 index 000000000..bce0d5914 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterTool.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterTool : ResponseTool + { + public InternalCodeInterpreterTool(BinaryData container) : base(InternalToolType.CodeInterpreter) + { + Argument.AssertNotNull(container, nameof(container)); + + Container = container; + } + + internal InternalCodeInterpreterTool(InternalToolType kind, IDictionary additionalBinaryDataProperties, BinaryData container) : base(kind, additionalBinaryDataProperties) + { + Container = container; + } + + public BinaryData Container { get; set; } + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterToolAuto.Serialization.cs b/src/Generated/Models/InternalCodeInterpreterToolAuto.Serialization.cs new file mode 100644 index 000000000..c03a6dbd9 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterToolAuto.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterToolAuto : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolAuto)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (Optional.IsCollectionDefined(FileIds) && _additionalBinaryDataProperties?.ContainsKey("file_ids") != true) + { + writer.WritePropertyName("file_ids"u8); + writer.WriteStartArray(); + foreach (string item in FileIds) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCodeInterpreterToolAuto IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCodeInterpreterToolAuto JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolAuto)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCodeInterpreterToolAuto(document.RootElement, options); + } + + internal static InternalCodeInterpreterToolAuto DeserializeInternalCodeInterpreterToolAuto(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + IList fileIds = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file_ids"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + fileIds = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCodeInterpreterToolAuto(kind, fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCodeInterpreterToolAuto)} does not support writing '{options.Format}' format."); + } + } + + InternalCodeInterpreterToolAuto IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCodeInterpreterToolAuto PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCodeInterpreterToolAuto(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolAuto)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterToolAuto.cs b/src/Generated/Models/InternalCodeInterpreterToolAuto.cs new file mode 100644 index 000000000..0a34fcd0d --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterToolAuto.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterToolAuto + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalCodeInterpreterToolAuto() : this(null, null, null) + { + } + + internal InternalCodeInterpreterToolAuto(string kind, IList fileIds, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Kind = kind; + FileIds = fileIds ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "auto"; + + public IList FileIds { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterToolCallItemParam.Serialization.cs b/src/Generated/Models/InternalCodeInterpreterToolCallItemParam.Serialization.cs new file mode 100644 index 000000000..27a4ad36b --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterToolCallItemParam.Serialization.cs @@ -0,0 +1,170 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterToolCallItemParam : IJsonModel + { + internal InternalCodeInterpreterToolCallItemParam() : this(InternalItemType.CodeInterpreterCall, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolCallItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(ContainerId) && _additionalBinaryDataProperties?.ContainsKey("container_id") != true) + { + writer.WritePropertyName("container_id"u8); + writer.WriteStringValue(ContainerId); + } + if (_additionalBinaryDataProperties?.ContainsKey("code") != true) + { + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); + } + if (_additionalBinaryDataProperties?.ContainsKey("results") != true) + { + writer.WritePropertyName("results"u8); + writer.WriteStartArray(); + foreach (BinaryData item in Results) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item); +#else + using (JsonDocument document = JsonDocument.Parse(item)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndArray(); + } + } + + InternalCodeInterpreterToolCallItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalCodeInterpreterToolCallItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolCallItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCodeInterpreterToolCallItemParam(document.RootElement, options); + } + + internal static InternalCodeInterpreterToolCallItemParam DeserializeInternalCodeInterpreterToolCallItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string containerId = default; + string code = default; + IList results = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("container_id"u8)) + { + containerId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("code"u8)) + { + code = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("results"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(BinaryData.FromString(item.GetRawText())); + } + } + results = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCodeInterpreterToolCallItemParam(kind, additionalBinaryDataProperties, containerId, code, results); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCodeInterpreterToolCallItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalCodeInterpreterToolCallItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalCodeInterpreterToolCallItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCodeInterpreterToolCallItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolCallItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterToolCallItemParam.cs b/src/Generated/Models/InternalCodeInterpreterToolCallItemParam.cs new file mode 100644 index 000000000..ae1528081 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterToolCallItemParam.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterToolCallItemParam : InternalItemParam + { + public InternalCodeInterpreterToolCallItemParam(string code, IEnumerable results) : base(InternalItemType.CodeInterpreterCall) + { + Argument.AssertNotNull(code, nameof(code)); + Argument.AssertNotNull(results, nameof(results)); + + Code = code; + Results = results.ToList(); + } + + internal InternalCodeInterpreterToolCallItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string containerId, string code, IList results) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ContainerId = containerId; + Code = code; + Results = results ?? new ChangeTrackingList(); + } + + public string ContainerId { get; set; } + + public string Code { get; } + + public IList Results { get; } + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterToolCallItemResource.Serialization.cs b/src/Generated/Models/InternalCodeInterpreterToolCallItemResource.Serialization.cs new file mode 100644 index 000000000..163217810 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterToolCallItemResource.Serialization.cs @@ -0,0 +1,194 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterToolCallItemResource : IJsonModel + { + internal InternalCodeInterpreterToolCallItemResource() : this(InternalItemType.CodeInterpreterCall, null, null, default, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolCallItemResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); + } + if (Optional.IsDefined(ContainerId) && _additionalBinaryDataProperties?.ContainsKey("container_id") != true) + { + writer.WritePropertyName("container_id"u8); + writer.WriteStringValue(ContainerId); + } + if (_additionalBinaryDataProperties?.ContainsKey("code") != true) + { + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); + } + if (_additionalBinaryDataProperties?.ContainsKey("results") != true) + { + writer.WritePropertyName("results"u8); + writer.WriteStartArray(); + foreach (BinaryData item in Results) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item); +#else + using (JsonDocument document = JsonDocument.Parse(item)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndArray(); + } + } + + InternalCodeInterpreterToolCallItemResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalCodeInterpreterToolCallItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolCallItemResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCodeInterpreterToolCallItemResource(document.RootElement, options); + } + + internal static InternalCodeInterpreterToolCallItemResource DeserializeInternalCodeInterpreterToolCallItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalCodeInterpreterToolCallItemResourceStatus status = default; + string containerId = default; + string code = default; + IList results = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("status"u8)) + { + status = new InternalCodeInterpreterToolCallItemResourceStatus(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("container_id"u8)) + { + containerId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("code"u8)) + { + code = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("results"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(BinaryData.FromString(item.GetRawText())); + } + } + results = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCodeInterpreterToolCallItemResource( + kind, + id, + additionalBinaryDataProperties, + status, + containerId, + code, + results); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCodeInterpreterToolCallItemResource)} does not support writing '{options.Format}' format."); + } + } + + InternalCodeInterpreterToolCallItemResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalCodeInterpreterToolCallItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCodeInterpreterToolCallItemResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCodeInterpreterToolCallItemResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterToolCallItemResource.cs b/src/Generated/Models/InternalCodeInterpreterToolCallItemResource.cs new file mode 100644 index 000000000..beb0dfbf1 --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterToolCallItemResource.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCodeInterpreterToolCallItemResource : ResponseItem + { + internal InternalCodeInterpreterToolCallItemResource(string id, InternalCodeInterpreterToolCallItemResourceStatus status, string code, IEnumerable results) : base(InternalItemType.CodeInterpreterCall, id) + { + Status = status; + Code = code; + Results = results.ToList(); + } + + internal InternalCodeInterpreterToolCallItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalCodeInterpreterToolCallItemResourceStatus status, string containerId, string code, IList results) : base(kind, id, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Status = status; + ContainerId = containerId; + Code = code; + Results = results ?? new ChangeTrackingList(); + } + + internal InternalCodeInterpreterToolCallItemResourceStatus Status { get; } + + public string ContainerId { get; } + + public string Code { get; } + + public IList Results { get; } + } +} diff --git a/src/Generated/Models/InternalCodeInterpreterToolCallItemResourceStatus.cs b/src/Generated/Models/InternalCodeInterpreterToolCallItemResourceStatus.cs new file mode 100644 index 000000000..0bbd27d1a --- /dev/null +++ b/src/Generated/Models/InternalCodeInterpreterToolCallItemResourceStatus.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalCodeInterpreterToolCallItemResourceStatus : IEquatable + { + private readonly string _value; + private const string InProgressValue = "in_progress"; + private const string InterpretingValue = "interpreting"; + private const string CompletedValue = "completed"; + + public InternalCodeInterpreterToolCallItemResourceStatus(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCodeInterpreterToolCallItemResourceStatus InProgress { get; } = new InternalCodeInterpreterToolCallItemResourceStatus(InProgressValue); + + internal static InternalCodeInterpreterToolCallItemResourceStatus Interpreting { get; } = new InternalCodeInterpreterToolCallItemResourceStatus(InterpretingValue); + + internal static InternalCodeInterpreterToolCallItemResourceStatus Completed { get; } = new InternalCodeInterpreterToolCallItemResourceStatus(CompletedValue); + + public static bool operator ==(InternalCodeInterpreterToolCallItemResourceStatus left, InternalCodeInterpreterToolCallItemResourceStatus right) => left.Equals(right); + + public static bool operator !=(InternalCodeInterpreterToolCallItemResourceStatus left, InternalCodeInterpreterToolCallItemResourceStatus right) => !left.Equals(right); + + public static implicit operator InternalCodeInterpreterToolCallItemResourceStatus(string value) => new InternalCodeInterpreterToolCallItemResourceStatus(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCodeInterpreterToolCallItemResourceStatus other && Equals(other); + + public bool Equals(InternalCodeInterpreterToolCallItemResourceStatus 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/InternalComparisonFilter.Serialization.cs b/src/Generated/Models/InternalComparisonFilter.Serialization.cs index 18a0ac1ba..71bda75e2 100644 --- a/src/Generated/Models/InternalComparisonFilter.Serialization.cs +++ b/src/Generated/Models/InternalComparisonFilter.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,7 +35,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("key") != true) { @@ -53,6 +54,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -76,6 +78,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalComparisonFilter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalComparisonFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,13 +119,14 @@ internal static InternalComparisonFilter DeserializeInternalComparisonFilter(Jso BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalComparisonFilter)} does not support writing '{options.Format}' format."); } @@ -130,6 +134,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalComparisonFilter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalComparisonFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -146,21 +151,5 @@ protected virtual InternalComparisonFilter PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalComparisonFilter internalComparisonFilter) - { - if (internalComparisonFilter == null) - { - return null; - } - return BinaryContent.Create(internalComparisonFilter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalComparisonFilter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalComparisonFilter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalComparisonFilter.cs b/src/Generated/Models/InternalComparisonFilter.cs index b208d40a8..d1556ba9d 100644 --- a/src/Generated/Models/InternalComparisonFilter.cs +++ b/src/Generated/Models/InternalComparisonFilter.cs @@ -11,22 +11,22 @@ internal abstract partial class InternalComparisonFilter { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalComparisonFilter(InternalComparisonFilterType @type, string key, BinaryData value) + private protected InternalComparisonFilter(InternalComparisonFilterType kind, string key, BinaryData value) { - Type = @type; + Kind = kind; Key = key; Value = value; } - internal InternalComparisonFilter(InternalComparisonFilterType @type, string key, BinaryData value, IDictionary additionalBinaryDataProperties) + internal InternalComparisonFilter(InternalComparisonFilterType kind, string key, BinaryData value, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; Key = key; Value = value; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal InternalComparisonFilterType Type { get; set; } + internal InternalComparisonFilterType Kind { get; set; } public string Key { get; set; } diff --git a/src/Generated/Models/InternalComparisonFilterEquals.Serialization.cs b/src/Generated/Models/InternalComparisonFilterEquals.Serialization.cs index fa03d4333..3ca1ecbee 100644 --- a/src/Generated/Models/InternalComparisonFilterEquals.Serialization.cs +++ b/src/Generated/Models/InternalComparisonFilterEquals.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalComparisonFilterEquals : IJsonModel { - internal InternalComparisonFilterEquals() + internal InternalComparisonFilterEquals() : this(InternalComparisonFilterType.Eq, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalComparisonFilterEquals IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComparisonFilterEquals)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,7 +55,7 @@ internal static InternalComparisonFilterEquals DeserializeInternalComparisonFilt { return null; } - InternalComparisonFilterType @type = default; + InternalComparisonFilterType kind = default; string key = default; BinaryData value = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -61,7 +63,7 @@ internal static InternalComparisonFilterEquals DeserializeInternalComparisonFilt { if (prop.NameEquals("type"u8)) { - @type = new InternalComparisonFilterType(prop.Value.GetString()); + kind = new InternalComparisonFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("key"u8)) @@ -74,20 +76,22 @@ internal static InternalComparisonFilterEquals DeserializeInternalComparisonFilt value = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalComparisonFilterEquals(@type, key, value, additionalBinaryDataProperties); + return new InternalComparisonFilterEquals(kind, key, value, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalComparisonFilterEquals)} does not support writing '{options.Format}' format."); } @@ -95,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalComparisonFilterEquals IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComparisonFilterEquals)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,21 +116,5 @@ protected override InternalComparisonFilter PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalComparisonFilterEquals internalComparisonFilterEquals) - { - if (internalComparisonFilterEquals == null) - { - return null; - } - return BinaryContent.Create(internalComparisonFilterEquals, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalComparisonFilterEquals(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalComparisonFilterEquals(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalComparisonFilterEquals.cs b/src/Generated/Models/InternalComparisonFilterEquals.cs index 74b847e18..e37144d9f 100644 --- a/src/Generated/Models/InternalComparisonFilterEquals.cs +++ b/src/Generated/Models/InternalComparisonFilterEquals.cs @@ -17,7 +17,7 @@ public InternalComparisonFilterEquals(string key, BinaryData value) : base(Inter } - internal InternalComparisonFilterEquals(InternalComparisonFilterType @type, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(@type, key, value, additionalBinaryDataProperties) + internal InternalComparisonFilterEquals(InternalComparisonFilterType kind, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(kind, key, value, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalComparisonFilterGreaterThan.Serialization.cs b/src/Generated/Models/InternalComparisonFilterGreaterThan.Serialization.cs index bafe42e86..b12953080 100644 --- a/src/Generated/Models/InternalComparisonFilterGreaterThan.Serialization.cs +++ b/src/Generated/Models/InternalComparisonFilterGreaterThan.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalComparisonFilterGreaterThan : IJsonModel { - internal InternalComparisonFilterGreaterThan() + internal InternalComparisonFilterGreaterThan() : this(InternalComparisonFilterType.Gt, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalComparisonFilterGreaterThan IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComparisonFilterGreaterThan)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,7 +55,7 @@ internal static InternalComparisonFilterGreaterThan DeserializeInternalCompariso { return null; } - InternalComparisonFilterType @type = default; + InternalComparisonFilterType kind = default; string key = default; BinaryData value = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -61,7 +63,7 @@ internal static InternalComparisonFilterGreaterThan DeserializeInternalCompariso { if (prop.NameEquals("type"u8)) { - @type = new InternalComparisonFilterType(prop.Value.GetString()); + kind = new InternalComparisonFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("key"u8)) @@ -74,20 +76,22 @@ internal static InternalComparisonFilterGreaterThan DeserializeInternalCompariso value = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalComparisonFilterGreaterThan(@type, key, value, additionalBinaryDataProperties); + return new InternalComparisonFilterGreaterThan(kind, key, value, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalComparisonFilterGreaterThan)} does not support writing '{options.Format}' format."); } @@ -95,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalComparisonFilterGreaterThan IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComparisonFilterGreaterThan)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,21 +116,5 @@ protected override InternalComparisonFilter PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalComparisonFilterGreaterThan internalComparisonFilterGreaterThan) - { - if (internalComparisonFilterGreaterThan == null) - { - return null; - } - return BinaryContent.Create(internalComparisonFilterGreaterThan, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalComparisonFilterGreaterThan(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalComparisonFilterGreaterThan(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalComparisonFilterGreaterThan.cs b/src/Generated/Models/InternalComparisonFilterGreaterThan.cs index 8714f22cb..c9330816c 100644 --- a/src/Generated/Models/InternalComparisonFilterGreaterThan.cs +++ b/src/Generated/Models/InternalComparisonFilterGreaterThan.cs @@ -17,7 +17,7 @@ public InternalComparisonFilterGreaterThan(string key, BinaryData value) : base( } - internal InternalComparisonFilterGreaterThan(InternalComparisonFilterType @type, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(@type, key, value, additionalBinaryDataProperties) + internal InternalComparisonFilterGreaterThan(InternalComparisonFilterType kind, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(kind, key, value, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalComparisonFilterGreaterThanOrEquals.Serialization.cs b/src/Generated/Models/InternalComparisonFilterGreaterThanOrEquals.Serialization.cs index 80b02a4ba..b488f5564 100644 --- a/src/Generated/Models/InternalComparisonFilterGreaterThanOrEquals.Serialization.cs +++ b/src/Generated/Models/InternalComparisonFilterGreaterThanOrEquals.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalComparisonFilterGreaterThanOrEquals : IJsonModel { - internal InternalComparisonFilterGreaterThanOrEquals() + internal InternalComparisonFilterGreaterThanOrEquals() : this(InternalComparisonFilterType.Gte, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalComparisonFilterGreaterThanOrEquals IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComparisonFilterGreaterThanOrEquals)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,7 +55,7 @@ internal static InternalComparisonFilterGreaterThanOrEquals DeserializeInternalC { return null; } - InternalComparisonFilterType @type = default; + InternalComparisonFilterType kind = default; string key = default; BinaryData value = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -61,7 +63,7 @@ internal static InternalComparisonFilterGreaterThanOrEquals DeserializeInternalC { if (prop.NameEquals("type"u8)) { - @type = new InternalComparisonFilterType(prop.Value.GetString()); + kind = new InternalComparisonFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("key"u8)) @@ -74,20 +76,22 @@ internal static InternalComparisonFilterGreaterThanOrEquals DeserializeInternalC value = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalComparisonFilterGreaterThanOrEquals(@type, key, value, additionalBinaryDataProperties); + return new InternalComparisonFilterGreaterThanOrEquals(kind, key, value, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalComparisonFilterGreaterThanOrEquals)} does not support writing '{options.Format}' format."); } @@ -95,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalComparisonFilterGreaterThanOrEquals IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComparisonFilterGreaterThanOrEquals)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,21 +116,5 @@ protected override InternalComparisonFilter PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalComparisonFilterGreaterThanOrEquals internalComparisonFilterGreaterThanOrEquals) - { - if (internalComparisonFilterGreaterThanOrEquals == null) - { - return null; - } - return BinaryContent.Create(internalComparisonFilterGreaterThanOrEquals, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalComparisonFilterGreaterThanOrEquals(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalComparisonFilterGreaterThanOrEquals(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalComparisonFilterGreaterThanOrEquals.cs b/src/Generated/Models/InternalComparisonFilterGreaterThanOrEquals.cs index 9e563488e..93f2897bc 100644 --- a/src/Generated/Models/InternalComparisonFilterGreaterThanOrEquals.cs +++ b/src/Generated/Models/InternalComparisonFilterGreaterThanOrEquals.cs @@ -17,7 +17,7 @@ public InternalComparisonFilterGreaterThanOrEquals(string key, BinaryData value) } - internal InternalComparisonFilterGreaterThanOrEquals(InternalComparisonFilterType @type, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(@type, key, value, additionalBinaryDataProperties) + internal InternalComparisonFilterGreaterThanOrEquals(InternalComparisonFilterType kind, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(kind, key, value, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalComparisonFilterLessThan.Serialization.cs b/src/Generated/Models/InternalComparisonFilterLessThan.Serialization.cs index b2690c982..ef99e5640 100644 --- a/src/Generated/Models/InternalComparisonFilterLessThan.Serialization.cs +++ b/src/Generated/Models/InternalComparisonFilterLessThan.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalComparisonFilterLessThan : IJsonModel { - internal InternalComparisonFilterLessThan() + internal InternalComparisonFilterLessThan() : this(InternalComparisonFilterType.Lt, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalComparisonFilterLessThan IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComparisonFilterLessThan)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,7 +55,7 @@ internal static InternalComparisonFilterLessThan DeserializeInternalComparisonFi { return null; } - InternalComparisonFilterType @type = default; + InternalComparisonFilterType kind = default; string key = default; BinaryData value = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -61,7 +63,7 @@ internal static InternalComparisonFilterLessThan DeserializeInternalComparisonFi { if (prop.NameEquals("type"u8)) { - @type = new InternalComparisonFilterType(prop.Value.GetString()); + kind = new InternalComparisonFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("key"u8)) @@ -74,20 +76,22 @@ internal static InternalComparisonFilterLessThan DeserializeInternalComparisonFi value = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalComparisonFilterLessThan(@type, key, value, additionalBinaryDataProperties); + return new InternalComparisonFilterLessThan(kind, key, value, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalComparisonFilterLessThan)} does not support writing '{options.Format}' format."); } @@ -95,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalComparisonFilterLessThan IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComparisonFilterLessThan)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,21 +116,5 @@ protected override InternalComparisonFilter PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalComparisonFilterLessThan internalComparisonFilterLessThan) - { - if (internalComparisonFilterLessThan == null) - { - return null; - } - return BinaryContent.Create(internalComparisonFilterLessThan, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalComparisonFilterLessThan(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalComparisonFilterLessThan(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalComparisonFilterLessThan.cs b/src/Generated/Models/InternalComparisonFilterLessThan.cs index ef4f5a471..6bebf7593 100644 --- a/src/Generated/Models/InternalComparisonFilterLessThan.cs +++ b/src/Generated/Models/InternalComparisonFilterLessThan.cs @@ -17,7 +17,7 @@ public InternalComparisonFilterLessThan(string key, BinaryData value) : base(Int } - internal InternalComparisonFilterLessThan(InternalComparisonFilterType @type, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(@type, key, value, additionalBinaryDataProperties) + internal InternalComparisonFilterLessThan(InternalComparisonFilterType kind, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(kind, key, value, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalComparisonFilterLessThanOrEquals.Serialization.cs b/src/Generated/Models/InternalComparisonFilterLessThanOrEquals.Serialization.cs index 1883f8dc0..d37302d27 100644 --- a/src/Generated/Models/InternalComparisonFilterLessThanOrEquals.Serialization.cs +++ b/src/Generated/Models/InternalComparisonFilterLessThanOrEquals.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalComparisonFilterLessThanOrEquals : IJsonModel { - internal InternalComparisonFilterLessThanOrEquals() + internal InternalComparisonFilterLessThanOrEquals() : this(InternalComparisonFilterType.Lte, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalComparisonFilterLessThanOrEquals IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComparisonFilterLessThanOrEquals)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,7 +55,7 @@ internal static InternalComparisonFilterLessThanOrEquals DeserializeInternalComp { return null; } - InternalComparisonFilterType @type = default; + InternalComparisonFilterType kind = default; string key = default; BinaryData value = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -61,7 +63,7 @@ internal static InternalComparisonFilterLessThanOrEquals DeserializeInternalComp { if (prop.NameEquals("type"u8)) { - @type = new InternalComparisonFilterType(prop.Value.GetString()); + kind = new InternalComparisonFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("key"u8)) @@ -74,20 +76,22 @@ internal static InternalComparisonFilterLessThanOrEquals DeserializeInternalComp value = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalComparisonFilterLessThanOrEquals(@type, key, value, additionalBinaryDataProperties); + return new InternalComparisonFilterLessThanOrEquals(kind, key, value, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalComparisonFilterLessThanOrEquals)} does not support writing '{options.Format}' format."); } @@ -95,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalComparisonFilterLessThanOrEquals IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComparisonFilterLessThanOrEquals)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,21 +116,5 @@ protected override InternalComparisonFilter PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalComparisonFilterLessThanOrEquals internalComparisonFilterLessThanOrEquals) - { - if (internalComparisonFilterLessThanOrEquals == null) - { - return null; - } - return BinaryContent.Create(internalComparisonFilterLessThanOrEquals, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalComparisonFilterLessThanOrEquals(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalComparisonFilterLessThanOrEquals(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalComparisonFilterLessThanOrEquals.cs b/src/Generated/Models/InternalComparisonFilterLessThanOrEquals.cs index 48d44d03b..dc5c91fe9 100644 --- a/src/Generated/Models/InternalComparisonFilterLessThanOrEquals.cs +++ b/src/Generated/Models/InternalComparisonFilterLessThanOrEquals.cs @@ -17,7 +17,7 @@ public InternalComparisonFilterLessThanOrEquals(string key, BinaryData value) : } - internal InternalComparisonFilterLessThanOrEquals(InternalComparisonFilterType @type, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(@type, key, value, additionalBinaryDataProperties) + internal InternalComparisonFilterLessThanOrEquals(InternalComparisonFilterType kind, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(kind, key, value, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalComparisonFilterNotEquals.Serialization.cs b/src/Generated/Models/InternalComparisonFilterNotEquals.Serialization.cs index cb7532531..f8b475da4 100644 --- a/src/Generated/Models/InternalComparisonFilterNotEquals.Serialization.cs +++ b/src/Generated/Models/InternalComparisonFilterNotEquals.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalComparisonFilterNotEquals : IJsonModel { - internal InternalComparisonFilterNotEquals() + internal InternalComparisonFilterNotEquals() : this(InternalComparisonFilterType.Ne, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalComparisonFilterNotEquals IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComparisonFilterNotEquals)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,7 +55,7 @@ internal static InternalComparisonFilterNotEquals DeserializeInternalComparisonF { return null; } - InternalComparisonFilterType @type = default; + InternalComparisonFilterType kind = default; string key = default; BinaryData value = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -61,7 +63,7 @@ internal static InternalComparisonFilterNotEquals DeserializeInternalComparisonF { if (prop.NameEquals("type"u8)) { - @type = new InternalComparisonFilterType(prop.Value.GetString()); + kind = new InternalComparisonFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("key"u8)) @@ -74,20 +76,22 @@ internal static InternalComparisonFilterNotEquals DeserializeInternalComparisonF value = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalComparisonFilterNotEquals(@type, key, value, additionalBinaryDataProperties); + return new InternalComparisonFilterNotEquals(kind, key, value, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalComparisonFilterNotEquals)} does not support writing '{options.Format}' format."); } @@ -95,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalComparisonFilterNotEquals IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComparisonFilterNotEquals)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,21 +116,5 @@ protected override InternalComparisonFilter PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalComparisonFilterNotEquals internalComparisonFilterNotEquals) - { - if (internalComparisonFilterNotEquals == null) - { - return null; - } - return BinaryContent.Create(internalComparisonFilterNotEquals, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalComparisonFilterNotEquals(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalComparisonFilterNotEquals(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalComparisonFilterNotEquals.cs b/src/Generated/Models/InternalComparisonFilterNotEquals.cs index bc7057b2f..53729620f 100644 --- a/src/Generated/Models/InternalComparisonFilterNotEquals.cs +++ b/src/Generated/Models/InternalComparisonFilterNotEquals.cs @@ -17,7 +17,7 @@ public InternalComparisonFilterNotEquals(string key, BinaryData value) : base(In } - internal InternalComparisonFilterNotEquals(InternalComparisonFilterType @type, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(@type, key, value, additionalBinaryDataProperties) + internal InternalComparisonFilterNotEquals(InternalComparisonFilterType kind, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(kind, key, value, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalComparisonFilterType.cs b/src/Generated/Models/InternalComparisonFilterType.cs index 208e1fab3..8d8d89b5a 100644 --- a/src/Generated/Models/InternalComparisonFilterType.cs +++ b/src/Generated/Models/InternalComparisonFilterType.cs @@ -25,17 +25,17 @@ public InternalComparisonFilterType(string value) _value = value; } - public static InternalComparisonFilterType Eq { get; } = new InternalComparisonFilterType(EqValue); + internal static InternalComparisonFilterType Eq { get; } = new InternalComparisonFilterType(EqValue); - public static InternalComparisonFilterType Ne { get; } = new InternalComparisonFilterType(NeValue); + internal static InternalComparisonFilterType Ne { get; } = new InternalComparisonFilterType(NeValue); - public static InternalComparisonFilterType Gt { get; } = new InternalComparisonFilterType(GtValue); + internal static InternalComparisonFilterType Gt { get; } = new InternalComparisonFilterType(GtValue); - public static InternalComparisonFilterType Gte { get; } = new InternalComparisonFilterType(GteValue); + internal static InternalComparisonFilterType Gte { get; } = new InternalComparisonFilterType(GteValue); - public static InternalComparisonFilterType Lt { get; } = new InternalComparisonFilterType(LtValue); + internal static InternalComparisonFilterType Lt { get; } = new InternalComparisonFilterType(LtValue); - public static InternalComparisonFilterType Lte { get; } = new InternalComparisonFilterType(LteValue); + internal static InternalComparisonFilterType Lte { get; } = new InternalComparisonFilterType(LteValue); public static bool operator ==(InternalComparisonFilterType left, InternalComparisonFilterType right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCompleteUploadRequest.Serialization.cs b/src/Generated/Models/InternalCompleteUploadRequest.Serialization.cs index e5f4dbea2..2bc41d386 100644 --- a/src/Generated/Models/InternalCompleteUploadRequest.Serialization.cs +++ b/src/Generated/Models/InternalCompleteUploadRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Files { internal partial class InternalCompleteUploadRequest : IJsonModel { - internal InternalCompleteUploadRequest() + internal InternalCompleteUploadRequest() : this(null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("md5"u8); writer.WriteStringValue(Md5); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCompleteUploadRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCompleteUploadRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,6 +121,7 @@ internal static InternalCompleteUploadRequest DeserializeInternalCompleteUploadR md5 = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCompleteUploadRequest(partIds, md5, additionalBinaryDataProperties); @@ -125,13 +129,14 @@ internal static InternalCompleteUploadRequest DeserializeInternalCompleteUploadR BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCompleteUploadRequest)} does not support writing '{options.Format}' format."); } @@ -139,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCompleteUploadRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCompleteUploadRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +161,5 @@ protected virtual InternalCompleteUploadRequest PersistableModelCreateCore(Binar } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCompleteUploadRequest internalCompleteUploadRequest) - { - if (internalCompleteUploadRequest == null) - { - return null; - } - return BinaryContent.Create(internalCompleteUploadRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCompleteUploadRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCompleteUploadRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCompleteUploadRequest.cs b/src/Generated/Models/InternalCompleteUploadRequest.cs index 509bbb123..dd7ffc61a 100644 --- a/src/Generated/Models/InternalCompleteUploadRequest.cs +++ b/src/Generated/Models/InternalCompleteUploadRequest.cs @@ -22,7 +22,8 @@ public InternalCompleteUploadRequest(IEnumerable partIds) internal InternalCompleteUploadRequest(IList partIds, string md5, IDictionary additionalBinaryDataProperties) { - PartIds = partIds; + // Plugin customization: ensure initialization of collections + PartIds = partIds ?? new ChangeTrackingList(); Md5 = md5; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCompoundFilter.Serialization.cs b/src/Generated/Models/InternalCompoundFilter.Serialization.cs index 41926adb3..690a8f225 100644 --- a/src/Generated/Models/InternalCompoundFilter.Serialization.cs +++ b/src/Generated/Models/InternalCompoundFilter.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses [PersistableModelProxy(typeof(InternalUnknownCompoundFilter))] internal abstract partial class InternalCompoundFilter : IJsonModel { - internal InternalCompoundFilter() + internal InternalCompoundFilter() : this(default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,7 +35,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("filters") != true) { @@ -58,6 +59,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -81,6 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCompoundFilter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCompoundFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -113,13 +116,14 @@ internal static InternalCompoundFilter DeserializeInternalCompoundFilter(JsonEle BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCompoundFilter)} does not support writing '{options.Format}' format."); } @@ -127,6 +131,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCompoundFilter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCompoundFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -143,21 +148,5 @@ protected virtual InternalCompoundFilter PersistableModelCreateCore(BinaryData d } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCompoundFilter internalCompoundFilter) - { - if (internalCompoundFilter == null) - { - return null; - } - return BinaryContent.Create(internalCompoundFilter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCompoundFilter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCompoundFilter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCompoundFilter.cs b/src/Generated/Models/InternalCompoundFilter.cs index 49e11f8c0..16b8788f5 100644 --- a/src/Generated/Models/InternalCompoundFilter.cs +++ b/src/Generated/Models/InternalCompoundFilter.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; namespace OpenAI.Responses { @@ -12,20 +13,21 @@ internal abstract partial class InternalCompoundFilter { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalCompoundFilter(InternalCompoundFilterType @type, IEnumerable filters) + private protected InternalCompoundFilter(InternalCompoundFilterType kind, IEnumerable filters) { - Type = @type; + Kind = kind; Filters = filters.ToList(); } - internal InternalCompoundFilter(InternalCompoundFilterType @type, IList filters, IDictionary additionalBinaryDataProperties) + internal InternalCompoundFilter(InternalCompoundFilterType kind, IList filters, IDictionary additionalBinaryDataProperties) { - Type = @type; - Filters = filters; + // Plugin customization: ensure initialization of collections + Kind = kind; + Filters = filters ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal InternalCompoundFilterType Type { get; set; } + internal InternalCompoundFilterType Kind { get; set; } public IList Filters { get; } diff --git a/src/Generated/Models/InternalCompoundFilterAnd.Serialization.cs b/src/Generated/Models/InternalCompoundFilterAnd.Serialization.cs index f41787054..bbaeb0c7c 100644 --- a/src/Generated/Models/InternalCompoundFilterAnd.Serialization.cs +++ b/src/Generated/Models/InternalCompoundFilterAnd.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalCompoundFilterAnd : IJsonModel { - internal InternalCompoundFilterAnd() + internal InternalCompoundFilterAnd() : this(InternalCompoundFilterType.And, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalCompoundFilterAnd IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalCompoundFilterAnd)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalCompoundFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,14 +55,14 @@ internal static InternalCompoundFilterAnd DeserializeInternalCompoundFilterAnd(J { return null; } - InternalCompoundFilterType @type = default; + InternalCompoundFilterType kind = default; IList filters = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalCompoundFilterType(prop.Value.GetString()); + kind = new InternalCompoundFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("filters"u8)) @@ -80,20 +82,22 @@ internal static InternalCompoundFilterAnd DeserializeInternalCompoundFilterAnd(J filters = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCompoundFilterAnd(@type, filters, additionalBinaryDataProperties); + return new InternalCompoundFilterAnd(kind, filters, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCompoundFilterAnd)} does not support writing '{options.Format}' format."); } @@ -101,6 +105,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCompoundFilterAnd IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalCompoundFilterAnd)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalCompoundFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -117,21 +122,5 @@ protected override InternalCompoundFilter PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCompoundFilterAnd internalCompoundFilterAnd) - { - if (internalCompoundFilterAnd == null) - { - return null; - } - return BinaryContent.Create(internalCompoundFilterAnd, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCompoundFilterAnd(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCompoundFilterAnd(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCompoundFilterAnd.cs b/src/Generated/Models/InternalCompoundFilterAnd.cs index 02c8da221..ea11a67ca 100644 --- a/src/Generated/Models/InternalCompoundFilterAnd.cs +++ b/src/Generated/Models/InternalCompoundFilterAnd.cs @@ -16,7 +16,7 @@ public InternalCompoundFilterAnd(IEnumerable filters) : base(Interna } - internal InternalCompoundFilterAnd(InternalCompoundFilterType @type, IList filters, IDictionary additionalBinaryDataProperties) : base(@type, filters, additionalBinaryDataProperties) + internal InternalCompoundFilterAnd(InternalCompoundFilterType kind, IList filters, IDictionary additionalBinaryDataProperties) : base(kind, filters, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalCompoundFilterOr.Serialization.cs b/src/Generated/Models/InternalCompoundFilterOr.Serialization.cs index e2b55bd0a..c91cc6aa6 100644 --- a/src/Generated/Models/InternalCompoundFilterOr.Serialization.cs +++ b/src/Generated/Models/InternalCompoundFilterOr.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalCompoundFilterOr : IJsonModel { - internal InternalCompoundFilterOr() + internal InternalCompoundFilterOr() : this(InternalCompoundFilterType.Or, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalCompoundFilterOr IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalCompoundFilterOr)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalCompoundFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,14 +55,14 @@ internal static InternalCompoundFilterOr DeserializeInternalCompoundFilterOr(Jso { return null; } - InternalCompoundFilterType @type = default; + InternalCompoundFilterType kind = default; IList filters = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalCompoundFilterType(prop.Value.GetString()); + kind = new InternalCompoundFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("filters"u8)) @@ -80,20 +82,22 @@ internal static InternalCompoundFilterOr DeserializeInternalCompoundFilterOr(Jso filters = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCompoundFilterOr(@type, filters, additionalBinaryDataProperties); + return new InternalCompoundFilterOr(kind, filters, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCompoundFilterOr)} does not support writing '{options.Format}' format."); } @@ -101,6 +105,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCompoundFilterOr IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalCompoundFilterOr)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalCompoundFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -117,21 +122,5 @@ protected override InternalCompoundFilter PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCompoundFilterOr internalCompoundFilterOr) - { - if (internalCompoundFilterOr == null) - { - return null; - } - return BinaryContent.Create(internalCompoundFilterOr, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCompoundFilterOr(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCompoundFilterOr(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCompoundFilterOr.cs b/src/Generated/Models/InternalCompoundFilterOr.cs index 6f085b2ec..4db1d82bd 100644 --- a/src/Generated/Models/InternalCompoundFilterOr.cs +++ b/src/Generated/Models/InternalCompoundFilterOr.cs @@ -16,7 +16,7 @@ public InternalCompoundFilterOr(IEnumerable filters) : base(Internal } - internal InternalCompoundFilterOr(InternalCompoundFilterType @type, IList filters, IDictionary additionalBinaryDataProperties) : base(@type, filters, additionalBinaryDataProperties) + internal InternalCompoundFilterOr(InternalCompoundFilterType kind, IList filters, IDictionary additionalBinaryDataProperties) : base(kind, filters, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalCompoundFilterType.cs b/src/Generated/Models/InternalCompoundFilterType.cs index 155c5233b..9585e845a 100644 --- a/src/Generated/Models/InternalCompoundFilterType.cs +++ b/src/Generated/Models/InternalCompoundFilterType.cs @@ -21,9 +21,9 @@ public InternalCompoundFilterType(string value) _value = value; } - public static InternalCompoundFilterType And { get; } = new InternalCompoundFilterType(AndValue); + internal static InternalCompoundFilterType And { get; } = new InternalCompoundFilterType(AndValue); - public static InternalCompoundFilterType Or { get; } = new InternalCompoundFilterType(OrValue); + internal static InternalCompoundFilterType Or { get; } = new InternalCompoundFilterType(OrValue); public static bool operator ==(InternalCompoundFilterType left, InternalCompoundFilterType right) => left.Equals(right); diff --git a/src/Generated/Models/InternalComputerActionClick.Serialization.cs b/src/Generated/Models/InternalComputerActionClick.Serialization.cs new file mode 100644 index 000000000..bd67a4eab --- /dev/null +++ b/src/Generated/Models/InternalComputerActionClick.Serialization.cs @@ -0,0 +1,141 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionClick : IJsonModel + { + internal InternalComputerActionClick() : this(ComputerCallActionKind.Click, null, default, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionClick)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("button") != true) + { + writer.WritePropertyName("button"u8); + writer.WriteStringValue(Button.ToSerialString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("x") != true) + { + writer.WritePropertyName("x"u8); + writer.WriteNumberValue(X); + } + if (_additionalBinaryDataProperties?.ContainsKey("y") != true) + { + writer.WritePropertyName("y"u8); + writer.WriteNumberValue(Y); + } + } + + InternalComputerActionClick IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionClick)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionClick)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionClick(document.RootElement, options); + } + + internal static InternalComputerActionClick DeserializeInternalComputerActionClick(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + ComputerCallActionMouseButton button = default; + int x = default; + int y = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + if (prop.NameEquals("button"u8)) + { + button = prop.Value.GetString().ToComputerCallActionMouseButton(); + continue; + } + if (prop.NameEquals("x"u8)) + { + x = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("y"u8)) + { + y = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionClick(kind, additionalBinaryDataProperties, button, x, y); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionClick)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionClick IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionClick)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionClick(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionClick)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionClick.cs b/src/Generated/Models/InternalComputerActionClick.cs new file mode 100644 index 000000000..e493c09a0 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionClick.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionClick : ComputerCallAction + { + public InternalComputerActionClick(ComputerCallActionMouseButton button, int x, int y) : base(ComputerCallActionKind.Click) + { + Button = button; + X = x; + Y = y; + } + + internal InternalComputerActionClick(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, ComputerCallActionMouseButton button, int x, int y) : base(kind, additionalBinaryDataProperties) + { + Button = button; + X = x; + Y = y; + } + + public ComputerCallActionMouseButton Button { get; set; } + + public int X { get; set; } + + public int Y { get; set; } + } +} diff --git a/src/Generated/Models/InternalComputerActionDoubleClick.Serialization.cs b/src/Generated/Models/InternalComputerActionDoubleClick.Serialization.cs new file mode 100644 index 000000000..0593c4627 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionDoubleClick.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionDoubleClick : IJsonModel + { + internal InternalComputerActionDoubleClick() : this(ComputerCallActionKind.DoubleClick, null, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionDoubleClick)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("x") != true) + { + writer.WritePropertyName("x"u8); + writer.WriteNumberValue(X); + } + if (_additionalBinaryDataProperties?.ContainsKey("y") != true) + { + writer.WritePropertyName("y"u8); + writer.WriteNumberValue(Y); + } + } + + InternalComputerActionDoubleClick IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionDoubleClick)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionDoubleClick)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionDoubleClick(document.RootElement, options); + } + + internal static InternalComputerActionDoubleClick DeserializeInternalComputerActionDoubleClick(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int x = default; + int y = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + if (prop.NameEquals("x"u8)) + { + x = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("y"u8)) + { + y = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionDoubleClick(kind, additionalBinaryDataProperties, x, y); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionDoubleClick)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionDoubleClick IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionDoubleClick)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionDoubleClick(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionDoubleClick)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionDoubleClick.cs b/src/Generated/Models/InternalComputerActionDoubleClick.cs new file mode 100644 index 000000000..386b742df --- /dev/null +++ b/src/Generated/Models/InternalComputerActionDoubleClick.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionDoubleClick : ComputerCallAction + { + public InternalComputerActionDoubleClick(int x, int y) : base(ComputerCallActionKind.DoubleClick) + { + X = x; + Y = y; + } + + internal InternalComputerActionDoubleClick(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, int x, int y) : base(kind, additionalBinaryDataProperties) + { + X = x; + Y = y; + } + + public int X { get; set; } + + public int Y { get; set; } + } +} diff --git a/src/Generated/Models/InternalComputerActionDrag.Serialization.cs b/src/Generated/Models/InternalComputerActionDrag.Serialization.cs new file mode 100644 index 000000000..35b49ce64 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionDrag.Serialization.cs @@ -0,0 +1,129 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionDrag : IJsonModel + { + internal InternalComputerActionDrag() : this(ComputerCallActionKind.Drag, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionDrag)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("path") != true) + { + writer.WritePropertyName("path"u8); + writer.WriteStartArray(); + foreach (InternalCoordinate item in Path) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalComputerActionDrag IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionDrag)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionDrag)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionDrag(document.RootElement, options); + } + + internal static InternalComputerActionDrag DeserializeInternalComputerActionDrag(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IList path = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + if (prop.NameEquals("path"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalCoordinate.DeserializeInternalCoordinate(item, options)); + } + path = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionDrag(kind, additionalBinaryDataProperties, path); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionDrag)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionDrag IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionDrag)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionDrag(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionDrag)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionDrag.cs b/src/Generated/Models/InternalComputerActionDrag.cs new file mode 100644 index 000000000..64a12d963 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionDrag.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionDrag : ComputerCallAction + { + internal InternalComputerActionDrag(IEnumerable path) : base(ComputerCallActionKind.Drag) + { + Argument.AssertNotNull(path, nameof(path)); + + Path = path.ToList(); + } + + internal InternalComputerActionDrag(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, IList path) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Path = path ?? new ChangeTrackingList(); + } + + internal IList Path { get; } + } +} diff --git a/src/Generated/Models/InternalComputerActionKeyPress.Serialization.cs b/src/Generated/Models/InternalComputerActionKeyPress.Serialization.cs new file mode 100644 index 000000000..85cbbc583 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionKeyPress.Serialization.cs @@ -0,0 +1,141 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionKeyPress : IJsonModel + { + internal InternalComputerActionKeyPress() : this(ComputerCallActionKind.KeyPress, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionKeyPress)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("keys") != true) + { + writer.WritePropertyName("keys"u8); + writer.WriteStartArray(); + foreach (string item in Keys) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + } + + InternalComputerActionKeyPress IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionKeyPress)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionKeyPress)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionKeyPress(document.RootElement, options); + } + + internal static InternalComputerActionKeyPress DeserializeInternalComputerActionKeyPress(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IList keys = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + if (prop.NameEquals("keys"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + keys = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionKeyPress(kind, additionalBinaryDataProperties, keys); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionKeyPress)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionKeyPress IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionKeyPress)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionKeyPress(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionKeyPress)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionKeyPress.cs b/src/Generated/Models/InternalComputerActionKeyPress.cs new file mode 100644 index 000000000..7ae55e5cc --- /dev/null +++ b/src/Generated/Models/InternalComputerActionKeyPress.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionKeyPress : ComputerCallAction + { + public InternalComputerActionKeyPress(IEnumerable keys) : base(ComputerCallActionKind.KeyPress) + { + Argument.AssertNotNull(keys, nameof(keys)); + + Keys = keys.ToList(); + } + + internal InternalComputerActionKeyPress(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, IList keys) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Keys = keys ?? new ChangeTrackingList(); + } + + public IList Keys { get; } + } +} diff --git a/src/Generated/Models/InternalComputerActionMove.Serialization.cs b/src/Generated/Models/InternalComputerActionMove.Serialization.cs new file mode 100644 index 000000000..8297e9c4b --- /dev/null +++ b/src/Generated/Models/InternalComputerActionMove.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionMove : IJsonModel + { + internal InternalComputerActionMove() : this(ComputerCallActionKind.Move, null, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionMove)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("x") != true) + { + writer.WritePropertyName("x"u8); + writer.WriteNumberValue(X); + } + if (_additionalBinaryDataProperties?.ContainsKey("y") != true) + { + writer.WritePropertyName("y"u8); + writer.WriteNumberValue(Y); + } + } + + InternalComputerActionMove IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionMove)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionMove)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionMove(document.RootElement, options); + } + + internal static InternalComputerActionMove DeserializeInternalComputerActionMove(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int x = default; + int y = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + if (prop.NameEquals("x"u8)) + { + x = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("y"u8)) + { + y = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionMove(kind, additionalBinaryDataProperties, x, y); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionMove)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionMove IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionMove)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionMove(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionMove)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionMove.cs b/src/Generated/Models/InternalComputerActionMove.cs new file mode 100644 index 000000000..3d3c93638 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionMove.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionMove : ComputerCallAction + { + public InternalComputerActionMove(int x, int y) : base(ComputerCallActionKind.Move) + { + X = x; + Y = y; + } + + internal InternalComputerActionMove(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, int x, int y) : base(kind, additionalBinaryDataProperties) + { + X = x; + Y = y; + } + + public int X { get; set; } + + public int Y { get; set; } + } +} diff --git a/src/Generated/Models/InternalComputerActionScreenshot.Serialization.cs b/src/Generated/Models/InternalComputerActionScreenshot.Serialization.cs new file mode 100644 index 000000000..8103f5acc --- /dev/null +++ b/src/Generated/Models/InternalComputerActionScreenshot.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionScreenshot : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionScreenshot)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalComputerActionScreenshot IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionScreenshot)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionScreenshot)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionScreenshot(document.RootElement, options); + } + + internal static InternalComputerActionScreenshot DeserializeInternalComputerActionScreenshot(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionScreenshot(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionScreenshot)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionScreenshot IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionScreenshot)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionScreenshot(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionScreenshot)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionScreenshot.cs b/src/Generated/Models/InternalComputerActionScreenshot.cs new file mode 100644 index 000000000..88473ac72 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionScreenshot.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionScreenshot : ComputerCallAction + { + public InternalComputerActionScreenshot() : this(ComputerCallActionKind.Screenshot, null) + { + } + + internal InternalComputerActionScreenshot(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalComputerActionScroll.Serialization.cs b/src/Generated/Models/InternalComputerActionScroll.Serialization.cs new file mode 100644 index 000000000..3ba9f819a --- /dev/null +++ b/src/Generated/Models/InternalComputerActionScroll.Serialization.cs @@ -0,0 +1,158 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionScroll : IJsonModel + { + internal InternalComputerActionScroll() : this(ComputerCallActionKind.Scroll, null, default, default, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionScroll)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("x") != true) + { + writer.WritePropertyName("x"u8); + writer.WriteNumberValue(X); + } + if (_additionalBinaryDataProperties?.ContainsKey("y") != true) + { + writer.WritePropertyName("y"u8); + writer.WriteNumberValue(Y); + } + if (_additionalBinaryDataProperties?.ContainsKey("scroll_x") != true) + { + writer.WritePropertyName("scroll_x"u8); + writer.WriteNumberValue(ScrollX); + } + if (_additionalBinaryDataProperties?.ContainsKey("scroll_y") != true) + { + writer.WritePropertyName("scroll_y"u8); + writer.WriteNumberValue(ScrollY); + } + } + + InternalComputerActionScroll IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionScroll)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionScroll)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionScroll(document.RootElement, options); + } + + internal static InternalComputerActionScroll DeserializeInternalComputerActionScroll(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int x = default; + int y = default; + int scrollX = default; + int scrollY = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + if (prop.NameEquals("x"u8)) + { + x = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("y"u8)) + { + y = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("scroll_x"u8)) + { + scrollX = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("scroll_y"u8)) + { + scrollY = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionScroll( + kind, + additionalBinaryDataProperties, + x, + y, + scrollX, + scrollY); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionScroll)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionScroll IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionScroll)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionScroll(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionScroll)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionScroll.cs b/src/Generated/Models/InternalComputerActionScroll.cs new file mode 100644 index 000000000..0a2b79a91 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionScroll.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionScroll : ComputerCallAction + { + public InternalComputerActionScroll(int x, int y, int scrollX, int scrollY) : base(ComputerCallActionKind.Scroll) + { + X = x; + Y = y; + ScrollX = scrollX; + ScrollY = scrollY; + } + + internal InternalComputerActionScroll(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, int x, int y, int scrollX, int scrollY) : base(kind, additionalBinaryDataProperties) + { + X = x; + Y = y; + ScrollX = scrollX; + ScrollY = scrollY; + } + + public int X { get; set; } + + public int Y { get; set; } + + public int ScrollX { get; set; } + + public int ScrollY { get; set; } + } +} diff --git a/src/Generated/Models/InternalComputerActionTypeKeys.Serialization.cs b/src/Generated/Models/InternalComputerActionTypeKeys.Serialization.cs new file mode 100644 index 000000000..1b02fd1e9 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionTypeKeys.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionTypeKeys : IJsonModel + { + internal InternalComputerActionTypeKeys() : this(ComputerCallActionKind.Type, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionTypeKeys)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + } + + InternalComputerActionTypeKeys IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionTypeKeys)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionTypeKeys)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionTypeKeys(document.RootElement, options); + } + + internal static InternalComputerActionTypeKeys DeserializeInternalComputerActionTypeKeys(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string text = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionTypeKeys(kind, additionalBinaryDataProperties, text); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionTypeKeys)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionTypeKeys IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionTypeKeys)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionTypeKeys(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionTypeKeys)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionTypeKeys.cs b/src/Generated/Models/InternalComputerActionTypeKeys.cs new file mode 100644 index 000000000..f8214dc68 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionTypeKeys.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionTypeKeys : ComputerCallAction + { + public InternalComputerActionTypeKeys(string text) : base(ComputerCallActionKind.Type) + { + Argument.AssertNotNull(text, nameof(text)); + + Text = text; + } + + internal InternalComputerActionTypeKeys(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, string text) : base(kind, additionalBinaryDataProperties) + { + Text = text; + } + + public string Text { get; set; } + } +} diff --git a/src/Generated/Models/InternalComputerActionWait.Serialization.cs b/src/Generated/Models/InternalComputerActionWait.Serialization.cs new file mode 100644 index 000000000..259b01073 --- /dev/null +++ b/src/Generated/Models/InternalComputerActionWait.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionWait : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionWait)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalComputerActionWait IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerActionWait)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerActionWait)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerActionWait(document.RootElement, options); + } + + internal static InternalComputerActionWait DeserializeInternalComputerActionWait(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerActionWait(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerActionWait)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerActionWait IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerActionWait)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerActionWait(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerActionWait)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerActionWait.cs b/src/Generated/Models/InternalComputerActionWait.cs new file mode 100644 index 000000000..f0941ad8d --- /dev/null +++ b/src/Generated/Models/InternalComputerActionWait.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerActionWait : ComputerCallAction + { + public InternalComputerActionWait() : this(ComputerCallActionKind.Wait, null) + { + } + + internal InternalComputerActionWait(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalComputerToolCallOutputItemOutputComputerScreenshot.Serialization.cs b/src/Generated/Models/InternalComputerToolCallOutputItemOutputComputerScreenshot.Serialization.cs new file mode 100644 index 000000000..adf6bf5f7 --- /dev/null +++ b/src/Generated/Models/InternalComputerToolCallOutputItemOutputComputerScreenshot.Serialization.cs @@ -0,0 +1,126 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerToolCallOutputItemOutputComputerScreenshot : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerToolCallOutputItemOutputComputerScreenshot)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(ImageUrl) && _additionalBinaryDataProperties?.ContainsKey("image_url") != true) + { + writer.WritePropertyName("image_url"u8); + writer.WriteStringValue(ImageUrl); + } + if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + } + + InternalComputerToolCallOutputItemOutputComputerScreenshot IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerToolCallOutputItemOutputComputerScreenshot)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerToolCallOutputItemOutputComputerScreenshot)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerToolCallOutputItemOutputComputerScreenshot(document.RootElement, options); + } + + internal static InternalComputerToolCallOutputItemOutputComputerScreenshot DeserializeInternalComputerToolCallOutputItemOutputComputerScreenshot(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalComputerUsePreviewToolCallOutputOutputType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string imageUrl = default; + string fileId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalComputerUsePreviewToolCallOutputOutputType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("image_url"u8)) + { + imageUrl = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file_id"u8)) + { + fileId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerToolCallOutputItemOutputComputerScreenshot(kind, additionalBinaryDataProperties, imageUrl, fileId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerToolCallOutputItemOutputComputerScreenshot)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerToolCallOutputItemOutputComputerScreenshot IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerToolCallOutputItemOutputComputerScreenshot)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerToolCallOutputItemOutputComputerScreenshot(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerToolCallOutputItemOutputComputerScreenshot)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerToolCallOutputItemOutputComputerScreenshot.cs b/src/Generated/Models/InternalComputerToolCallOutputItemOutputComputerScreenshot.cs new file mode 100644 index 000000000..3387000f5 --- /dev/null +++ b/src/Generated/Models/InternalComputerToolCallOutputItemOutputComputerScreenshot.cs @@ -0,0 +1,26 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerToolCallOutputItemOutputComputerScreenshot : ComputerOutput + { + public InternalComputerToolCallOutputItemOutputComputerScreenshot() : this(InternalComputerUsePreviewToolCallOutputOutputType.Screenshot, null, null, null) + { + } + + internal InternalComputerToolCallOutputItemOutputComputerScreenshot(InternalComputerUsePreviewToolCallOutputOutputType kind, IDictionary additionalBinaryDataProperties, string imageUrl, string fileId) : base(kind, additionalBinaryDataProperties) + { + ImageUrl = imageUrl; + FileId = fileId; + } + + public string ImageUrl { get; set; } + + public string FileId { get; set; } + } +} diff --git a/src/Generated/Models/InternalComputerUsePreviewTool.Serialization.cs b/src/Generated/Models/InternalComputerUsePreviewTool.Serialization.cs new file mode 100644 index 000000000..3fbc37793 --- /dev/null +++ b/src/Generated/Models/InternalComputerUsePreviewTool.Serialization.cs @@ -0,0 +1,141 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerUsePreviewTool : IJsonModel + { + internal InternalComputerUsePreviewTool() : this(InternalToolType.ComputerUsePreview, null, default, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerUsePreviewTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("environment") != true) + { + writer.WritePropertyName("environment"u8); + writer.WriteStringValue(Environment.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("display_width") != true) + { + writer.WritePropertyName("display_width"u8); + writer.WriteNumberValue(DisplayWidth); + } + if (_additionalBinaryDataProperties?.ContainsKey("display_height") != true) + { + writer.WritePropertyName("display_height"u8); + writer.WriteNumberValue(DisplayHeight); + } + } + + InternalComputerUsePreviewTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerUsePreviewTool)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerUsePreviewTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerUsePreviewTool(document.RootElement, options); + } + + internal static InternalComputerUsePreviewTool DeserializeInternalComputerUsePreviewTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + ComputerToolEnvironment environment = default; + int displayWidth = default; + int displayHeight = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("environment"u8)) + { + environment = new ComputerToolEnvironment(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("display_width"u8)) + { + displayWidth = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("display_height"u8)) + { + displayHeight = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerUsePreviewTool(kind, additionalBinaryDataProperties, environment, displayWidth, displayHeight); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerUsePreviewTool)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerUsePreviewTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerUsePreviewTool)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerUsePreviewTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerUsePreviewTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerUsePreviewTool.cs b/src/Generated/Models/InternalComputerUsePreviewTool.cs new file mode 100644 index 000000000..9cd5f6ef2 --- /dev/null +++ b/src/Generated/Models/InternalComputerUsePreviewTool.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerUsePreviewTool : ResponseTool + { + public InternalComputerUsePreviewTool(ComputerToolEnvironment environment, int displayWidth, int displayHeight) : base(InternalToolType.ComputerUsePreview) + { + Environment = environment; + DisplayWidth = displayWidth; + DisplayHeight = displayHeight; + } + + internal InternalComputerUsePreviewTool(InternalToolType kind, IDictionary additionalBinaryDataProperties, ComputerToolEnvironment environment, int displayWidth, int displayHeight) : base(kind, additionalBinaryDataProperties) + { + Environment = environment; + DisplayWidth = displayWidth; + DisplayHeight = displayHeight; + } + + public ComputerToolEnvironment Environment { get; set; } + + public int DisplayWidth { get; set; } + + public int DisplayHeight { get; set; } + } +} diff --git a/src/Generated/Models/InternalComputerUsePreviewToolCallItemParam.Serialization.cs b/src/Generated/Models/InternalComputerUsePreviewToolCallItemParam.Serialization.cs new file mode 100644 index 000000000..921dd42dd --- /dev/null +++ b/src/Generated/Models/InternalComputerUsePreviewToolCallItemParam.Serialization.cs @@ -0,0 +1,151 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerUsePreviewToolCallItemParam : IJsonModel + { + internal InternalComputerUsePreviewToolCallItemParam() : this(InternalItemType.ComputerCall, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerUsePreviewToolCallItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("call_id") != true) + { + writer.WritePropertyName("call_id"u8); + writer.WriteStringValue(CallId); + } + if (_additionalBinaryDataProperties?.ContainsKey("action") != true) + { + writer.WritePropertyName("action"u8); + writer.WriteObjectValue(Action, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("pending_safety_checks") != true) + { + writer.WritePropertyName("pending_safety_checks"u8); + writer.WriteStartArray(); + foreach (ComputerCallSafetyCheck item in PendingSafetyChecks) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalComputerUsePreviewToolCallItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerUsePreviewToolCallItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerUsePreviewToolCallItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerUsePreviewToolCallItemParam(document.RootElement, options); + } + + internal static InternalComputerUsePreviewToolCallItemParam DeserializeInternalComputerUsePreviewToolCallItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string callId = default; + ComputerCallAction action = default; + IList pendingSafetyChecks = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("action"u8)) + { + action = ComputerCallAction.DeserializeComputerCallAction(prop.Value, options); + continue; + } + if (prop.NameEquals("pending_safety_checks"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ComputerCallSafetyCheck.DeserializeComputerCallSafetyCheck(item, options)); + } + pendingSafetyChecks = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerUsePreviewToolCallItemParam(kind, additionalBinaryDataProperties, callId, action, pendingSafetyChecks); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerUsePreviewToolCallItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerUsePreviewToolCallItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerUsePreviewToolCallItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerUsePreviewToolCallItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerUsePreviewToolCallItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerUsePreviewToolCallItemParam.cs b/src/Generated/Models/InternalComputerUsePreviewToolCallItemParam.cs new file mode 100644 index 000000000..b64137240 --- /dev/null +++ b/src/Generated/Models/InternalComputerUsePreviewToolCallItemParam.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerUsePreviewToolCallItemParam : InternalItemParam + { + public InternalComputerUsePreviewToolCallItemParam(string callId, ComputerCallAction action, IEnumerable pendingSafetyChecks) : base(InternalItemType.ComputerCall) + { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(action, nameof(action)); + Argument.AssertNotNull(pendingSafetyChecks, nameof(pendingSafetyChecks)); + + CallId = callId; + Action = action; + PendingSafetyChecks = pendingSafetyChecks.ToList(); + } + + internal InternalComputerUsePreviewToolCallItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string callId, ComputerCallAction action, IList pendingSafetyChecks) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + CallId = callId; + Action = action; + PendingSafetyChecks = pendingSafetyChecks ?? new ChangeTrackingList(); + } + + public string CallId { get; } + + public ComputerCallAction Action { get; } + + public IList PendingSafetyChecks { get; } + } +} diff --git a/src/Generated/Models/InternalComputerUsePreviewToolCallOutputItemParam.Serialization.cs b/src/Generated/Models/InternalComputerUsePreviewToolCallOutputItemParam.Serialization.cs new file mode 100644 index 000000000..8e3d1121c --- /dev/null +++ b/src/Generated/Models/InternalComputerUsePreviewToolCallOutputItemParam.Serialization.cs @@ -0,0 +1,155 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerUsePreviewToolCallOutputItemParam : IJsonModel + { + internal InternalComputerUsePreviewToolCallOutputItemParam() : this(InternalItemType.ComputerCallOutput, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerUsePreviewToolCallOutputItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("call_id") != true) + { + writer.WritePropertyName("call_id"u8); + writer.WriteStringValue(CallId); + } + if (Optional.IsCollectionDefined(AcknowledgedSafetyChecks) && _additionalBinaryDataProperties?.ContainsKey("acknowledged_safety_checks") != true) + { + writer.WritePropertyName("acknowledged_safety_checks"u8); + writer.WriteStartArray(); + foreach (ComputerCallSafetyCheck item in AcknowledgedSafetyChecks) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteObjectValue(Output, options); + } + } + + InternalComputerUsePreviewToolCallOutputItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalComputerUsePreviewToolCallOutputItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalComputerUsePreviewToolCallOutputItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalComputerUsePreviewToolCallOutputItemParam(document.RootElement, options); + } + + internal static InternalComputerUsePreviewToolCallOutputItemParam DeserializeInternalComputerUsePreviewToolCallOutputItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string callId = default; + IList acknowledgedSafetyChecks = default; + ComputerOutput output = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("acknowledged_safety_checks"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ComputerCallSafetyCheck.DeserializeComputerCallSafetyCheck(item, options)); + } + acknowledgedSafetyChecks = array; + continue; + } + if (prop.NameEquals("output"u8)) + { + output = ComputerOutput.DeserializeComputerOutput(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalComputerUsePreviewToolCallOutputItemParam(kind, additionalBinaryDataProperties, callId, acknowledgedSafetyChecks ?? new ChangeTrackingList(), output); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalComputerUsePreviewToolCallOutputItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalComputerUsePreviewToolCallOutputItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalComputerUsePreviewToolCallOutputItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalComputerUsePreviewToolCallOutputItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalComputerUsePreviewToolCallOutputItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalComputerUsePreviewToolCallOutputItemParam.cs b/src/Generated/Models/InternalComputerUsePreviewToolCallOutputItemParam.cs new file mode 100644 index 000000000..99ad4128c --- /dev/null +++ b/src/Generated/Models/InternalComputerUsePreviewToolCallOutputItemParam.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalComputerUsePreviewToolCallOutputItemParam : InternalItemParam + { + public InternalComputerUsePreviewToolCallOutputItemParam(string callId, ComputerOutput output) : base(InternalItemType.ComputerCallOutput) + { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(output, nameof(output)); + + CallId = callId; + AcknowledgedSafetyChecks = new ChangeTrackingList(); + Output = output; + } + + internal InternalComputerUsePreviewToolCallOutputItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string callId, IList acknowledgedSafetyChecks, ComputerOutput output) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + CallId = callId; + AcknowledgedSafetyChecks = acknowledgedSafetyChecks ?? new ChangeTrackingList(); + Output = output; + } + + public string CallId { get; } + + public IList AcknowledgedSafetyChecks { get; } + + public ComputerOutput Output { get; } + } +} diff --git a/src/Generated/Models/InternalComputerUsePreviewToolCallOutputOutputType.cs b/src/Generated/Models/InternalComputerUsePreviewToolCallOutputOutputType.cs new file mode 100644 index 000000000..f8c76b097 --- /dev/null +++ b/src/Generated/Models/InternalComputerUsePreviewToolCallOutputOutputType.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalComputerUsePreviewToolCallOutputOutputType : IEquatable + { + private readonly string _value; + private const string ScreenshotValue = "computer_screenshot"; + + public InternalComputerUsePreviewToolCallOutputOutputType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalComputerUsePreviewToolCallOutputOutputType Screenshot { get; } = new InternalComputerUsePreviewToolCallOutputOutputType(ScreenshotValue); + + public static bool operator ==(InternalComputerUsePreviewToolCallOutputOutputType left, InternalComputerUsePreviewToolCallOutputOutputType right) => left.Equals(right); + + public static bool operator !=(InternalComputerUsePreviewToolCallOutputOutputType left, InternalComputerUsePreviewToolCallOutputOutputType right) => !left.Equals(right); + + public static implicit operator InternalComputerUsePreviewToolCallOutputOutputType(string value) => new InternalComputerUsePreviewToolCallOutputOutputType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalComputerUsePreviewToolCallOutputOutputType other && Equals(other); + + public bool Equals(InternalComputerUsePreviewToolCallOutputOutputType 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/InternalContainerFileListResource.Serialization.cs b/src/Generated/Models/InternalContainerFileListResource.Serialization.cs new file mode 100644 index 000000000..43356e275 --- /dev/null +++ b/src/Generated/Models/InternalContainerFileListResource.Serialization.cs @@ -0,0 +1,192 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerFileListResource : IJsonModel + { + internal InternalContainerFileListResource() : this(null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerFileListResource)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalContainerFileResource item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalContainerFileListResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerFileListResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerFileListResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalContainerFileListResource(document.RootElement, options); + } + + internal static InternalContainerFileListResource DeserializeInternalContainerFileListResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + string firstId = default; + string lastId = default; + bool hasMore = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalContainerFileResource.DeserializeInternalContainerFileResource(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("first_id"u8)) + { + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + lastId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalContainerFileListResource( + @object, + data, + firstId, + lastId, + hasMore, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalContainerFileListResource)} does not support writing '{options.Format}' format."); + } + } + + InternalContainerFileListResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerFileListResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalContainerFileListResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalContainerFileListResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalContainerFileListResource.cs b/src/Generated/Models/InternalContainerFileListResource.cs new file mode 100644 index 000000000..3e38eccec --- /dev/null +++ b/src/Generated/Models/InternalContainerFileListResource.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerFileListResource + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalContainerFileListResource(IEnumerable data, string firstId, string lastId, bool hasMore) + { + Data = data.ToList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + } + + internal InternalContainerFileListResource(string @object, IList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "list"; + + internal IList Data { get; } + + public string FirstId { get; } + + public string LastId { get; } + + public bool HasMore { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalContainerFileResource.Serialization.cs b/src/Generated/Models/InternalContainerFileResource.Serialization.cs new file mode 100644 index 000000000..2ba733ee9 --- /dev/null +++ b/src/Generated/Models/InternalContainerFileResource.Serialization.cs @@ -0,0 +1,206 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerFileResource : IJsonModel + { + internal InternalContainerFileResource() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerFileResource)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("container_id") != true) + { + writer.WritePropertyName("container_id"u8); + writer.WriteStringValue(ContainerId); + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteNumberValue(Bytes); + } + if (_additionalBinaryDataProperties?.ContainsKey("path") != true) + { + writer.WritePropertyName("path"u8); + writer.WriteStringValue(Path); + } + if (_additionalBinaryDataProperties?.ContainsKey("source") != true) + { + writer.WritePropertyName("source"u8); + writer.WriteStringValue(Source); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalContainerFileResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerFileResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerFileResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalContainerFileResource(document.RootElement, options); + } + + internal static InternalContainerFileResource DeserializeInternalContainerFileResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + string @object = default; + string containerId = default; + DateTimeOffset createdAt = default; + int bytes = default; + string path = default; + string source = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("container_id"u8)) + { + containerId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + bytes = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("path"u8)) + { + path = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("source"u8)) + { + source = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalContainerFileResource( + id, + @object, + containerId, + createdAt, + bytes, + path, + source, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalContainerFileResource)} does not support writing '{options.Format}' format."); + } + } + + InternalContainerFileResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerFileResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalContainerFileResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalContainerFileResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalContainerFileResource.cs b/src/Generated/Models/InternalContainerFileResource.cs new file mode 100644 index 000000000..ef1fbf977 --- /dev/null +++ b/src/Generated/Models/InternalContainerFileResource.cs @@ -0,0 +1,57 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerFileResource + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalContainerFileResource(string id, string @object, string containerId, DateTimeOffset createdAt, int bytes, string path, string source) + { + Id = id; + Object = @object; + ContainerId = containerId; + CreatedAt = createdAt; + Bytes = bytes; + Path = path; + Source = source; + } + + internal InternalContainerFileResource(string id, string @object, string containerId, DateTimeOffset createdAt, int bytes, string path, string source, IDictionary additionalBinaryDataProperties) + { + Id = id; + Object = @object; + ContainerId = containerId; + CreatedAt = createdAt; + Bytes = bytes; + Path = path; + Source = source; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public string Object { get; } + + public string ContainerId { get; } + + public DateTimeOffset CreatedAt { get; } + + public int Bytes { get; } + + public string Path { get; } + + public string Source { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalContainerListResource.Serialization.cs b/src/Generated/Models/InternalContainerListResource.Serialization.cs new file mode 100644 index 000000000..403f8e51c --- /dev/null +++ b/src/Generated/Models/InternalContainerListResource.Serialization.cs @@ -0,0 +1,192 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerListResource : IJsonModel + { + internal InternalContainerListResource() : this(null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerListResource)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalContainerResource item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalContainerListResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerListResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerListResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalContainerListResource(document.RootElement, options); + } + + internal static InternalContainerListResource DeserializeInternalContainerListResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + string firstId = default; + string lastId = default; + bool hasMore = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalContainerResource.DeserializeInternalContainerResource(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("first_id"u8)) + { + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + lastId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalContainerListResource( + @object, + data, + firstId, + lastId, + hasMore, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalContainerListResource)} does not support writing '{options.Format}' format."); + } + } + + InternalContainerListResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerListResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalContainerListResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalContainerListResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalContainerListResource.cs b/src/Generated/Models/InternalContainerListResource.cs new file mode 100644 index 000000000..85d150ff9 --- /dev/null +++ b/src/Generated/Models/InternalContainerListResource.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerListResource + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalContainerListResource(IEnumerable data, string firstId, string lastId, bool hasMore) + { + Data = data.ToList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + } + + internal InternalContainerListResource(string @object, IList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "list"; + + internal IList Data { get; } + + public string FirstId { get; } + + public string LastId { get; } + + public bool HasMore { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalContainerResource.Serialization.cs b/src/Generated/Models/InternalContainerResource.Serialization.cs new file mode 100644 index 000000000..bc5ea226c --- /dev/null +++ b/src/Generated/Models/InternalContainerResource.Serialization.cs @@ -0,0 +1,198 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerResource : IJsonModel + { + internal InternalContainerResource() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerResource)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status); + } + if (Optional.IsDefined(ExpiresAfter) && _additionalBinaryDataProperties?.ContainsKey("expires_after") != true) + { + writer.WritePropertyName("expires_after"u8); + writer.WriteObjectValue(ExpiresAfter, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalContainerResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalContainerResource(document.RootElement, options); + } + + internal static InternalContainerResource DeserializeInternalContainerResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + string @object = default; + string name = default; + DateTimeOffset createdAt = default; + string status = default; + InternalContainerResourceExpiresAfter expiresAfter = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("status"u8)) + { + status = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("expires_after"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + expiresAfter = InternalContainerResourceExpiresAfter.DeserializeInternalContainerResourceExpiresAfter(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalContainerResource( + id, + @object, + name, + createdAt, + status, + expiresAfter, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalContainerResource)} does not support writing '{options.Format}' format."); + } + } + + InternalContainerResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalContainerResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalContainerResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalContainerResource.cs b/src/Generated/Models/InternalContainerResource.cs new file mode 100644 index 000000000..7cb0b986e --- /dev/null +++ b/src/Generated/Models/InternalContainerResource.cs @@ -0,0 +1,52 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerResource + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalContainerResource(string id, string @object, string name, DateTimeOffset createdAt, string status) + { + Id = id; + Object = @object; + Name = name; + CreatedAt = createdAt; + Status = status; + } + + internal InternalContainerResource(string id, string @object, string name, DateTimeOffset createdAt, string status, InternalContainerResourceExpiresAfter expiresAfter, IDictionary additionalBinaryDataProperties) + { + Id = id; + Object = @object; + Name = name; + CreatedAt = createdAt; + Status = status; + ExpiresAfter = expiresAfter; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public string Object { get; } + + public string Name { get; } + + public DateTimeOffset CreatedAt { get; } + + public string Status { get; } + + internal InternalContainerResourceExpiresAfter ExpiresAfter { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalContainerResourceExpiresAfter.Serialization.cs b/src/Generated/Models/InternalContainerResourceExpiresAfter.Serialization.cs new file mode 100644 index 000000000..7619ebf84 --- /dev/null +++ b/src/Generated/Models/InternalContainerResourceExpiresAfter.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerResourceExpiresAfter : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerResourceExpiresAfter)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Anchor) && _additionalBinaryDataProperties?.ContainsKey("anchor") != true) + { + writer.WritePropertyName("anchor"u8); + writer.WriteStringValue(Anchor); + } + if (Optional.IsDefined(Minutes) && _additionalBinaryDataProperties?.ContainsKey("minutes") != true) + { + writer.WritePropertyName("minutes"u8); + writer.WriteNumberValue(Minutes.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalContainerResourceExpiresAfter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerResourceExpiresAfter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalContainerResourceExpiresAfter)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalContainerResourceExpiresAfter(document.RootElement, options); + } + + internal static InternalContainerResourceExpiresAfter DeserializeInternalContainerResourceExpiresAfter(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string anchor = default; + int? minutes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("anchor"u8)) + { + anchor = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("minutes"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + minutes = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalContainerResourceExpiresAfter(anchor, minutes, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalContainerResourceExpiresAfter)} does not support writing '{options.Format}' format."); + } + } + + InternalContainerResourceExpiresAfter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalContainerResourceExpiresAfter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalContainerResourceExpiresAfter(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalContainerResourceExpiresAfter)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalContainerResourceExpiresAfter.cs b/src/Generated/Models/InternalContainerResourceExpiresAfter.cs new file mode 100644 index 000000000..47a300ec7 --- /dev/null +++ b/src/Generated/Models/InternalContainerResourceExpiresAfter.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Containers +{ + internal partial class InternalContainerResourceExpiresAfter + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalContainerResourceExpiresAfter() + { + } + + internal InternalContainerResourceExpiresAfter(string anchor, int? minutes, IDictionary additionalBinaryDataProperties) + { + Anchor = anchor; + Minutes = minutes; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Anchor { get; } + + public int? Minutes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCoordinate.Serialization.cs b/src/Generated/Models/InternalCoordinate.Serialization.cs new file mode 100644 index 000000000..96af80d6f --- /dev/null +++ b/src/Generated/Models/InternalCoordinate.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalCoordinate : IJsonModel + { + internal InternalCoordinate() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCoordinate)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("x") != true) + { + writer.WritePropertyName("x"u8); + writer.WriteNumberValue(X); + } + if (_additionalBinaryDataProperties?.ContainsKey("y") != true) + { + writer.WritePropertyName("y"u8); + writer.WriteNumberValue(Y); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCoordinate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCoordinate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCoordinate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCoordinate(document.RootElement, options); + } + + internal static InternalCoordinate DeserializeInternalCoordinate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int x = default; + int y = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("x"u8)) + { + x = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("y"u8)) + { + y = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCoordinate(x, y, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCoordinate)} does not support writing '{options.Format}' format."); + } + } + + InternalCoordinate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCoordinate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCoordinate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCoordinate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCoordinate.cs b/src/Generated/Models/InternalCoordinate.cs new file mode 100644 index 000000000..49eb36b9c --- /dev/null +++ b/src/Generated/Models/InternalCoordinate.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalCoordinate + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalCoordinate(int x, int y) + { + X = x; + Y = y; + } + + internal InternalCoordinate(int x, int y, IDictionary additionalBinaryDataProperties) + { + X = x; + Y = y; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public int X { get; set; } + + public int Y { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs index aa7a982d8..988a98d2f 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateAssistantRequestToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateAssistantRequestToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static InternalCreateAssistantRequestToolResources DeserializeInternalC fileSearch = FileSearchToolResources.DeserializeFileSearchToolResources(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateAssistantRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static InternalCreateAssistantRequestToolResources DeserializeInternalC BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateAssistantRequestToolResources)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateAssistantRequestToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateAssistantRequestToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalCreateAssistantRequestToolResources PersistableModelCr } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateAssistantRequestToolResources internalCreateAssistantRequestToolResources) - { - if (internalCreateAssistantRequestToolResources == null) - { - return null; - } - return BinaryContent.Create(internalCreateAssistantRequestToolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateAssistantRequestToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateAssistantRequestToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResources.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResources.cs index 0bdda1dc2..bed9514f3 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResources.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResources.cs @@ -22,7 +22,7 @@ internal InternalCreateAssistantRequestToolResources(InternalCreateAssistantRequ _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateAssistantRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } + internal InternalCreateAssistantRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } public FileSearchToolResources FileSearch { get; set; } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs index 7c1321157..61da53ca8 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateAssistantRequestToolResourcesCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateAssistantRequestToolResourcesCodeInterpreter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalCreateAssistantRequestToolResourcesCodeInterpreter Deser fileIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateAssistantRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalCreateAssistantRequestToolResourcesCodeInterpreter Deser BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateAssistantRequestToolResourcesCodeInterpreter)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateAssistantRequestToolResourcesCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateAssistantRequestToolResourcesCodeInterpreter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalCreateAssistantRequestToolResourcesCodeInterpreter Per } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateAssistantRequestToolResourcesCodeInterpreter internalCreateAssistantRequestToolResourcesCodeInterpreter) - { - if (internalCreateAssistantRequestToolResourcesCodeInterpreter == null) - { - return null; - } - return BinaryContent.Create(internalCreateAssistantRequestToolResourcesCodeInterpreter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateAssistantRequestToolResourcesCodeInterpreter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateAssistantRequestToolResourcesCodeInterpreter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.cs index a3cfe8ed0..e0b4a4118 100644 --- a/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalCreateAssistantRequestToolResourcesCodeInterpreter.cs @@ -12,14 +12,14 @@ internal partial class InternalCreateAssistantRequestToolResourcesCodeInterprete { private protected IDictionary _additionalBinaryDataProperties; - public InternalCreateAssistantRequestToolResourcesCodeInterpreter() + public InternalCreateAssistantRequestToolResourcesCodeInterpreter() : this(null, null) { - FileIds = new ChangeTrackingList(); } internal InternalCreateAssistantRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs b/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs index 6a9a7aaf9..de6c9c888 100644 --- a/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateBatchRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Batch { internal partial class InternalCreateBatchRequest : IJsonModel { - internal InternalCreateBatchRequest() + internal InternalCreateBatchRequest() : this(null, default, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,7 +45,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("completion_window") != true) { writer.WritePropertyName("completion_window"u8); - writer.WriteStringValue(CompletionWindow.ToString()); + writer.WriteStringValue(CompletionWindow); } if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) { @@ -62,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -85,6 +87,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateBatchRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateBatchRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -104,7 +107,7 @@ internal static InternalCreateBatchRequest DeserializeInternalCreateBatchRequest } string inputFileId = default; InternalCreateBatchRequestEndpoint endpoint = default; - InternalBatchCompletionTimeframe completionWindow = default; + string completionWindow = default; IDictionary metadata = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -121,7 +124,7 @@ internal static InternalCreateBatchRequest DeserializeInternalCreateBatchRequest } if (prop.NameEquals("completion_window"u8)) { - completionWindow = new InternalBatchCompletionTimeframe(prop.Value.GetString()); + completionWindow = prop.Value.GetString(); continue; } if (prop.NameEquals("metadata"u8)) @@ -145,6 +148,7 @@ internal static InternalCreateBatchRequest DeserializeInternalCreateBatchRequest metadata = dictionary; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateBatchRequest(inputFileId, endpoint, completionWindow, metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); @@ -152,13 +156,14 @@ internal static InternalCreateBatchRequest DeserializeInternalCreateBatchRequest BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateBatchRequest)} does not support writing '{options.Format}' format."); } @@ -166,6 +171,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateBatchRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateBatchRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +188,5 @@ protected virtual InternalCreateBatchRequest PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateBatchRequest internalCreateBatchRequest) - { - if (internalCreateBatchRequest == null) - { - return null; - } - return BinaryContent.Create(internalCreateBatchRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateBatchRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateBatchRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateBatchRequest.cs b/src/Generated/Models/InternalCreateBatchRequest.cs index c66d2b434..20141e211 100644 --- a/src/Generated/Models/InternalCreateBatchRequest.cs +++ b/src/Generated/Models/InternalCreateBatchRequest.cs @@ -19,20 +19,21 @@ internal InternalCreateBatchRequest(string inputFileId, InternalCreateBatchReque Metadata = new ChangeTrackingDictionary(); } - internal InternalCreateBatchRequest(string inputFileId, InternalCreateBatchRequestEndpoint endpoint, InternalBatchCompletionTimeframe completionWindow, IDictionary metadata, IDictionary additionalBinaryDataProperties) + internal InternalCreateBatchRequest(string inputFileId, InternalCreateBatchRequestEndpoint endpoint, string completionWindow, IDictionary metadata, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections InputFileId = inputFileId; Endpoint = endpoint; CompletionWindow = completionWindow; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } public string InputFileId { get; } - public InternalCreateBatchRequestEndpoint Endpoint { get; } + internal InternalCreateBatchRequestEndpoint Endpoint { get; } - public InternalBatchCompletionTimeframe CompletionWindow { get; } = "24h"; + public string CompletionWindow { get; } = "24h"; public IDictionary Metadata { get; } diff --git a/src/Generated/Models/InternalCreateBatchRequestEndpoint.cs b/src/Generated/Models/InternalCreateBatchRequestEndpoint.cs index 3ab4ffb5e..186a89103 100644 --- a/src/Generated/Models/InternalCreateBatchRequestEndpoint.cs +++ b/src/Generated/Models/InternalCreateBatchRequestEndpoint.cs @@ -21,9 +21,9 @@ public InternalCreateBatchRequestEndpoint(string value) _value = value; } - public static InternalCreateBatchRequestEndpoint V1ChatCompletions { get; } = new InternalCreateBatchRequestEndpoint(V1ChatCompletionsValue); + internal static InternalCreateBatchRequestEndpoint V1ChatCompletions { get; } = new InternalCreateBatchRequestEndpoint(V1ChatCompletionsValue); - public static InternalCreateBatchRequestEndpoint V1Embeddings { get; } = new InternalCreateBatchRequestEndpoint(V1EmbeddingsValue); + internal static InternalCreateBatchRequestEndpoint V1Embeddings { get; } = new InternalCreateBatchRequestEndpoint(V1EmbeddingsValue); public static bool operator ==(InternalCreateBatchRequestEndpoint left, InternalCreateBatchRequestEndpoint right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs deleted file mode 100644 index 7e5773244..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.Serialization.cs +++ /dev/null @@ -1,230 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Chat -{ - internal partial class InternalCreateChatCompletionFunctionResponse : IJsonModel - { - internal InternalCreateChatCompletionFunctionResponse() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalCreateChatCompletionFunctionResponse)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("id") != true) - { - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - } - if (_additionalBinaryDataProperties?.ContainsKey("choices") != true) - { - writer.WritePropertyName("choices"u8); - writer.WriteStartArray(); - foreach (InternalCreateChatCompletionFunctionResponseChoice item in Choices) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - if (_additionalBinaryDataProperties?.ContainsKey("created") != true) - { - writer.WritePropertyName("created"u8); - writer.WriteNumberValue(Created, "U"); - } - if (_additionalBinaryDataProperties?.ContainsKey("model") != true) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - } - if (Optional.IsDefined(SystemFingerprint) && _additionalBinaryDataProperties?.ContainsKey("system_fingerprint") != true) - { - writer.WritePropertyName("system_fingerprint"u8); - writer.WriteStringValue(SystemFingerprint); - } - if (_additionalBinaryDataProperties?.ContainsKey("object") != true) - { - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - } - if (Optional.IsDefined(Usage) && _additionalBinaryDataProperties?.ContainsKey("usage") != true) - { - writer.WritePropertyName("usage"u8); - writer.WriteObjectValue(Usage, options); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalCreateChatCompletionFunctionResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalCreateChatCompletionFunctionResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalCreateChatCompletionFunctionResponse)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalCreateChatCompletionFunctionResponse(document.RootElement, options); - } - - internal static InternalCreateChatCompletionFunctionResponse DeserializeInternalCreateChatCompletionFunctionResponse(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string id = default; - IList choices = default; - DateTimeOffset created = default; - string model = default; - string systemFingerprint = default; - InternalCreateChatCompletionFunctionResponseObject @object = default; - ChatTokenUsage usage = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("id"u8)) - { - id = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("choices"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(InternalCreateChatCompletionFunctionResponseChoice.DeserializeInternalCreateChatCompletionFunctionResponseChoice(item, options)); - } - choices = array; - continue; - } - if (prop.NameEquals("created"u8)) - { - created = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); - continue; - } - if (prop.NameEquals("model"u8)) - { - model = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("system_fingerprint"u8)) - { - systemFingerprint = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("object"u8)) - { - @object = new InternalCreateChatCompletionFunctionResponseObject(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("usage"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - usage = ChatTokenUsage.DeserializeChatTokenUsage(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalCreateChatCompletionFunctionResponse( - id, - choices, - created, - model, - systemFingerprint, - @object, - usage, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalCreateChatCompletionFunctionResponse)} does not support writing '{options.Format}' format."); - } - } - - InternalCreateChatCompletionFunctionResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalCreateChatCompletionFunctionResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalCreateChatCompletionFunctionResponse(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalCreateChatCompletionFunctionResponse)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateChatCompletionFunctionResponse internalCreateChatCompletionFunctionResponse) - { - if (internalCreateChatCompletionFunctionResponse == null) - { - return null; - } - return BinaryContent.Create(internalCreateChatCompletionFunctionResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateChatCompletionFunctionResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateChatCompletionFunctionResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.cs deleted file mode 100644 index 3f2b507f0..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponse.cs +++ /dev/null @@ -1,55 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenAI.Chat -{ - internal partial class InternalCreateChatCompletionFunctionResponse - { - private protected IDictionary _additionalBinaryDataProperties; - - internal InternalCreateChatCompletionFunctionResponse(string id, IEnumerable choices, DateTimeOffset created, string model) - { - Id = id; - Choices = choices.ToList(); - Created = created; - Model = model; - } - - internal InternalCreateChatCompletionFunctionResponse(string id, IList choices, DateTimeOffset created, string model, string systemFingerprint, InternalCreateChatCompletionFunctionResponseObject @object, ChatTokenUsage usage, IDictionary additionalBinaryDataProperties) - { - Id = id; - Choices = choices; - Created = created; - Model = model; - SystemFingerprint = systemFingerprint; - Object = @object; - Usage = usage; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public string Id { get; } - - public IList Choices { get; } - - public DateTimeOffset Created { get; } - - public string Model { get; } - - public string SystemFingerprint { get; } - - public InternalCreateChatCompletionFunctionResponseObject Object { get; } = "chat.completion"; - - public ChatTokenUsage Usage { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.Serialization.cs deleted file mode 100644 index 32e64ba51..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.Serialization.cs +++ /dev/null @@ -1,164 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Chat -{ - internal partial class InternalCreateChatCompletionFunctionResponseChoice : IJsonModel - { - internal InternalCreateChatCompletionFunctionResponseChoice() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalCreateChatCompletionFunctionResponseChoice)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("finish_reason") != true) - { - writer.WritePropertyName("finish_reason"u8); - writer.WriteStringValue(FinishReason.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("index") != true) - { - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - } - if (_additionalBinaryDataProperties?.ContainsKey("message") != true) - { - writer.WritePropertyName("message"u8); - writer.WriteObjectValue(Message, options); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalCreateChatCompletionFunctionResponseChoice IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalCreateChatCompletionFunctionResponseChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalCreateChatCompletionFunctionResponseChoice)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalCreateChatCompletionFunctionResponseChoice(document.RootElement, options); - } - - internal static InternalCreateChatCompletionFunctionResponseChoice DeserializeInternalCreateChatCompletionFunctionResponseChoice(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalCreateChatCompletionFunctionResponseChoiceFinishReason finishReason = default; - int index = default; - InternalChatCompletionResponseMessage message = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("finish_reason"u8)) - { - finishReason = new InternalCreateChatCompletionFunctionResponseChoiceFinishReason(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("index"u8)) - { - index = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("message"u8)) - { - message = InternalChatCompletionResponseMessage.DeserializeInternalChatCompletionResponseMessage(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalCreateChatCompletionFunctionResponseChoice(finishReason, index, message, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalCreateChatCompletionFunctionResponseChoice)} does not support writing '{options.Format}' format."); - } - } - - InternalCreateChatCompletionFunctionResponseChoice IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalCreateChatCompletionFunctionResponseChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalCreateChatCompletionFunctionResponseChoice(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalCreateChatCompletionFunctionResponseChoice)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateChatCompletionFunctionResponseChoice internalCreateChatCompletionFunctionResponseChoice) - { - if (internalCreateChatCompletionFunctionResponseChoice == null) - { - return null; - } - return BinaryContent.Create(internalCreateChatCompletionFunctionResponseChoice, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateChatCompletionFunctionResponseChoice(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateChatCompletionFunctionResponseChoice(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.cs deleted file mode 100644 index f47f718ba..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoice.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Chat -{ - internal partial class InternalCreateChatCompletionFunctionResponseChoice - { - private protected IDictionary _additionalBinaryDataProperties; - - internal InternalCreateChatCompletionFunctionResponseChoice(InternalCreateChatCompletionFunctionResponseChoiceFinishReason finishReason, int index, InternalChatCompletionResponseMessage message) - { - FinishReason = finishReason; - Index = index; - Message = message; - } - - internal InternalCreateChatCompletionFunctionResponseChoice(InternalCreateChatCompletionFunctionResponseChoiceFinishReason finishReason, int index, InternalChatCompletionResponseMessage message, IDictionary additionalBinaryDataProperties) - { - FinishReason = finishReason; - Index = index; - Message = message; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalCreateChatCompletionFunctionResponseChoiceFinishReason FinishReason { get; } - - public int Index { get; } - - public InternalChatCompletionResponseMessage Message { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoiceFinishReason.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoiceFinishReason.cs deleted file mode 100644 index eee67eec1..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseChoiceFinishReason.cs +++ /dev/null @@ -1,50 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionFunctionResponseChoiceFinishReason : IEquatable - { - private readonly string _value; - private const string StopValue = "stop"; - private const string LengthValue = "length"; - private const string FunctionCallValue = "function_call"; - private const string ContentFilterValue = "content_filter"; - - public InternalCreateChatCompletionFunctionResponseChoiceFinishReason(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionFunctionResponseChoiceFinishReason Stop { get; } = new InternalCreateChatCompletionFunctionResponseChoiceFinishReason(StopValue); - - public static InternalCreateChatCompletionFunctionResponseChoiceFinishReason Length { get; } = new InternalCreateChatCompletionFunctionResponseChoiceFinishReason(LengthValue); - - public static InternalCreateChatCompletionFunctionResponseChoiceFinishReason FunctionCall { get; } = new InternalCreateChatCompletionFunctionResponseChoiceFinishReason(FunctionCallValue); - - public static InternalCreateChatCompletionFunctionResponseChoiceFinishReason ContentFilter { get; } = new InternalCreateChatCompletionFunctionResponseChoiceFinishReason(ContentFilterValue); - - public static bool operator ==(InternalCreateChatCompletionFunctionResponseChoiceFinishReason left, InternalCreateChatCompletionFunctionResponseChoiceFinishReason right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionFunctionResponseChoiceFinishReason left, InternalCreateChatCompletionFunctionResponseChoiceFinishReason right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionFunctionResponseChoiceFinishReason(string value) => new InternalCreateChatCompletionFunctionResponseChoiceFinishReason(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionFunctionResponseChoiceFinishReason other && Equals(other); - - public bool Equals(InternalCreateChatCompletionFunctionResponseChoiceFinishReason 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/InternalCreateChatCompletionFunctionResponseObject.cs b/src/Generated/Models/InternalCreateChatCompletionFunctionResponseObject.cs deleted file mode 100644 index 67e58e465..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionFunctionResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionFunctionResponseObject : IEquatable - { - private readonly string _value; - private const string ChatCompletionValue = "chat.completion"; - - public InternalCreateChatCompletionFunctionResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionFunctionResponseObject ChatCompletion { get; } = new InternalCreateChatCompletionFunctionResponseObject(ChatCompletionValue); - - public static bool operator ==(InternalCreateChatCompletionFunctionResponseObject left, InternalCreateChatCompletionFunctionResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionFunctionResponseObject left, InternalCreateChatCompletionFunctionResponseObject right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionFunctionResponseObject(string value) => new InternalCreateChatCompletionFunctionResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionFunctionResponseObject other && Equals(other); - - public bool Equals(InternalCreateChatCompletionFunctionResponseObject 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/InternalCreateChatCompletionRequestModality.cs b/src/Generated/Models/InternalCreateChatCompletionRequestModality.cs index a0cb97dcc..794b07602 100644 --- a/src/Generated/Models/InternalCreateChatCompletionRequestModality.cs +++ b/src/Generated/Models/InternalCreateChatCompletionRequestModality.cs @@ -21,9 +21,9 @@ public InternalCreateChatCompletionRequestModality(string value) _value = value; } - public static InternalCreateChatCompletionRequestModality Text { get; } = new InternalCreateChatCompletionRequestModality(TextValue); + internal static InternalCreateChatCompletionRequestModality Text { get; } = new InternalCreateChatCompletionRequestModality(TextValue); - public static InternalCreateChatCompletionRequestModality Audio { get; } = new InternalCreateChatCompletionRequestModality(AudioValue); + internal static InternalCreateChatCompletionRequestModality Audio { get; } = new InternalCreateChatCompletionRequestModality(AudioValue); public static bool operator ==(InternalCreateChatCompletionRequestModality left, InternalCreateChatCompletionRequestModality right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateChatCompletionRequestModel.cs b/src/Generated/Models/InternalCreateChatCompletionRequestModel.cs deleted file mode 100644 index fed976d93..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionRequestModel.cs +++ /dev/null @@ -1,170 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionRequestModel : IEquatable - { - private readonly string _value; - private const string O3MiniValue = "o3-mini"; - private const string O3Mini20250131Value = "o3-mini-2025-01-31"; - private const string O1Value = "o1"; - private const string O120241217Value = "o1-2024-12-17"; - private const string O1PreviewValue = "o1-preview"; - private const string O1Preview20240912Value = "o1-preview-2024-09-12"; - private const string O1MiniValue = "o1-mini"; - private const string O1Mini20240912Value = "o1-mini-2024-09-12"; - private const string ComputerUsePreviewValue = "computer-use-preview"; - private const string ComputerUsePreview20250204Value = "computer-use-preview-2025-02-04"; - private const string ComputerUsePreview20250311Value = "computer-use-preview-2025-03-11"; - private const string Gpt45PreviewValue = "gpt-4.5-preview"; - private const string Gpt45Preview20250227Value = "gpt-4.5-preview-2025-02-27"; - private const string Gpt4oValue = "gpt-4o"; - private const string Gpt4o20241120Value = "gpt-4o-2024-11-20"; - private const string Gpt4o20240806Value = "gpt-4o-2024-08-06"; - private const string Gpt4o20240513Value = "gpt-4o-2024-05-13"; - private const string Gpt4oAudioPreviewValue = "gpt-4o-audio-preview"; - private const string Gpt4oAudioPreview20241001Value = "gpt-4o-audio-preview-2024-10-01"; - private const string Gpt4oAudioPreview20241217Value = "gpt-4o-audio-preview-2024-12-17"; - private const string Gpt4oMiniAudioPreviewValue = "gpt-4o-mini-audio-preview"; - private const string Gpt4oMiniAudioPreview20241217Value = "gpt-4o-mini-audio-preview-2024-12-17"; - private const string Chatgpt4oLatestValue = "chatgpt-4o-latest"; - private const string Gpt4oMiniValue = "gpt-4o-mini"; - private const string Gpt4oMini20240718Value = "gpt-4o-mini-2024-07-18"; - private const string Gpt4TurboValue = "gpt-4-turbo"; - private const string Gpt4Turbo20240409Value = "gpt-4-turbo-2024-04-09"; - private const string Gpt40125PreviewValue = "gpt-4-0125-preview"; - private const string Gpt4TurboPreviewValue = "gpt-4-turbo-preview"; - private const string Gpt41106PreviewValue = "gpt-4-1106-preview"; - private const string Gpt4VisionPreviewValue = "gpt-4-vision-preview"; - private const string Gpt4Value = "gpt-4"; - private const string Gpt40314Value = "gpt-4-0314"; - private const string Gpt40613Value = "gpt-4-0613"; - private const string Gpt432kValue = "gpt-4-32k"; - private const string Gpt432k0314Value = "gpt-4-32k-0314"; - private const string Gpt432k0613Value = "gpt-4-32k-0613"; - private const string Gpt35TurboValue = "gpt-3.5-turbo"; - private const string Gpt35Turbo16kValue = "gpt-3.5-turbo-16k"; - private const string Gpt35Turbo0301Value = "gpt-3.5-turbo-0301"; - private const string Gpt35Turbo0613Value = "gpt-3.5-turbo-0613"; - private const string Gpt35Turbo1106Value = "gpt-3.5-turbo-1106"; - private const string Gpt35Turbo0125Value = "gpt-3.5-turbo-0125"; - private const string Gpt35Turbo16k0613Value = "gpt-3.5-turbo-16k-0613"; - - public InternalCreateChatCompletionRequestModel(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionRequestModel O3Mini { get; } = new InternalCreateChatCompletionRequestModel(O3MiniValue); - - public static InternalCreateChatCompletionRequestModel O3Mini20250131 { get; } = new InternalCreateChatCompletionRequestModel(O3Mini20250131Value); - - public static InternalCreateChatCompletionRequestModel O1 { get; } = new InternalCreateChatCompletionRequestModel(O1Value); - - public static InternalCreateChatCompletionRequestModel O120241217 { get; } = new InternalCreateChatCompletionRequestModel(O120241217Value); - - public static InternalCreateChatCompletionRequestModel O1Preview { get; } = new InternalCreateChatCompletionRequestModel(O1PreviewValue); - - public static InternalCreateChatCompletionRequestModel O1Preview20240912 { get; } = new InternalCreateChatCompletionRequestModel(O1Preview20240912Value); - - public static InternalCreateChatCompletionRequestModel O1Mini { get; } = new InternalCreateChatCompletionRequestModel(O1MiniValue); - - public static InternalCreateChatCompletionRequestModel O1Mini20240912 { get; } = new InternalCreateChatCompletionRequestModel(O1Mini20240912Value); - - public static InternalCreateChatCompletionRequestModel ComputerUsePreview { get; } = new InternalCreateChatCompletionRequestModel(ComputerUsePreviewValue); - - public static InternalCreateChatCompletionRequestModel ComputerUsePreview20250204 { get; } = new InternalCreateChatCompletionRequestModel(ComputerUsePreview20250204Value); - - public static InternalCreateChatCompletionRequestModel ComputerUsePreview20250311 { get; } = new InternalCreateChatCompletionRequestModel(ComputerUsePreview20250311Value); - - public static InternalCreateChatCompletionRequestModel Gpt45Preview { get; } = new InternalCreateChatCompletionRequestModel(Gpt45PreviewValue); - - public static InternalCreateChatCompletionRequestModel Gpt45Preview20250227 { get; } = new InternalCreateChatCompletionRequestModel(Gpt45Preview20250227Value); - - public static InternalCreateChatCompletionRequestModel Gpt4o { get; } = new InternalCreateChatCompletionRequestModel(Gpt4oValue); - - public static InternalCreateChatCompletionRequestModel Gpt4o20241120 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4o20241120Value); - - public static InternalCreateChatCompletionRequestModel Gpt4o20240806 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4o20240806Value); - - public static InternalCreateChatCompletionRequestModel Gpt4o20240513 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4o20240513Value); - - public static InternalCreateChatCompletionRequestModel Gpt4oAudioPreview { get; } = new InternalCreateChatCompletionRequestModel(Gpt4oAudioPreviewValue); - - public static InternalCreateChatCompletionRequestModel Gpt4oAudioPreview20241001 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4oAudioPreview20241001Value); - - public static InternalCreateChatCompletionRequestModel Gpt4oAudioPreview20241217 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4oAudioPreview20241217Value); - - public static InternalCreateChatCompletionRequestModel Gpt4oMiniAudioPreview { get; } = new InternalCreateChatCompletionRequestModel(Gpt4oMiniAudioPreviewValue); - - public static InternalCreateChatCompletionRequestModel Gpt4oMiniAudioPreview20241217 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4oMiniAudioPreview20241217Value); - - public static InternalCreateChatCompletionRequestModel Chatgpt4oLatest { get; } = new InternalCreateChatCompletionRequestModel(Chatgpt4oLatestValue); - - public static InternalCreateChatCompletionRequestModel Gpt4oMini { get; } = new InternalCreateChatCompletionRequestModel(Gpt4oMiniValue); - - public static InternalCreateChatCompletionRequestModel Gpt4oMini20240718 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4oMini20240718Value); - - public static InternalCreateChatCompletionRequestModel Gpt4Turbo { get; } = new InternalCreateChatCompletionRequestModel(Gpt4TurboValue); - - public static InternalCreateChatCompletionRequestModel Gpt4Turbo20240409 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4Turbo20240409Value); - - public static InternalCreateChatCompletionRequestModel Gpt40125Preview { get; } = new InternalCreateChatCompletionRequestModel(Gpt40125PreviewValue); - - public static InternalCreateChatCompletionRequestModel Gpt4TurboPreview { get; } = new InternalCreateChatCompletionRequestModel(Gpt4TurboPreviewValue); - - public static InternalCreateChatCompletionRequestModel Gpt41106Preview { get; } = new InternalCreateChatCompletionRequestModel(Gpt41106PreviewValue); - - public static InternalCreateChatCompletionRequestModel Gpt4VisionPreview { get; } = new InternalCreateChatCompletionRequestModel(Gpt4VisionPreviewValue); - - public static InternalCreateChatCompletionRequestModel Gpt4 { get; } = new InternalCreateChatCompletionRequestModel(Gpt4Value); - - public static InternalCreateChatCompletionRequestModel Gpt40314 { get; } = new InternalCreateChatCompletionRequestModel(Gpt40314Value); - - public static InternalCreateChatCompletionRequestModel Gpt40613 { get; } = new InternalCreateChatCompletionRequestModel(Gpt40613Value); - - public static InternalCreateChatCompletionRequestModel Gpt432k { get; } = new InternalCreateChatCompletionRequestModel(Gpt432kValue); - - public static InternalCreateChatCompletionRequestModel Gpt432k0314 { get; } = new InternalCreateChatCompletionRequestModel(Gpt432k0314Value); - - public static InternalCreateChatCompletionRequestModel Gpt432k0613 { get; } = new InternalCreateChatCompletionRequestModel(Gpt432k0613Value); - - public static InternalCreateChatCompletionRequestModel Gpt35Turbo { get; } = new InternalCreateChatCompletionRequestModel(Gpt35TurboValue); - - public static InternalCreateChatCompletionRequestModel Gpt35Turbo16k { get; } = new InternalCreateChatCompletionRequestModel(Gpt35Turbo16kValue); - - public static InternalCreateChatCompletionRequestModel Gpt35Turbo0301 { get; } = new InternalCreateChatCompletionRequestModel(Gpt35Turbo0301Value); - - public static InternalCreateChatCompletionRequestModel Gpt35Turbo0613 { get; } = new InternalCreateChatCompletionRequestModel(Gpt35Turbo0613Value); - - public static InternalCreateChatCompletionRequestModel Gpt35Turbo1106 { get; } = new InternalCreateChatCompletionRequestModel(Gpt35Turbo1106Value); - - public static InternalCreateChatCompletionRequestModel Gpt35Turbo0125 { get; } = new InternalCreateChatCompletionRequestModel(Gpt35Turbo0125Value); - - public static InternalCreateChatCompletionRequestModel Gpt35Turbo16k0613 { get; } = new InternalCreateChatCompletionRequestModel(Gpt35Turbo16k0613Value); - - public static bool operator ==(InternalCreateChatCompletionRequestModel left, InternalCreateChatCompletionRequestModel right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionRequestModel left, InternalCreateChatCompletionRequestModel right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionRequestModel(string value) => new InternalCreateChatCompletionRequestModel(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionRequestModel other && Equals(other); - - public bool Equals(InternalCreateChatCompletionRequestModel 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/InternalCreateChatCompletionRequestServiceTier.cs b/src/Generated/Models/InternalCreateChatCompletionRequestServiceTier.cs deleted file mode 100644 index 17221cfbe..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionRequestServiceTier.cs +++ /dev/null @@ -1,44 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionRequestServiceTier : IEquatable - { - private readonly string _value; - private const string AutoValue = "auto"; - private const string DefaultValue = "default"; - - public InternalCreateChatCompletionRequestServiceTier(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionRequestServiceTier Auto { get; } = new InternalCreateChatCompletionRequestServiceTier(AutoValue); - - public static InternalCreateChatCompletionRequestServiceTier Default { get; } = new InternalCreateChatCompletionRequestServiceTier(DefaultValue); - - public static bool operator ==(InternalCreateChatCompletionRequestServiceTier left, InternalCreateChatCompletionRequestServiceTier right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionRequestServiceTier left, InternalCreateChatCompletionRequestServiceTier right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionRequestServiceTier(string value) => new InternalCreateChatCompletionRequestServiceTier(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionRequestServiceTier other && Equals(other); - - public bool Equals(InternalCreateChatCompletionRequestServiceTier 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/InternalCreateChatCompletionRequestToolChoice.cs b/src/Generated/Models/InternalCreateChatCompletionRequestToolChoice.cs index dbbe528ee..01244b631 100644 --- a/src/Generated/Models/InternalCreateChatCompletionRequestToolChoice.cs +++ b/src/Generated/Models/InternalCreateChatCompletionRequestToolChoice.cs @@ -22,11 +22,11 @@ public InternalCreateChatCompletionRequestToolChoice(string value) _value = value; } - public static InternalCreateChatCompletionRequestToolChoice None { get; } = new InternalCreateChatCompletionRequestToolChoice(NoneValue); + internal static InternalCreateChatCompletionRequestToolChoice None { get; } = new InternalCreateChatCompletionRequestToolChoice(NoneValue); - public static InternalCreateChatCompletionRequestToolChoice Auto { get; } = new InternalCreateChatCompletionRequestToolChoice(AutoValue); + internal static InternalCreateChatCompletionRequestToolChoice Auto { get; } = new InternalCreateChatCompletionRequestToolChoice(AutoValue); - public static InternalCreateChatCompletionRequestToolChoice Required { get; } = new InternalCreateChatCompletionRequestToolChoice(RequiredValue); + internal static InternalCreateChatCompletionRequestToolChoice Required { get; } = new InternalCreateChatCompletionRequestToolChoice(RequiredValue); public static bool operator ==(InternalCreateChatCompletionRequestToolChoice left, InternalCreateChatCompletionRequestToolChoice right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.Serialization.cs index 055a3ffea..a40b36d57 100644 --- a/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.Internal; @@ -25,6 +25,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,13 +36,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind); } if (_additionalBinaryDataProperties?.ContainsKey("approximate") != true) { writer.WritePropertyName("approximate"u8); writer.WriteObjectValue(Approximate, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,14 +85,14 @@ internal static InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 { return null; } - InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type @type = default; + string kind = default; InternalWebSearchLocation approximate = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type(prop.Value.GetString()); + kind = prop.Value.GetString(); continue; } if (prop.NameEquals("approximate"u8)) @@ -97,20 +100,22 @@ internal static InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 approximate = InternalWebSearchLocation.DeserializeInternalWebSearchLocation(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(@type, approximate, additionalBinaryDataProperties); + return new InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(kind, approximate, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1)} does not support writing '{options.Format}' format."); } @@ -118,6 +123,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -134,21 +140,5 @@ protected virtual InternalCreateChatCompletionRequestWebSearchOptionsUserLocatio } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1 internalCreateChatCompletionRequestWebSearchOptionsUserLocation1) - { - if (internalCreateChatCompletionRequestWebSearchOptionsUserLocation1 == null) - { - return null; - } - return BinaryContent.Create(internalCreateChatCompletionRequestWebSearchOptionsUserLocation1, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.cs b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.cs index 60833a036..1bce30853 100644 --- a/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.cs +++ b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1.cs @@ -13,23 +13,23 @@ internal partial class InternalCreateChatCompletionRequestWebSearchOptionsUserLo { private protected IDictionary _additionalBinaryDataProperties; - public InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(InternalWebSearchLocation approximate) + internal InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(InternalWebSearchLocation approximate) { Argument.AssertNotNull(approximate, nameof(approximate)); Approximate = approximate; } - internal InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type @type, InternalWebSearchLocation approximate, IDictionary additionalBinaryDataProperties) + internal InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1(string kind, InternalWebSearchLocation approximate, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; Approximate = approximate; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type Type { get; } = "approximate"; + public string Kind { get; } = "approximate"; - public InternalWebSearchLocation Approximate { get; } + internal InternalWebSearchLocation Approximate { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type.cs b/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type.cs deleted file mode 100644 index 867e5f9a8..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type : IEquatable - { - private readonly string _value; - private const string ApproximateValue = "approximate"; - - public InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type Approximate { get; } = new InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type(ApproximateValue); - - public static bool operator ==(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type left, InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type left, InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type(string value) => new InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type other && Equals(other); - - public bool Equals(InternalCreateChatCompletionRequestWebSearchOptionsUserLocation1Type 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/InternalCreateChatCompletionResponseChoice.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs index 497faa34a..f2105c295 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,6 +59,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("logprobs"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -81,6 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateChatCompletionResponseChoice IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionResponseChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -130,6 +133,7 @@ internal static InternalCreateChatCompletionResponseChoice DeserializeInternalCr logprobs = InternalCreateChatCompletionResponseChoiceLogprobs.DeserializeInternalCreateChatCompletionResponseChoiceLogprobs(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionResponseChoice(finishReason, index, message, logprobs, additionalBinaryDataProperties); @@ -137,13 +141,14 @@ internal static InternalCreateChatCompletionResponseChoice DeserializeInternalCr BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateChatCompletionResponseChoice)} does not support writing '{options.Format}' format."); } @@ -151,6 +156,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateChatCompletionResponseChoice IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionResponseChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -167,21 +173,5 @@ protected virtual InternalCreateChatCompletionResponseChoice PersistableModelCre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateChatCompletionResponseChoice internalCreateChatCompletionResponseChoice) - { - if (internalCreateChatCompletionResponseChoice == null) - { - return null; - } - return BinaryContent.Create(internalCreateChatCompletionResponseChoice, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateChatCompletionResponseChoice(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateChatCompletionResponseChoice(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs index 974c9356f..f8c8207de 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoice.cs @@ -32,9 +32,9 @@ internal InternalCreateChatCompletionResponseChoice(ChatFinishReason finishReaso public int Index { get; } - public InternalChatCompletionResponseMessage Message { get; } + internal InternalChatCompletionResponseMessage Message { get; } - public InternalCreateChatCompletionResponseChoiceLogprobs Logprobs { get; } + internal InternalCreateChatCompletionResponseChoiceLogprobs Logprobs { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs index 6c5dc43d9..f418a7832 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8Js writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,40 +28,29 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalCreateChatCompletionResponseChoiceLogprobs)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Content)) + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (ChatTokenLogProbabilityDetails item in Content) { - writer.WritePropertyName("content"u8); - writer.WriteStartArray(); - foreach (ChatTokenLogProbabilityDetails item in Content) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("content"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Refusal)) + writer.WritePropertyName("refusal"u8); + writer.WriteStartArray(); + foreach (ChatTokenLogProbabilityDetails item in Refusal) { - writer.WritePropertyName("refusal"u8); - writer.WriteStartArray(); - foreach (ChatTokenLogProbabilityDetails item in Refusal) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("refusal"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +74,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateChatCompletionResponseChoiceLogprobs IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionResponseChoiceLogprobs JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -136,6 +127,7 @@ internal static InternalCreateChatCompletionResponseChoiceLogprobs DeserializeIn refusal = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionResponseChoiceLogprobs(content, refusal, additionalBinaryDataProperties); @@ -143,13 +135,14 @@ internal static InternalCreateChatCompletionResponseChoiceLogprobs DeserializeIn BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateChatCompletionResponseChoiceLogprobs)} does not support writing '{options.Format}' format."); } @@ -157,6 +150,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateChatCompletionResponseChoiceLogprobs IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionResponseChoiceLogprobs PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -173,21 +167,5 @@ protected virtual InternalCreateChatCompletionResponseChoiceLogprobs Persistable } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateChatCompletionResponseChoiceLogprobs internalCreateChatCompletionResponseChoiceLogprobs) - { - if (internalCreateChatCompletionResponseChoiceLogprobs == null) - { - return null; - } - return BinaryContent.Create(internalCreateChatCompletionResponseChoiceLogprobs, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateChatCompletionResponseChoiceLogprobs(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateChatCompletionResponseChoiceLogprobs(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.cs b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.cs index 33eb44cde..e8b812aab 100644 --- a/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.cs +++ b/src/Generated/Models/InternalCreateChatCompletionResponseChoiceLogprobs.cs @@ -12,16 +12,15 @@ internal partial class InternalCreateChatCompletionResponseChoiceLogprobs { private protected IDictionary _additionalBinaryDataProperties; - internal InternalCreateChatCompletionResponseChoiceLogprobs() + internal InternalCreateChatCompletionResponseChoiceLogprobs() : this(null, null, null) { - Content = new ChangeTrackingList(); - Refusal = new ChangeTrackingList(); } internal InternalCreateChatCompletionResponseChoiceLogprobs(IReadOnlyList content, IReadOnlyList refusal, IDictionary additionalBinaryDataProperties) { - Content = content; - Refusal = refusal; + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); + Refusal = refusal ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCreateChatCompletionResponseObject.cs b/src/Generated/Models/InternalCreateChatCompletionResponseObject.cs deleted file mode 100644 index 2ec8db01b..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionResponseObject : IEquatable - { - private readonly string _value; - private const string ChatCompletionValue = "chat.completion"; - - public InternalCreateChatCompletionResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionResponseObject ChatCompletion { get; } = new InternalCreateChatCompletionResponseObject(ChatCompletionValue); - - public static bool operator ==(InternalCreateChatCompletionResponseObject left, InternalCreateChatCompletionResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionResponseObject left, InternalCreateChatCompletionResponseObject right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionResponseObject(string value) => new InternalCreateChatCompletionResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionResponseObject other && Equals(other); - - public bool Equals(InternalCreateChatCompletionResponseObject 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/InternalCreateChatCompletionResponseServiceTier.cs b/src/Generated/Models/InternalCreateChatCompletionResponseServiceTier.cs deleted file mode 100644 index e554b9485..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionResponseServiceTier.cs +++ /dev/null @@ -1,44 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionResponseServiceTier : IEquatable - { - private readonly string _value; - private const string ScaleValue = "scale"; - private const string DefaultValue = "default"; - - public InternalCreateChatCompletionResponseServiceTier(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionResponseServiceTier Scale { get; } = new InternalCreateChatCompletionResponseServiceTier(ScaleValue); - - public static InternalCreateChatCompletionResponseServiceTier Default { get; } = new InternalCreateChatCompletionResponseServiceTier(DefaultValue); - - public static bool operator ==(InternalCreateChatCompletionResponseServiceTier left, InternalCreateChatCompletionResponseServiceTier right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionResponseServiceTier left, InternalCreateChatCompletionResponseServiceTier right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionResponseServiceTier(string value) => new InternalCreateChatCompletionResponseServiceTier(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionResponseServiceTier other && Equals(other); - - public bool Equals(InternalCreateChatCompletionResponseServiceTier 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/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs index fe46ae55e..021db5d6e 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -16,6 +16,7 @@ internal InternalCreateChatCompletionStreamResponseChoice() { } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -50,6 +51,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("finish_reason"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -73,6 +75,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateChatCompletionStreamResponseChoice IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionStreamResponseChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -86,13 +89,14 @@ protected virtual InternalCreateChatCompletionStreamResponseChoice JsonModelCrea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseChoice)} does not support writing '{options.Format}' format."); } @@ -100,6 +104,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateChatCompletionStreamResponseChoice IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionStreamResponseChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,21 +121,5 @@ protected virtual InternalCreateChatCompletionStreamResponseChoice PersistableMo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateChatCompletionStreamResponseChoice internalCreateChatCompletionStreamResponseChoice) - { - if (internalCreateChatCompletionStreamResponseChoice == null) - { - return null; - } - return BinaryContent.Create(internalCreateChatCompletionStreamResponseChoice, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateChatCompletionStreamResponseChoice(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateChatCompletionStreamResponseChoice(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs index 988a4a3c8..bdf01947b 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoice.cs @@ -27,9 +27,9 @@ internal InternalCreateChatCompletionStreamResponseChoice(InternalChatCompletion _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalChatCompletionStreamResponseDelta Delta { get; } + internal InternalChatCompletionStreamResponseDelta Delta { get; } - public InternalCreateChatCompletionStreamResponseChoiceLogprobs Logprobs { get; } + internal InternalCreateChatCompletionStreamResponseChoiceLogprobs Logprobs { get; } public int Index { get; } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceFinishReason.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceFinishReason.cs index deec1998c..20bdd5a96 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceFinishReason.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceFinishReason.cs @@ -24,15 +24,15 @@ public InternalCreateChatCompletionStreamResponseChoiceFinishReason(string value _value = value; } - public static InternalCreateChatCompletionStreamResponseChoiceFinishReason Stop { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(StopValue); + internal static InternalCreateChatCompletionStreamResponseChoiceFinishReason Stop { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(StopValue); - public static InternalCreateChatCompletionStreamResponseChoiceFinishReason Length { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(LengthValue); + internal static InternalCreateChatCompletionStreamResponseChoiceFinishReason Length { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(LengthValue); - public static InternalCreateChatCompletionStreamResponseChoiceFinishReason ToolCalls { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(ToolCallsValue); + internal static InternalCreateChatCompletionStreamResponseChoiceFinishReason ToolCalls { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(ToolCallsValue); - public static InternalCreateChatCompletionStreamResponseChoiceFinishReason ContentFilter { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(ContentFilterValue); + internal static InternalCreateChatCompletionStreamResponseChoiceFinishReason ContentFilter { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(ContentFilterValue); - public static InternalCreateChatCompletionStreamResponseChoiceFinishReason FunctionCall { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(FunctionCallValue); + internal static InternalCreateChatCompletionStreamResponseChoiceFinishReason FunctionCall { get; } = new InternalCreateChatCompletionStreamResponseChoiceFinishReason(FunctionCallValue); public static bool operator ==(InternalCreateChatCompletionStreamResponseChoiceFinishReason left, InternalCreateChatCompletionStreamResponseChoiceFinishReason right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs index bced98975..a07620aae 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write( writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,40 +28,29 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseChoiceLogprobs)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Content)) + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (ChatTokenLogProbabilityDetails item in Content) { - writer.WritePropertyName("content"u8); - writer.WriteStartArray(); - foreach (ChatTokenLogProbabilityDetails item in Content) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("content"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Refusal)) + writer.WritePropertyName("refusal"u8); + writer.WriteStartArray(); + foreach (ChatTokenLogProbabilityDetails item in Refusal) { - writer.WritePropertyName("refusal"u8); - writer.WriteStartArray(); - foreach (ChatTokenLogProbabilityDetails item in Refusal) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - else - { - writer.WriteNull("refusal"u8); + writer.WriteObjectValue(item, options); } + writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +74,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateChatCompletionStreamResponseChoiceLogprobs IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionStreamResponseChoiceLogprobs JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -136,6 +127,7 @@ internal static InternalCreateChatCompletionStreamResponseChoiceLogprobs Deseria refusal = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateChatCompletionStreamResponseChoiceLogprobs(content, refusal, additionalBinaryDataProperties); @@ -143,13 +135,14 @@ internal static InternalCreateChatCompletionStreamResponseChoiceLogprobs Deseria BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseChoiceLogprobs)} does not support writing '{options.Format}' format."); } @@ -157,6 +150,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateChatCompletionStreamResponseChoiceLogprobs IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateChatCompletionStreamResponseChoiceLogprobs PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -173,21 +167,5 @@ protected virtual InternalCreateChatCompletionStreamResponseChoiceLogprobs Persi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateChatCompletionStreamResponseChoiceLogprobs internalCreateChatCompletionStreamResponseChoiceLogprobs) - { - if (internalCreateChatCompletionStreamResponseChoiceLogprobs == null) - { - return null; - } - return BinaryContent.Create(internalCreateChatCompletionStreamResponseChoiceLogprobs, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateChatCompletionStreamResponseChoiceLogprobs(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateChatCompletionStreamResponseChoiceLogprobs(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.cs index 58c6b0aee..2d8fc8c7e 100644 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.cs +++ b/src/Generated/Models/InternalCreateChatCompletionStreamResponseChoiceLogprobs.cs @@ -12,16 +12,15 @@ internal partial class InternalCreateChatCompletionStreamResponseChoiceLogprobs { private protected IDictionary _additionalBinaryDataProperties; - internal InternalCreateChatCompletionStreamResponseChoiceLogprobs() + internal InternalCreateChatCompletionStreamResponseChoiceLogprobs() : this(null, null, null) { - Content = new ChangeTrackingList(); - Refusal = new ChangeTrackingList(); } internal InternalCreateChatCompletionStreamResponseChoiceLogprobs(IReadOnlyList content, IReadOnlyList refusal, IDictionary additionalBinaryDataProperties) { - Content = content; - Refusal = refusal; + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); + Refusal = refusal ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseObject.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseObject.cs deleted file mode 100644 index dd74ac7ff..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionStreamResponseObject : IEquatable - { - private readonly string _value; - private const string ChatCompletionChunkValue = "chat.completion.chunk"; - - public InternalCreateChatCompletionStreamResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionStreamResponseObject ChatCompletionChunk { get; } = new InternalCreateChatCompletionStreamResponseObject(ChatCompletionChunkValue); - - public static bool operator ==(InternalCreateChatCompletionStreamResponseObject left, InternalCreateChatCompletionStreamResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionStreamResponseObject left, InternalCreateChatCompletionStreamResponseObject right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionStreamResponseObject(string value) => new InternalCreateChatCompletionStreamResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionStreamResponseObject other && Equals(other); - - public bool Equals(InternalCreateChatCompletionStreamResponseObject 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/InternalCreateChatCompletionStreamResponseServiceTier.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseServiceTier.cs deleted file mode 100644 index b7c915064..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseServiceTier.cs +++ /dev/null @@ -1,44 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Chat -{ - internal readonly partial struct InternalCreateChatCompletionStreamResponseServiceTier : IEquatable - { - private readonly string _value; - private const string ScaleValue = "scale"; - private const string DefaultValue = "default"; - - public InternalCreateChatCompletionStreamResponseServiceTier(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateChatCompletionStreamResponseServiceTier Scale { get; } = new InternalCreateChatCompletionStreamResponseServiceTier(ScaleValue); - - public static InternalCreateChatCompletionStreamResponseServiceTier Default { get; } = new InternalCreateChatCompletionStreamResponseServiceTier(DefaultValue); - - public static bool operator ==(InternalCreateChatCompletionStreamResponseServiceTier left, InternalCreateChatCompletionStreamResponseServiceTier right) => left.Equals(right); - - public static bool operator !=(InternalCreateChatCompletionStreamResponseServiceTier left, InternalCreateChatCompletionStreamResponseServiceTier right) => !left.Equals(right); - - public static implicit operator InternalCreateChatCompletionStreamResponseServiceTier(string value) => new InternalCreateChatCompletionStreamResponseServiceTier(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateChatCompletionStreamResponseServiceTier other && Equals(other); - - public bool Equals(InternalCreateChatCompletionStreamResponseServiceTier 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/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs deleted file mode 100644 index 0cb813d6a..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.Serialization.cs +++ /dev/null @@ -1,200 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Chat -{ - internal partial class InternalCreateChatCompletionStreamResponseUsage : IJsonModel - { - internal InternalCreateChatCompletionStreamResponseUsage() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseUsage)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("completion_tokens") != true) - { - writer.WritePropertyName("completion_tokens"u8); - writer.WriteNumberValue(CompletionTokens); - } - if (_additionalBinaryDataProperties?.ContainsKey("prompt_tokens") != true) - { - writer.WritePropertyName("prompt_tokens"u8); - writer.WriteNumberValue(PromptTokens); - } - if (_additionalBinaryDataProperties?.ContainsKey("total_tokens") != true) - { - writer.WritePropertyName("total_tokens"u8); - writer.WriteNumberValue(TotalTokens); - } - if (Optional.IsDefined(CompletionTokensDetails) && _additionalBinaryDataProperties?.ContainsKey("completion_tokens_details") != true) - { - writer.WritePropertyName("completion_tokens_details"u8); - writer.WriteObjectValue(CompletionTokensDetails, options); - } - if (Optional.IsDefined(PromptTokensDetails) && _additionalBinaryDataProperties?.ContainsKey("prompt_tokens_details") != true) - { - writer.WritePropertyName("prompt_tokens_details"u8); - writer.WriteObjectValue(PromptTokensDetails, options); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalCreateChatCompletionStreamResponseUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalCreateChatCompletionStreamResponseUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseUsage)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalCreateChatCompletionStreamResponseUsage(document.RootElement, options); - } - - internal static InternalCreateChatCompletionStreamResponseUsage DeserializeInternalCreateChatCompletionStreamResponseUsage(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - int completionTokens = default; - int promptTokens = default; - int totalTokens = default; - ChatOutputTokenUsageDetails completionTokensDetails = default; - ChatInputTokenUsageDetails promptTokensDetails = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("completion_tokens"u8)) - { - completionTokens = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("prompt_tokens"u8)) - { - promptTokens = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("total_tokens"u8)) - { - totalTokens = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("completion_tokens_details"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - completionTokensDetails = ChatOutputTokenUsageDetails.DeserializeChatOutputTokenUsageDetails(prop.Value, options); - continue; - } - if (prop.NameEquals("prompt_tokens_details"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - promptTokensDetails = ChatInputTokenUsageDetails.DeserializeChatInputTokenUsageDetails(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalCreateChatCompletionStreamResponseUsage( - completionTokens, - promptTokens, - totalTokens, - completionTokensDetails, - promptTokensDetails, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseUsage)} does not support writing '{options.Format}' format."); - } - } - - InternalCreateChatCompletionStreamResponseUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalCreateChatCompletionStreamResponseUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalCreateChatCompletionStreamResponseUsage(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalCreateChatCompletionStreamResponseUsage)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateChatCompletionStreamResponseUsage internalCreateChatCompletionStreamResponseUsage) - { - if (internalCreateChatCompletionStreamResponseUsage == null) - { - return null; - } - return BinaryContent.Create(internalCreateChatCompletionStreamResponseUsage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateChatCompletionStreamResponseUsage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateChatCompletionStreamResponseUsage(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.cs b/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.cs deleted file mode 100644 index 181381ab7..000000000 --- a/src/Generated/Models/InternalCreateChatCompletionStreamResponseUsage.cs +++ /dev/null @@ -1,47 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Chat -{ - internal partial class InternalCreateChatCompletionStreamResponseUsage - { - private protected IDictionary _additionalBinaryDataProperties; - - internal InternalCreateChatCompletionStreamResponseUsage(int completionTokens, int promptTokens, int totalTokens) - { - CompletionTokens = completionTokens; - PromptTokens = promptTokens; - TotalTokens = totalTokens; - } - - internal InternalCreateChatCompletionStreamResponseUsage(int completionTokens, int promptTokens, int totalTokens, ChatOutputTokenUsageDetails completionTokensDetails, ChatInputTokenUsageDetails promptTokensDetails, IDictionary additionalBinaryDataProperties) - { - CompletionTokens = completionTokens; - PromptTokens = promptTokens; - TotalTokens = totalTokens; - CompletionTokensDetails = completionTokensDetails; - PromptTokensDetails = promptTokensDetails; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public int CompletionTokens { get; } - - public int PromptTokens { get; } - - public int TotalTokens { get; } - - public ChatOutputTokenUsageDetails CompletionTokensDetails { get; } - - public ChatInputTokenUsageDetails PromptTokensDetails { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs b/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs index 855cf3d6e..29d3d8915 100644 --- a/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.Chat; @@ -14,7 +14,7 @@ namespace OpenAI.LegacyCompletions { internal partial class InternalCreateCompletionRequest : IJsonModel { - internal InternalCreateCompletionRequest() + internal InternalCreateCompletionRequest() : this(default, null, default, default, default, null, default, default, default, default, default, null, default, null, null, default, default, null, null) { } @@ -25,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,6 +150,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("user"u8); writer.WriteStringValue(User); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -172,6 +174,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateCompletionRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateCompletionRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -384,6 +387,7 @@ internal static InternalCreateCompletionRequest DeserializeInternalCreateComplet user = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateCompletionRequest( @@ -410,13 +414,14 @@ internal static InternalCreateCompletionRequest DeserializeInternalCreateComplet BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateCompletionRequest)} does not support writing '{options.Format}' format."); } @@ -424,6 +429,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateCompletionRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateCompletionRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -440,21 +446,5 @@ protected virtual InternalCreateCompletionRequest PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateCompletionRequest internalCreateCompletionRequest) - { - if (internalCreateCompletionRequest == null) - { - return null; - } - return BinaryContent.Create(internalCreateCompletionRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateCompletionRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateCompletionRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateCompletionRequest.cs b/src/Generated/Models/InternalCreateCompletionRequest.cs index ed74588e9..78d68bdb4 100644 --- a/src/Generated/Models/InternalCreateCompletionRequest.cs +++ b/src/Generated/Models/InternalCreateCompletionRequest.cs @@ -13,7 +13,7 @@ internal partial class InternalCreateCompletionRequest { private protected IDictionary _additionalBinaryDataProperties; - public InternalCreateCompletionRequest(InternalCreateCompletionRequestModel model, BinaryData prompt) + internal InternalCreateCompletionRequest(InternalCreateCompletionRequestModel model, BinaryData prompt) { Model = model; Prompt = prompt; @@ -22,12 +22,13 @@ public InternalCreateCompletionRequest(InternalCreateCompletionRequestModel mode internal InternalCreateCompletionRequest(InternalCreateCompletionRequestModel model, BinaryData prompt, int? bestOf, bool? echo, float? frequencyPenalty, IDictionary logitBias, int? logprobs, int? maxTokens, int? n, float? presencePenalty, long? seed, BinaryData stop, bool? stream, InternalChatCompletionStreamOptions streamOptions, string suffix, float? temperature, float? topP, string user, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Model = model; Prompt = prompt; BestOf = bestOf; Echo = echo; FrequencyPenalty = frequencyPenalty; - LogitBias = logitBias; + LogitBias = logitBias ?? new ChangeTrackingDictionary(); Logprobs = logprobs; MaxTokens = maxTokens; N = n; @@ -43,7 +44,7 @@ internal InternalCreateCompletionRequest(InternalCreateCompletionRequestModel mo _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateCompletionRequestModel Model { get; } + internal InternalCreateCompletionRequestModel Model { get; } public BinaryData Prompt { get; } @@ -69,7 +70,7 @@ internal InternalCreateCompletionRequest(InternalCreateCompletionRequestModel mo public bool? Stream { get; set; } - public InternalChatCompletionStreamOptions StreamOptions { get; set; } + internal InternalChatCompletionStreamOptions StreamOptions { get; set; } public string Suffix { get; set; } diff --git a/src/Generated/Models/InternalCreateCompletionRequestModel.cs b/src/Generated/Models/InternalCreateCompletionRequestModel.cs index 3e195b568..51bc2950a 100644 --- a/src/Generated/Models/InternalCreateCompletionRequestModel.cs +++ b/src/Generated/Models/InternalCreateCompletionRequestModel.cs @@ -22,11 +22,11 @@ public InternalCreateCompletionRequestModel(string value) _value = value; } - public static InternalCreateCompletionRequestModel Gpt35TurboInstruct { get; } = new InternalCreateCompletionRequestModel(Gpt35TurboInstructValue); + internal static InternalCreateCompletionRequestModel Gpt35TurboInstruct { get; } = new InternalCreateCompletionRequestModel(Gpt35TurboInstructValue); - public static InternalCreateCompletionRequestModel Davinci002 { get; } = new InternalCreateCompletionRequestModel(Davinci002Value); + internal static InternalCreateCompletionRequestModel Davinci002 { get; } = new InternalCreateCompletionRequestModel(Davinci002Value); - public static InternalCreateCompletionRequestModel Babbage002 { get; } = new InternalCreateCompletionRequestModel(Babbage002Value); + internal static InternalCreateCompletionRequestModel Babbage002 { get; } = new InternalCreateCompletionRequestModel(Babbage002Value); public static bool operator ==(InternalCreateCompletionRequestModel left, InternalCreateCompletionRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs b/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs index ff4c4fa58..2ab4e6b5b 100644 --- a/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.Chat; @@ -14,7 +14,7 @@ namespace OpenAI.LegacyCompletions { internal partial class InternalCreateCompletionResponse : IJsonModel { - internal InternalCreateCompletionResponse() + internal InternalCreateCompletionResponse() : this(null, null, default, null, null, null, null, null) { } @@ -25,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -65,13 +66,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (Optional.IsDefined(Usage) && _additionalBinaryDataProperties?.ContainsKey("usage") != true) { writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -95,6 +97,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateCompletionResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateCompletionResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -117,7 +120,7 @@ internal static InternalCreateCompletionResponse DeserializeInternalCreateComple DateTimeOffset created = default; string model = default; string systemFingerprint = default; - InternalCreateCompletionResponseObject @object = default; + string @object = default; ChatTokenUsage usage = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -154,7 +157,7 @@ internal static InternalCreateCompletionResponse DeserializeInternalCreateComple } if (prop.NameEquals("object"u8)) { - @object = new InternalCreateCompletionResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("usage"u8)) @@ -166,6 +169,7 @@ internal static InternalCreateCompletionResponse DeserializeInternalCreateComple usage = ChatTokenUsage.DeserializeChatTokenUsage(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateCompletionResponse( @@ -181,13 +185,14 @@ internal static InternalCreateCompletionResponse DeserializeInternalCreateComple BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateCompletionResponse)} does not support writing '{options.Format}' format."); } @@ -195,6 +200,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateCompletionResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateCompletionResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -211,21 +217,5 @@ protected virtual InternalCreateCompletionResponse PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateCompletionResponse internalCreateCompletionResponse) - { - if (internalCreateCompletionResponse == null) - { - return null; - } - return BinaryContent.Create(internalCreateCompletionResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateCompletionResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateCompletionResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateCompletionResponse.cs b/src/Generated/Models/InternalCreateCompletionResponse.cs index c77eb92c6..2175d78b4 100644 --- a/src/Generated/Models/InternalCreateCompletionResponse.cs +++ b/src/Generated/Models/InternalCreateCompletionResponse.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; using OpenAI.Chat; namespace OpenAI.LegacyCompletions @@ -21,10 +22,11 @@ internal InternalCreateCompletionResponse(string id, IEnumerable choices, DateTimeOffset created, string model, string systemFingerprint, InternalCreateCompletionResponseObject @object, ChatTokenUsage usage, IDictionary additionalBinaryDataProperties) + internal InternalCreateCompletionResponse(string id, IList choices, DateTimeOffset created, string model, string systemFingerprint, string @object, ChatTokenUsage usage, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; - Choices = choices; + Choices = choices ?? new ChangeTrackingList(); Created = created; Model = model; SystemFingerprint = systemFingerprint; @@ -35,7 +37,7 @@ internal InternalCreateCompletionResponse(string id, IList Choices { get; } + internal IList Choices { get; } public DateTimeOffset Created { get; } @@ -43,7 +45,7 @@ internal InternalCreateCompletionResponse(string id, IList.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,6 +59,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -81,6 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateCompletionResponseChoice IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateCompletionResponseChoice JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -130,6 +133,7 @@ internal static InternalCreateCompletionResponseChoice DeserializeInternalCreate text = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateCompletionResponseChoice(finishReason, index, logprobs, text, additionalBinaryDataProperties); @@ -137,13 +141,14 @@ internal static InternalCreateCompletionResponseChoice DeserializeInternalCreate BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateCompletionResponseChoice)} does not support writing '{options.Format}' format."); } @@ -151,6 +156,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateCompletionResponseChoice IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateCompletionResponseChoice PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -167,21 +173,5 @@ protected virtual InternalCreateCompletionResponseChoice PersistableModelCreateC } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateCompletionResponseChoice internalCreateCompletionResponseChoice) - { - if (internalCreateCompletionResponseChoice == null) - { - return null; - } - return BinaryContent.Create(internalCreateCompletionResponseChoice, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateCompletionResponseChoice(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateCompletionResponseChoice(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoice.cs b/src/Generated/Models/InternalCreateCompletionResponseChoice.cs index e9391f1b8..24c0e9f4f 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoice.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoice.cs @@ -28,11 +28,11 @@ internal InternalCreateCompletionResponseChoice(InternalCreateCompletionResponse _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateCompletionResponseChoiceFinishReason FinishReason { get; } + internal InternalCreateCompletionResponseChoiceFinishReason FinishReason { get; } public int Index { get; } - public InternalCreateCompletionResponseChoiceLogprobs Logprobs { get; } + internal InternalCreateCompletionResponseChoiceLogprobs Logprobs { get; } public string Text { get; } diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoiceFinishReason.cs b/src/Generated/Models/InternalCreateCompletionResponseChoiceFinishReason.cs index 9754837fc..f94c8ed51 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoiceFinishReason.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoiceFinishReason.cs @@ -22,11 +22,11 @@ public InternalCreateCompletionResponseChoiceFinishReason(string value) _value = value; } - public static InternalCreateCompletionResponseChoiceFinishReason Stop { get; } = new InternalCreateCompletionResponseChoiceFinishReason(StopValue); + internal static InternalCreateCompletionResponseChoiceFinishReason Stop { get; } = new InternalCreateCompletionResponseChoiceFinishReason(StopValue); - public static InternalCreateCompletionResponseChoiceFinishReason Length { get; } = new InternalCreateCompletionResponseChoiceFinishReason(LengthValue); + internal static InternalCreateCompletionResponseChoiceFinishReason Length { get; } = new InternalCreateCompletionResponseChoiceFinishReason(LengthValue); - public static InternalCreateCompletionResponseChoiceFinishReason ContentFilter { get; } = new InternalCreateCompletionResponseChoiceFinishReason(ContentFilterValue); + internal static InternalCreateCompletionResponseChoiceFinishReason ContentFilter { get; } = new InternalCreateCompletionResponseChoiceFinishReason(ContentFilterValue); public static bool operator ==(InternalCreateCompletionResponseChoiceFinishReason left, InternalCreateCompletionResponseChoiceFinishReason right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs index 8c39e5a8e..66fef3092 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -83,6 +84,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -106,6 +108,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateCompletionResponseChoiceLogprobs IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateCompletionResponseChoiceLogprobs JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -205,6 +208,7 @@ internal static InternalCreateCompletionResponseChoiceLogprobs DeserializeIntern topLogprobs = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateCompletionResponseChoiceLogprobs(textOffset ?? new ChangeTrackingList(), tokenLogprobs ?? new ChangeTrackingList(), tokens ?? new ChangeTrackingList(), topLogprobs ?? new ChangeTrackingList>(), additionalBinaryDataProperties); @@ -212,13 +216,14 @@ internal static InternalCreateCompletionResponseChoiceLogprobs DeserializeIntern BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateCompletionResponseChoiceLogprobs)} does not support writing '{options.Format}' format."); } @@ -226,6 +231,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateCompletionResponseChoiceLogprobs IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateCompletionResponseChoiceLogprobs PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -242,21 +248,5 @@ protected virtual InternalCreateCompletionResponseChoiceLogprobs PersistableMode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateCompletionResponseChoiceLogprobs internalCreateCompletionResponseChoiceLogprobs) - { - if (internalCreateCompletionResponseChoiceLogprobs == null) - { - return null; - } - return BinaryContent.Create(internalCreateCompletionResponseChoiceLogprobs, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateCompletionResponseChoiceLogprobs(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateCompletionResponseChoiceLogprobs(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.cs b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.cs index a19f2969e..0377667cd 100644 --- a/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.cs +++ b/src/Generated/Models/InternalCreateCompletionResponseChoiceLogprobs.cs @@ -12,20 +12,17 @@ internal partial class InternalCreateCompletionResponseChoiceLogprobs { private protected IDictionary _additionalBinaryDataProperties; - internal InternalCreateCompletionResponseChoiceLogprobs() + internal InternalCreateCompletionResponseChoiceLogprobs() : this(null, null, null, null, null) { - TextOffset = new ChangeTrackingList(); - TokenLogprobs = new ChangeTrackingList(); - Tokens = new ChangeTrackingList(); - TopLogprobs = new ChangeTrackingList>(); } internal InternalCreateCompletionResponseChoiceLogprobs(IList textOffset, IList tokenLogprobs, IList tokens, IList> topLogprobs, IDictionary additionalBinaryDataProperties) { - TextOffset = textOffset; - TokenLogprobs = tokenLogprobs; - Tokens = tokens; - TopLogprobs = topLogprobs; + // Plugin customization: ensure initialization of collections + TextOffset = textOffset ?? new ChangeTrackingList(); + TokenLogprobs = tokenLogprobs ?? new ChangeTrackingList(); + Tokens = tokens ?? new ChangeTrackingList(); + TopLogprobs = topLogprobs ?? new ChangeTrackingList>(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCreateCompletionResponseObject.cs b/src/Generated/Models/InternalCreateCompletionResponseObject.cs deleted file mode 100644 index 1ef3b7e97..000000000 --- a/src/Generated/Models/InternalCreateCompletionResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.LegacyCompletions -{ - internal readonly partial struct InternalCreateCompletionResponseObject : IEquatable - { - private readonly string _value; - private const string TextCompletionValue = "text_completion"; - - public InternalCreateCompletionResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateCompletionResponseObject TextCompletion { get; } = new InternalCreateCompletionResponseObject(TextCompletionValue); - - public static bool operator ==(InternalCreateCompletionResponseObject left, InternalCreateCompletionResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalCreateCompletionResponseObject left, InternalCreateCompletionResponseObject right) => !left.Equals(right); - - public static implicit operator InternalCreateCompletionResponseObject(string value) => new InternalCreateCompletionResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateCompletionResponseObject other && Equals(other); - - public bool Equals(InternalCreateCompletionResponseObject 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/InternalCreateContainerBody.Serialization.cs b/src/Generated/Models/InternalCreateContainerBody.Serialization.cs new file mode 100644 index 000000000..fd5408afe --- /dev/null +++ b/src/Generated/Models/InternalCreateContainerBody.Serialization.cs @@ -0,0 +1,184 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalCreateContainerBody : IJsonModel + { + internal InternalCreateContainerBody() : this(null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateContainerBody)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (Optional.IsCollectionDefined(FileIds) && _additionalBinaryDataProperties?.ContainsKey("file_ids") != true) + { + writer.WritePropertyName("file_ids"u8); + writer.WriteStartArray(); + foreach (string item in FileIds) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(ExpiresAfter) && _additionalBinaryDataProperties?.ContainsKey("expires_after") != true) + { + writer.WritePropertyName("expires_after"u8); + writer.WriteObjectValue(ExpiresAfter, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCreateContainerBody IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateContainerBody JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateContainerBody)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateContainerBody(document.RootElement, options); + } + + internal static InternalCreateContainerBody DeserializeInternalCreateContainerBody(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string name = default; + IList fileIds = default; + InternalCreateContainerBodyExpiresAfter expiresAfter = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file_ids"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + fileIds = array; + continue; + } + if (prop.NameEquals("expires_after"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + expiresAfter = InternalCreateContainerBodyExpiresAfter.DeserializeInternalCreateContainerBodyExpiresAfter(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateContainerBody(name, fileIds ?? new ChangeTrackingList(), expiresAfter, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCreateContainerBody)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateContainerBody IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateContainerBody PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateContainerBody(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateContainerBody)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCreateContainerBody.cs b/src/Generated/Models/InternalCreateContainerBody.cs new file mode 100644 index 000000000..1d9060d62 --- /dev/null +++ b/src/Generated/Models/InternalCreateContainerBody.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalCreateContainerBody + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalCreateContainerBody(string name) + { + Argument.AssertNotNull(name, nameof(name)); + + Name = name; + FileIds = new ChangeTrackingList(); + } + + internal InternalCreateContainerBody(string name, IList fileIds, InternalCreateContainerBodyExpiresAfter expiresAfter, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + FileIds = fileIds ?? new ChangeTrackingList(); + ExpiresAfter = expiresAfter; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Name { get; } + + public IList FileIds { get; } + + internal InternalCreateContainerBodyExpiresAfter ExpiresAfter { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateContainerBodyExpiresAfter.Serialization.cs b/src/Generated/Models/InternalCreateContainerBodyExpiresAfter.Serialization.cs new file mode 100644 index 000000000..397b7bd65 --- /dev/null +++ b/src/Generated/Models/InternalCreateContainerBodyExpiresAfter.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalCreateContainerBodyExpiresAfter : IJsonModel + { + internal InternalCreateContainerBodyExpiresAfter() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateContainerBodyExpiresAfter)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("anchor") != true) + { + writer.WritePropertyName("anchor"u8); + writer.WriteStringValue(Anchor); + } + if (_additionalBinaryDataProperties?.ContainsKey("minutes") != true) + { + writer.WritePropertyName("minutes"u8); + writer.WriteNumberValue(Minutes); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCreateContainerBodyExpiresAfter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateContainerBodyExpiresAfter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateContainerBodyExpiresAfter)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateContainerBodyExpiresAfter(document.RootElement, options); + } + + internal static InternalCreateContainerBodyExpiresAfter DeserializeInternalCreateContainerBodyExpiresAfter(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string anchor = default; + int minutes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("anchor"u8)) + { + anchor = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("minutes"u8)) + { + minutes = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateContainerBodyExpiresAfter(anchor, minutes, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCreateContainerBodyExpiresAfter)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateContainerBodyExpiresAfter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateContainerBodyExpiresAfter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateContainerBodyExpiresAfter(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateContainerBodyExpiresAfter)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCreateContainerBodyExpiresAfter.cs b/src/Generated/Models/InternalCreateContainerBodyExpiresAfter.cs new file mode 100644 index 000000000..80e7c74cc --- /dev/null +++ b/src/Generated/Models/InternalCreateContainerBodyExpiresAfter.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Containers +{ + internal partial class InternalCreateContainerBodyExpiresAfter + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalCreateContainerBodyExpiresAfter(int minutes) + { + Minutes = minutes; + } + + internal InternalCreateContainerBodyExpiresAfter(string anchor, int minutes, IDictionary additionalBinaryDataProperties) + { + Anchor = anchor; + Minutes = minutes; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Anchor { get; } = "last_active_at"; + + public int Minutes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateContainerFileBody.Serialization.cs b/src/Generated/Models/InternalCreateContainerFileBody.Serialization.cs new file mode 100644 index 000000000..4b26ce691 --- /dev/null +++ b/src/Generated/Models/InternalCreateContainerFileBody.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalCreateContainerFileBody : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateContainerFileBody)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (Optional.IsDefined(File) && _additionalBinaryDataProperties?.ContainsKey("file") != true) + { + writer.WritePropertyName("file"u8); + writer.WriteBase64StringValue(File.ToArray(), "D"); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCreateContainerFileBody IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateContainerFileBody JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateContainerFileBody)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateContainerFileBody(document.RootElement, options); + } + + internal static InternalCreateContainerFileBody DeserializeInternalCreateContainerFileBody(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string fileId = default; + BinaryData @file = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("file_id"u8)) + { + fileId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + @file = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateContainerFileBody(fileId, @file, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCreateContainerFileBody)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateContainerFileBody IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateContainerFileBody PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateContainerFileBody(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateContainerFileBody)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCreateContainerFileBody.cs b/src/Generated/Models/InternalCreateContainerFileBody.cs new file mode 100644 index 000000000..ab108c7f5 --- /dev/null +++ b/src/Generated/Models/InternalCreateContainerFileBody.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Containers +{ + internal partial class InternalCreateContainerFileBody + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalCreateContainerFileBody() + { + } + + internal InternalCreateContainerFileBody(string fileId, BinaryData @file, IDictionary additionalBinaryDataProperties) + { + FileId = fileId; + File = @file; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string FileId { get; set; } + + public BinaryData File { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateEmbeddingRequestEncodingFormat.cs b/src/Generated/Models/InternalCreateEmbeddingRequestEncodingFormat.cs index d868925d3..8a92ad776 100644 --- a/src/Generated/Models/InternalCreateEmbeddingRequestEncodingFormat.cs +++ b/src/Generated/Models/InternalCreateEmbeddingRequestEncodingFormat.cs @@ -21,9 +21,9 @@ public InternalCreateEmbeddingRequestEncodingFormat(string value) _value = value; } - public static InternalCreateEmbeddingRequestEncodingFormat Float { get; } = new InternalCreateEmbeddingRequestEncodingFormat(FloatValue); + internal static InternalCreateEmbeddingRequestEncodingFormat Float { get; } = new InternalCreateEmbeddingRequestEncodingFormat(FloatValue); - public static InternalCreateEmbeddingRequestEncodingFormat Base64 { get; } = new InternalCreateEmbeddingRequestEncodingFormat(Base64Value); + internal static InternalCreateEmbeddingRequestEncodingFormat Base64 { get; } = new InternalCreateEmbeddingRequestEncodingFormat(Base64Value); public static bool operator ==(InternalCreateEmbeddingRequestEncodingFormat left, InternalCreateEmbeddingRequestEncodingFormat right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateEmbeddingRequestModel.cs b/src/Generated/Models/InternalCreateEmbeddingRequestModel.cs index c2467f535..069aff175 100644 --- a/src/Generated/Models/InternalCreateEmbeddingRequestModel.cs +++ b/src/Generated/Models/InternalCreateEmbeddingRequestModel.cs @@ -22,11 +22,11 @@ public InternalCreateEmbeddingRequestModel(string value) _value = value; } - public static InternalCreateEmbeddingRequestModel TextEmbeddingAda002 { get; } = new InternalCreateEmbeddingRequestModel(TextEmbeddingAda002Value); + internal static InternalCreateEmbeddingRequestModel TextEmbeddingAda002 { get; } = new InternalCreateEmbeddingRequestModel(TextEmbeddingAda002Value); - public static InternalCreateEmbeddingRequestModel TextEmbedding3Small { get; } = new InternalCreateEmbeddingRequestModel(TextEmbedding3SmallValue); + internal static InternalCreateEmbeddingRequestModel TextEmbedding3Small { get; } = new InternalCreateEmbeddingRequestModel(TextEmbedding3SmallValue); - public static InternalCreateEmbeddingRequestModel TextEmbedding3Large { get; } = new InternalCreateEmbeddingRequestModel(TextEmbedding3LargeValue); + internal static InternalCreateEmbeddingRequestModel TextEmbedding3Large { get; } = new InternalCreateEmbeddingRequestModel(TextEmbedding3LargeValue); public static bool operator ==(InternalCreateEmbeddingRequestModel left, InternalCreateEmbeddingRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateEmbeddingResponseObject.cs b/src/Generated/Models/InternalCreateEmbeddingResponseObject.cs deleted file mode 100644 index 1f831782a..000000000 --- a/src/Generated/Models/InternalCreateEmbeddingResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Embeddings -{ - internal readonly partial struct InternalCreateEmbeddingResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalCreateEmbeddingResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateEmbeddingResponseObject List { get; } = new InternalCreateEmbeddingResponseObject(ListValue); - - public static bool operator ==(InternalCreateEmbeddingResponseObject left, InternalCreateEmbeddingResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalCreateEmbeddingResponseObject left, InternalCreateEmbeddingResponseObject right) => !left.Equals(right); - - public static implicit operator InternalCreateEmbeddingResponseObject(string value) => new InternalCreateEmbeddingResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateEmbeddingResponseObject other && Equals(other); - - public bool Equals(InternalCreateEmbeddingResponseObject 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/InternalCreateEvalRequest.Serialization.cs b/src/Generated/Models/InternalCreateEvalRequest.Serialization.cs new file mode 100644 index 000000000..24717f3fd --- /dev/null +++ b/src/Generated/Models/InternalCreateEvalRequest.Serialization.cs @@ -0,0 +1,202 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalCreateEvalRequest : IJsonModel + { + internal InternalCreateEvalRequest() : this(null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateEvalRequest)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + if (_additionalBinaryDataProperties?.ContainsKey("data_source_config") != true) + { + writer.WritePropertyName("data_source_config"u8); + writer.WriteObjectValue(DataSourceConfig, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("testing_criteria") != true) + { + writer.WritePropertyName("testing_criteria"u8); + writer.WriteStartArray(); + foreach (InternalEvalGraderParams item in TestingCriteria) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCreateEvalRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateEvalRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateEvalRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateEvalRequest(document.RootElement, options); + } + + internal static InternalCreateEvalRequest DeserializeInternalCreateEvalRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string name = default; + IDictionary metadata = default; + InternalEvalDataSourceConfigParams dataSourceConfig = default; + IList testingCriteria = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + if (prop.NameEquals("data_source_config"u8)) + { + dataSourceConfig = InternalEvalDataSourceConfigParams.DeserializeInternalEvalDataSourceConfigParams(prop.Value, options); + continue; + } + if (prop.NameEquals("testing_criteria"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalGraderParams.DeserializeInternalEvalGraderParams(item, options)); + } + testingCriteria = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateEvalRequest(name, metadata ?? new ChangeTrackingDictionary(), dataSourceConfig, testingCriteria, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCreateEvalRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateEvalRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateEvalRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateEvalRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateEvalRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCreateEvalRequest.cs b/src/Generated/Models/InternalCreateEvalRequest.cs new file mode 100644 index 000000000..4103b2e64 --- /dev/null +++ b/src/Generated/Models/InternalCreateEvalRequest.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalCreateEvalRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalCreateEvalRequest(InternalEvalDataSourceConfigParams dataSourceConfig, IEnumerable testingCriteria) + { + Argument.AssertNotNull(dataSourceConfig, nameof(dataSourceConfig)); + Argument.AssertNotNull(testingCriteria, nameof(testingCriteria)); + + Metadata = new ChangeTrackingDictionary(); + DataSourceConfig = dataSourceConfig; + TestingCriteria = testingCriteria.ToList(); + } + + internal InternalCreateEvalRequest(string name, IDictionary metadata, InternalEvalDataSourceConfigParams dataSourceConfig, IList testingCriteria, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + Metadata = metadata ?? new ChangeTrackingDictionary(); + DataSourceConfig = dataSourceConfig; + TestingCriteria = testingCriteria ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Name { get; set; } + + public IDictionary Metadata { get; } + + internal InternalEvalDataSourceConfigParams DataSourceConfig { get; } + + internal IList TestingCriteria { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateEvalRunRequest.Serialization.cs b/src/Generated/Models/InternalCreateEvalRunRequest.Serialization.cs new file mode 100644 index 000000000..2d3dcb7a4 --- /dev/null +++ b/src/Generated/Models/InternalCreateEvalRunRequest.Serialization.cs @@ -0,0 +1,181 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalCreateEvalRunRequest : IJsonModel + { + internal InternalCreateEvalRunRequest() : this(null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateEvalRunRequest)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + if (_additionalBinaryDataProperties?.ContainsKey("data_source") != true) + { + writer.WritePropertyName("data_source"u8); + writer.WriteObjectValue(DataSource, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCreateEvalRunRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateEvalRunRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateEvalRunRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateEvalRunRequest(document.RootElement, options); + } + + internal static InternalCreateEvalRunRequest DeserializeInternalCreateEvalRunRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string name = default; + IDictionary metadata = default; + InternalEvalRunDataSourceParams dataSource = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + if (prop.NameEquals("data_source"u8)) + { + dataSource = InternalEvalRunDataSourceParams.DeserializeInternalEvalRunDataSourceParams(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateEvalRunRequest(name, metadata ?? new ChangeTrackingDictionary(), dataSource, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCreateEvalRunRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateEvalRunRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateEvalRunRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateEvalRunRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateEvalRunRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCreateEvalRunRequest.cs b/src/Generated/Models/InternalCreateEvalRunRequest.cs new file mode 100644 index 000000000..5956e02e2 --- /dev/null +++ b/src/Generated/Models/InternalCreateEvalRunRequest.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalCreateEvalRunRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalCreateEvalRunRequest(InternalEvalRunDataSourceParams dataSource) + { + Argument.AssertNotNull(dataSource, nameof(dataSource)); + + Metadata = new ChangeTrackingDictionary(); + DataSource = dataSource; + } + + internal InternalCreateEvalRunRequest(string name, IDictionary metadata, InternalEvalRunDataSourceParams dataSource, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + Metadata = metadata ?? new ChangeTrackingDictionary(); + DataSource = dataSource; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Name { get; set; } + + public IDictionary Metadata { get; } + + internal InternalEvalRunDataSourceParams DataSource { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateFineTuningCheckpointPermissionRequest.Serialization.cs b/src/Generated/Models/InternalCreateFineTuningCheckpointPermissionRequest.Serialization.cs new file mode 100644 index 000000000..a64b5edf8 --- /dev/null +++ b/src/Generated/Models/InternalCreateFineTuningCheckpointPermissionRequest.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalCreateFineTuningCheckpointPermissionRequest : IJsonModel + { + internal InternalCreateFineTuningCheckpointPermissionRequest() : this(null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateFineTuningCheckpointPermissionRequest)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("project_ids") != true) + { + writer.WritePropertyName("project_ids"u8); + writer.WriteStartArray(); + foreach (string item in ProjectIds) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCreateFineTuningCheckpointPermissionRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateFineTuningCheckpointPermissionRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateFineTuningCheckpointPermissionRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateFineTuningCheckpointPermissionRequest(document.RootElement, options); + } + + internal static InternalCreateFineTuningCheckpointPermissionRequest DeserializeInternalCreateFineTuningCheckpointPermissionRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IList projectIds = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("project_ids"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + projectIds = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateFineTuningCheckpointPermissionRequest(projectIds, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCreateFineTuningCheckpointPermissionRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateFineTuningCheckpointPermissionRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateFineTuningCheckpointPermissionRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateFineTuningCheckpointPermissionRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateFineTuningCheckpointPermissionRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCreateFineTuningCheckpointPermissionRequest.cs b/src/Generated/Models/InternalCreateFineTuningCheckpointPermissionRequest.cs new file mode 100644 index 000000000..7829fb037 --- /dev/null +++ b/src/Generated/Models/InternalCreateFineTuningCheckpointPermissionRequest.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalCreateFineTuningCheckpointPermissionRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalCreateFineTuningCheckpointPermissionRequest(IEnumerable projectIds) + { + ProjectIds = projectIds.ToList(); + } + + internal InternalCreateFineTuningCheckpointPermissionRequest(IList projectIds, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ProjectIds = projectIds ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IList ProjectIds { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum.cs new file mode 100644 index 000000000..363a0bafd --- /dev/null +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + + public InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum Auto { get; } = new InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum(AutoValue); + + public static bool operator ==(InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum left, InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum right) => left.Equals(right); + + public static bool operator !=(InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum left, InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum right) => !left.Equals(right); + + public static implicit operator InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum(string value) => new InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum other && Equals(other); + + public bool Equals(InternalCreateFineTuningJobRequestHyperparametersBatchSizeChoiceEnum 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/InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum.cs new file mode 100644 index 000000000..06135d01f --- /dev/null +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + + public InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum Auto { get; } = new InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum(AutoValue); + + public static bool operator ==(InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum left, InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum right) => left.Equals(right); + + public static bool operator !=(InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum left, InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum right) => !left.Equals(right); + + public static implicit operator InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum(string value) => new InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum other && Equals(other); + + public bool Equals(InternalCreateFineTuningJobRequestHyperparametersBetaChoiceEnum 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/InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum.cs new file mode 100644 index 000000000..ba8593976 --- /dev/null +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + + public InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum Auto { get; } = new InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum(AutoValue); + + public static bool operator ==(InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum left, InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum right) => left.Equals(right); + + public static bool operator !=(InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum left, InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum right) => !left.Equals(right); + + public static implicit operator InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum(string value) => new InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum other && Equals(other); + + public bool Equals(InternalCreateFineTuningJobRequestHyperparametersLearningRateMultiplierChoiceEnum 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/InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum.cs new file mode 100644 index 000000000..c7dfac647 --- /dev/null +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + + public InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum Auto { get; } = new InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum(AutoValue); + + public static bool operator ==(InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum left, InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum right) => left.Equals(right); + + public static bool operator !=(InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum left, InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum right) => !left.Equals(right); + + public static implicit operator InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum(string value) => new InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum other && Equals(other); + + public bool Equals(InternalCreateFineTuningJobRequestHyperparametersNEpochsChoiceEnum 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/InternalCreateFineTuningJobRequestIntegrationType.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationType.cs new file mode 100644 index 000000000..96cf8fd86 --- /dev/null +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestIntegrationType.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalCreateFineTuningJobRequestIntegrationType : IEquatable + { + private readonly string _value; + private const string WandbValue = "wandb"; + + public InternalCreateFineTuningJobRequestIntegrationType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCreateFineTuningJobRequestIntegrationType Wandb { get; } = new InternalCreateFineTuningJobRequestIntegrationType(WandbValue); + + public static bool operator ==(InternalCreateFineTuningJobRequestIntegrationType left, InternalCreateFineTuningJobRequestIntegrationType right) => left.Equals(right); + + public static bool operator !=(InternalCreateFineTuningJobRequestIntegrationType left, InternalCreateFineTuningJobRequestIntegrationType right) => !left.Equals(right); + + public static implicit operator InternalCreateFineTuningJobRequestIntegrationType(string value) => new InternalCreateFineTuningJobRequestIntegrationType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateFineTuningJobRequestIntegrationType other && Equals(other); + + public bool Equals(InternalCreateFineTuningJobRequestIntegrationType 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/InternalCreateFineTuningJobRequestModel.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestModel.cs index 308784743..e00077760 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestModel.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestModel.cs @@ -23,13 +23,13 @@ public InternalCreateFineTuningJobRequestModel(string value) _value = value; } - public static InternalCreateFineTuningJobRequestModel Babbage002 { get; } = new InternalCreateFineTuningJobRequestModel(Babbage002Value); + internal static InternalCreateFineTuningJobRequestModel Babbage002 { get; } = new InternalCreateFineTuningJobRequestModel(Babbage002Value); - public static InternalCreateFineTuningJobRequestModel Davinci002 { get; } = new InternalCreateFineTuningJobRequestModel(Davinci002Value); + internal static InternalCreateFineTuningJobRequestModel Davinci002 { get; } = new InternalCreateFineTuningJobRequestModel(Davinci002Value); - public static InternalCreateFineTuningJobRequestModel Gpt35Turbo { get; } = new InternalCreateFineTuningJobRequestModel(Gpt35TurboValue); + internal static InternalCreateFineTuningJobRequestModel Gpt35Turbo { get; } = new InternalCreateFineTuningJobRequestModel(Gpt35TurboValue); - public static InternalCreateFineTuningJobRequestModel Gpt4oMini { get; } = new InternalCreateFineTuningJobRequestModel(Gpt4oMiniValue); + internal static InternalCreateFineTuningJobRequestModel Gpt4oMini { get; } = new InternalCreateFineTuningJobRequestModel(Gpt4oMiniValue); public static bool operator ==(InternalCreateFineTuningJobRequestModel left, InternalCreateFineTuningJobRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.Serialization.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.Serialization.cs index ac777618b..7f6516faf 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.Serialization.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.FineTuning { internal partial class InternalCreateFineTuningJobRequestWandbIntegrationWandb : IJsonModel { - internal InternalCreateFineTuningJobRequestWandbIntegrationWandb() + internal InternalCreateFineTuningJobRequestWandbIntegrationWandb() : this(null, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(U writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("project"u8); writer.WriteStringValue(Project); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +86,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateFineTuningJobRequestWandbIntegrationWandb IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateFineTuningJobRequestWandbIntegrationWandb JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -154,6 +157,7 @@ internal static InternalCreateFineTuningJobRequestWandbIntegrationWandb Deserial project = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateFineTuningJobRequestWandbIntegrationWandb(name, entity, tags ?? new ChangeTrackingList(), project, additionalBinaryDataProperties); @@ -161,13 +165,14 @@ internal static InternalCreateFineTuningJobRequestWandbIntegrationWandb Deserial BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateFineTuningJobRequestWandbIntegrationWandb)} does not support writing '{options.Format}' format."); } @@ -175,6 +180,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateFineTuningJobRequestWandbIntegrationWandb IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateFineTuningJobRequestWandbIntegrationWandb PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -191,21 +197,5 @@ protected virtual InternalCreateFineTuningJobRequestWandbIntegrationWandb Persis } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateFineTuningJobRequestWandbIntegrationWandb internalCreateFineTuningJobRequestWandbIntegrationWandb) - { - if (internalCreateFineTuningJobRequestWandbIntegrationWandb == null) - { - return null; - } - return BinaryContent.Create(internalCreateFineTuningJobRequestWandbIntegrationWandb, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateFineTuningJobRequestWandbIntegrationWandb(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateFineTuningJobRequestWandbIntegrationWandb(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.cs b/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.cs index 7db538e27..f39cb872b 100644 --- a/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.cs +++ b/src/Generated/Models/InternalCreateFineTuningJobRequestWandbIntegrationWandb.cs @@ -22,9 +22,10 @@ public InternalCreateFineTuningJobRequestWandbIntegrationWandb(string project) internal InternalCreateFineTuningJobRequestWandbIntegrationWandb(string name, string entity, IList tags, string project, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Name = name; Entity = entity; - Tags = tags; + Tags = tags ?? new ChangeTrackingList(); Project = project; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCreateImageEditRequestBackground.cs b/src/Generated/Models/InternalCreateImageEditRequestBackground.cs new file mode 100644 index 000000000..8b153d05d --- /dev/null +++ b/src/Generated/Models/InternalCreateImageEditRequestBackground.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Images +{ + internal readonly partial struct InternalCreateImageEditRequestBackground : IEquatable + { + private readonly string _value; + private const string TransparentValue = "transparent"; + private const string OpaqueValue = "opaque"; + private const string AutoValue = "auto"; + + public InternalCreateImageEditRequestBackground(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCreateImageEditRequestBackground Transparent { get; } = new InternalCreateImageEditRequestBackground(TransparentValue); + + internal static InternalCreateImageEditRequestBackground Opaque { get; } = new InternalCreateImageEditRequestBackground(OpaqueValue); + + internal static InternalCreateImageEditRequestBackground Auto { get; } = new InternalCreateImageEditRequestBackground(AutoValue); + + public static bool operator ==(InternalCreateImageEditRequestBackground left, InternalCreateImageEditRequestBackground right) => left.Equals(right); + + public static bool operator !=(InternalCreateImageEditRequestBackground left, InternalCreateImageEditRequestBackground right) => !left.Equals(right); + + public static implicit operator InternalCreateImageEditRequestBackground(string value) => new InternalCreateImageEditRequestBackground(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateImageEditRequestBackground other && Equals(other); + + public bool Equals(InternalCreateImageEditRequestBackground 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/InternalCreateImageEditRequestModel.cs b/src/Generated/Models/InternalCreateImageEditRequestModel.cs index 1ba31ad3a..de8d17afe 100644 --- a/src/Generated/Models/InternalCreateImageEditRequestModel.cs +++ b/src/Generated/Models/InternalCreateImageEditRequestModel.cs @@ -12,6 +12,7 @@ namespace OpenAI.Images { private readonly string _value; private const string DallE2Value = "dall-e-2"; + private const string GptImage1Value = "gpt-image-1"; public InternalCreateImageEditRequestModel(string value) { @@ -20,7 +21,9 @@ public InternalCreateImageEditRequestModel(string value) _value = value; } - public static InternalCreateImageEditRequestModel DallE2 { get; } = new InternalCreateImageEditRequestModel(DallE2Value); + internal static InternalCreateImageEditRequestModel DallE2 { get; } = new InternalCreateImageEditRequestModel(DallE2Value); + + internal static InternalCreateImageEditRequestModel GptImage1 { get; } = new InternalCreateImageEditRequestModel(GptImage1Value); public static bool operator ==(InternalCreateImageEditRequestModel left, InternalCreateImageEditRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateImageEditRequestQuality.cs b/src/Generated/Models/InternalCreateImageEditRequestQuality.cs new file mode 100644 index 000000000..29096f687 --- /dev/null +++ b/src/Generated/Models/InternalCreateImageEditRequestQuality.cs @@ -0,0 +1,53 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Images +{ + internal readonly partial struct InternalCreateImageEditRequestQuality : IEquatable + { + private readonly string _value; + private const string StandardValue = "standard"; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + private const string AutoValue = "auto"; + + public InternalCreateImageEditRequestQuality(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCreateImageEditRequestQuality Standard { get; } = new InternalCreateImageEditRequestQuality(StandardValue); + + internal static InternalCreateImageEditRequestQuality Low { get; } = new InternalCreateImageEditRequestQuality(LowValue); + + internal static InternalCreateImageEditRequestQuality Medium { get; } = new InternalCreateImageEditRequestQuality(MediumValue); + + internal static InternalCreateImageEditRequestQuality High { get; } = new InternalCreateImageEditRequestQuality(HighValue); + + internal static InternalCreateImageEditRequestQuality Auto { get; } = new InternalCreateImageEditRequestQuality(AutoValue); + + public static bool operator ==(InternalCreateImageEditRequestQuality left, InternalCreateImageEditRequestQuality right) => left.Equals(right); + + public static bool operator !=(InternalCreateImageEditRequestQuality left, InternalCreateImageEditRequestQuality right) => !left.Equals(right); + + public static implicit operator InternalCreateImageEditRequestQuality(string value) => new InternalCreateImageEditRequestQuality(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateImageEditRequestQuality other && Equals(other); + + public bool Equals(InternalCreateImageEditRequestQuality 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/InternalCreateImageEditRequestResponseFormat.cs b/src/Generated/Models/InternalCreateImageEditRequestResponseFormat.cs index 597c1e8a9..45be860fb 100644 --- a/src/Generated/Models/InternalCreateImageEditRequestResponseFormat.cs +++ b/src/Generated/Models/InternalCreateImageEditRequestResponseFormat.cs @@ -21,9 +21,9 @@ public InternalCreateImageEditRequestResponseFormat(string value) _value = value; } - public static InternalCreateImageEditRequestResponseFormat Url { get; } = new InternalCreateImageEditRequestResponseFormat(UrlValue); + internal static InternalCreateImageEditRequestResponseFormat Url { get; } = new InternalCreateImageEditRequestResponseFormat(UrlValue); - public static InternalCreateImageEditRequestResponseFormat B64Json { get; } = new InternalCreateImageEditRequestResponseFormat(B64JsonValue); + internal static InternalCreateImageEditRequestResponseFormat B64Json { get; } = new InternalCreateImageEditRequestResponseFormat(B64JsonValue); public static bool operator ==(InternalCreateImageEditRequestResponseFormat left, InternalCreateImageEditRequestResponseFormat right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateImageEditRequestSize.cs b/src/Generated/Models/InternalCreateImageEditRequestSize.cs index abedecc3a..b8b4a511d 100644 --- a/src/Generated/Models/InternalCreateImageEditRequestSize.cs +++ b/src/Generated/Models/InternalCreateImageEditRequestSize.cs @@ -14,6 +14,9 @@ namespace OpenAI.Images private const string _256x256Value = "256x256"; private const string _512x512Value = "512x512"; private const string _1024x1024Value = "1024x1024"; + private const string _1536x1024Value = "1536x1024"; + private const string _1024x1536Value = "1024x1536"; + private const string AutoValue = "auto"; public InternalCreateImageEditRequestSize(string value) { @@ -22,11 +25,17 @@ public InternalCreateImageEditRequestSize(string value) _value = value; } - public static InternalCreateImageEditRequestSize _256x256 { get; } = new InternalCreateImageEditRequestSize(_256x256Value); + internal static InternalCreateImageEditRequestSize _256x256 { get; } = new InternalCreateImageEditRequestSize(_256x256Value); - public static InternalCreateImageEditRequestSize _512x512 { get; } = new InternalCreateImageEditRequestSize(_512x512Value); + internal static InternalCreateImageEditRequestSize _512x512 { get; } = new InternalCreateImageEditRequestSize(_512x512Value); - public static InternalCreateImageEditRequestSize _1024x1024 { get; } = new InternalCreateImageEditRequestSize(_1024x1024Value); + internal static InternalCreateImageEditRequestSize _1024x1024 { get; } = new InternalCreateImageEditRequestSize(_1024x1024Value); + + internal static InternalCreateImageEditRequestSize _1536x1024 { get; } = new InternalCreateImageEditRequestSize(_1536x1024Value); + + internal static InternalCreateImageEditRequestSize _1024x1536 { get; } = new InternalCreateImageEditRequestSize(_1024x1536Value); + + internal static InternalCreateImageEditRequestSize Auto { get; } = new InternalCreateImageEditRequestSize(AutoValue); public static bool operator ==(InternalCreateImageEditRequestSize left, InternalCreateImageEditRequestSize right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateImageRequestModel.cs b/src/Generated/Models/InternalCreateImageRequestModel.cs index d5d2c8e89..03e4b723c 100644 --- a/src/Generated/Models/InternalCreateImageRequestModel.cs +++ b/src/Generated/Models/InternalCreateImageRequestModel.cs @@ -13,6 +13,7 @@ namespace OpenAI.Images private readonly string _value; private const string DallE2Value = "dall-e-2"; private const string DallE3Value = "dall-e-3"; + private const string GptImage1Value = "gpt-image-1"; public InternalCreateImageRequestModel(string value) { @@ -21,9 +22,11 @@ public InternalCreateImageRequestModel(string value) _value = value; } - public static InternalCreateImageRequestModel DallE2 { get; } = new InternalCreateImageRequestModel(DallE2Value); + internal static InternalCreateImageRequestModel DallE2 { get; } = new InternalCreateImageRequestModel(DallE2Value); - public static InternalCreateImageRequestModel DallE3 { get; } = new InternalCreateImageRequestModel(DallE3Value); + internal static InternalCreateImageRequestModel DallE3 { get; } = new InternalCreateImageRequestModel(DallE3Value); + + internal static InternalCreateImageRequestModel GptImage1 { get; } = new InternalCreateImageRequestModel(GptImage1Value); public static bool operator ==(InternalCreateImageRequestModel left, InternalCreateImageRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateImageVariationRequestModel.cs b/src/Generated/Models/InternalCreateImageVariationRequestModel.cs index 10a223fed..1943637c6 100644 --- a/src/Generated/Models/InternalCreateImageVariationRequestModel.cs +++ b/src/Generated/Models/InternalCreateImageVariationRequestModel.cs @@ -20,7 +20,7 @@ public InternalCreateImageVariationRequestModel(string value) _value = value; } - public static InternalCreateImageVariationRequestModel DallE2 { get; } = new InternalCreateImageVariationRequestModel(DallE2Value); + internal static InternalCreateImageVariationRequestModel DallE2 { get; } = new InternalCreateImageVariationRequestModel(DallE2Value); public static bool operator ==(InternalCreateImageVariationRequestModel left, InternalCreateImageVariationRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateImageVariationRequestResponseFormat.cs b/src/Generated/Models/InternalCreateImageVariationRequestResponseFormat.cs index 3d5c9d150..49e0f1700 100644 --- a/src/Generated/Models/InternalCreateImageVariationRequestResponseFormat.cs +++ b/src/Generated/Models/InternalCreateImageVariationRequestResponseFormat.cs @@ -21,9 +21,9 @@ public InternalCreateImageVariationRequestResponseFormat(string value) _value = value; } - public static InternalCreateImageVariationRequestResponseFormat Url { get; } = new InternalCreateImageVariationRequestResponseFormat(UrlValue); + internal static InternalCreateImageVariationRequestResponseFormat Url { get; } = new InternalCreateImageVariationRequestResponseFormat(UrlValue); - public static InternalCreateImageVariationRequestResponseFormat B64Json { get; } = new InternalCreateImageVariationRequestResponseFormat(B64JsonValue); + internal static InternalCreateImageVariationRequestResponseFormat B64Json { get; } = new InternalCreateImageVariationRequestResponseFormat(B64JsonValue); public static bool operator ==(InternalCreateImageVariationRequestResponseFormat left, InternalCreateImageVariationRequestResponseFormat right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateImageVariationRequestSize.cs b/src/Generated/Models/InternalCreateImageVariationRequestSize.cs index a418e0dfa..54362a93d 100644 --- a/src/Generated/Models/InternalCreateImageVariationRequestSize.cs +++ b/src/Generated/Models/InternalCreateImageVariationRequestSize.cs @@ -22,11 +22,11 @@ public InternalCreateImageVariationRequestSize(string value) _value = value; } - public static InternalCreateImageVariationRequestSize _256x256 { get; } = new InternalCreateImageVariationRequestSize(_256x256Value); + internal static InternalCreateImageVariationRequestSize _256x256 { get; } = new InternalCreateImageVariationRequestSize(_256x256Value); - public static InternalCreateImageVariationRequestSize _512x512 { get; } = new InternalCreateImageVariationRequestSize(_512x512Value); + internal static InternalCreateImageVariationRequestSize _512x512 { get; } = new InternalCreateImageVariationRequestSize(_512x512Value); - public static InternalCreateImageVariationRequestSize _1024x1024 { get; } = new InternalCreateImageVariationRequestSize(_1024x1024Value); + internal static InternalCreateImageVariationRequestSize _1024x1024 { get; } = new InternalCreateImageVariationRequestSize(_1024x1024Value); public static bool operator ==(InternalCreateImageVariationRequestSize left, InternalCreateImageVariationRequestSize right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateModerationRequestInput2.Serialization.cs b/src/Generated/Models/InternalCreateModerationRequestInput2.Serialization.cs index 4f0f2a627..0654c5b69 100644 --- a/src/Generated/Models/InternalCreateModerationRequestInput2.Serialization.cs +++ b/src/Generated/Models/InternalCreateModerationRequestInput2.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,13 +35,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind); } if (_additionalBinaryDataProperties?.ContainsKey("image_url") != true) { writer.WritePropertyName("image_url"u8); writer.WriteObjectValue(ImageUrl, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateModerationRequestInput2 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateModerationRequestInput2 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,14 +84,14 @@ internal static InternalCreateModerationRequestInput2 DeserializeInternalCreateM { return null; } - InternalCreateModerationRequestInput2Type @type = default; + string kind = default; InternalCreateModerationRequestInputImageUrl imageUrl = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalCreateModerationRequestInput2Type(prop.Value.GetString()); + kind = prop.Value.GetString(); continue; } if (prop.NameEquals("image_url"u8)) @@ -96,20 +99,22 @@ internal static InternalCreateModerationRequestInput2 DeserializeInternalCreateM imageUrl = InternalCreateModerationRequestInputImageUrl.DeserializeInternalCreateModerationRequestInputImageUrl(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCreateModerationRequestInput2(@type, imageUrl, additionalBinaryDataProperties); + return new InternalCreateModerationRequestInput2(kind, imageUrl, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateModerationRequestInput2)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateModerationRequestInput2 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateModerationRequestInput2 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalCreateModerationRequestInput2 PersistableModelCreateCo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateModerationRequestInput2 internalCreateModerationRequestInput2) - { - if (internalCreateModerationRequestInput2 == null) - { - return null; - } - return BinaryContent.Create(internalCreateModerationRequestInput2, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateModerationRequestInput2(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateModerationRequestInput2(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateModerationRequestInput2.cs b/src/Generated/Models/InternalCreateModerationRequestInput2.cs index 8048b07c6..5ba7b010b 100644 --- a/src/Generated/Models/InternalCreateModerationRequestInput2.cs +++ b/src/Generated/Models/InternalCreateModerationRequestInput2.cs @@ -12,23 +12,23 @@ internal partial class InternalCreateModerationRequestInput2 { private protected IDictionary _additionalBinaryDataProperties; - public InternalCreateModerationRequestInput2(InternalCreateModerationRequestInputImageUrl imageUrl) + internal InternalCreateModerationRequestInput2(InternalCreateModerationRequestInputImageUrl imageUrl) { Argument.AssertNotNull(imageUrl, nameof(imageUrl)); ImageUrl = imageUrl; } - internal InternalCreateModerationRequestInput2(InternalCreateModerationRequestInput2Type @type, InternalCreateModerationRequestInputImageUrl imageUrl, IDictionary additionalBinaryDataProperties) + internal InternalCreateModerationRequestInput2(string kind, InternalCreateModerationRequestInputImageUrl imageUrl, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; ImageUrl = imageUrl; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateModerationRequestInput2Type Type { get; } = "image_url"; + public string Kind { get; } = "image_url"; - public InternalCreateModerationRequestInputImageUrl ImageUrl { get; } + internal InternalCreateModerationRequestInputImageUrl ImageUrl { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalCreateModerationRequestInput2Type.cs b/src/Generated/Models/InternalCreateModerationRequestInput2Type.cs deleted file mode 100644 index 72ad5cd40..000000000 --- a/src/Generated/Models/InternalCreateModerationRequestInput2Type.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Moderations -{ - internal readonly partial struct InternalCreateModerationRequestInput2Type : IEquatable - { - private readonly string _value; - private const string ImageUrlValue = "image_url"; - - public InternalCreateModerationRequestInput2Type(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateModerationRequestInput2Type ImageUrl { get; } = new InternalCreateModerationRequestInput2Type(ImageUrlValue); - - public static bool operator ==(InternalCreateModerationRequestInput2Type left, InternalCreateModerationRequestInput2Type right) => left.Equals(right); - - public static bool operator !=(InternalCreateModerationRequestInput2Type left, InternalCreateModerationRequestInput2Type right) => !left.Equals(right); - - public static implicit operator InternalCreateModerationRequestInput2Type(string value) => new InternalCreateModerationRequestInput2Type(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateModerationRequestInput2Type other && Equals(other); - - public bool Equals(InternalCreateModerationRequestInput2Type 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/InternalCreateModerationRequestInput3.Serialization.cs b/src/Generated/Models/InternalCreateModerationRequestInput3.Serialization.cs index 2d4e3f374..6b9e466dd 100644 --- a/src/Generated/Models/InternalCreateModerationRequestInput3.Serialization.cs +++ b/src/Generated/Models/InternalCreateModerationRequestInput3.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,13 +35,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind); } if (_additionalBinaryDataProperties?.ContainsKey("text") != true) { writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateModerationRequestInput3 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateModerationRequestInput3 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,14 +84,14 @@ internal static InternalCreateModerationRequestInput3 DeserializeInternalCreateM { return null; } - InternalCreateModerationRequestInput3Type @type = default; + string kind = default; string text = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalCreateModerationRequestInput3Type(prop.Value.GetString()); + kind = prop.Value.GetString(); continue; } if (prop.NameEquals("text"u8)) @@ -96,20 +99,22 @@ internal static InternalCreateModerationRequestInput3 DeserializeInternalCreateM text = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCreateModerationRequestInput3(@type, text, additionalBinaryDataProperties); + return new InternalCreateModerationRequestInput3(kind, text, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateModerationRequestInput3)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateModerationRequestInput3 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateModerationRequestInput3 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalCreateModerationRequestInput3 PersistableModelCreateCo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateModerationRequestInput3 internalCreateModerationRequestInput3) - { - if (internalCreateModerationRequestInput3 == null) - { - return null; - } - return BinaryContent.Create(internalCreateModerationRequestInput3, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateModerationRequestInput3(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateModerationRequestInput3(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateModerationRequestInput3.cs b/src/Generated/Models/InternalCreateModerationRequestInput3.cs index 7c3522c33..293eadf8d 100644 --- a/src/Generated/Models/InternalCreateModerationRequestInput3.cs +++ b/src/Generated/Models/InternalCreateModerationRequestInput3.cs @@ -19,14 +19,14 @@ public InternalCreateModerationRequestInput3(string text) Text = text; } - internal InternalCreateModerationRequestInput3(InternalCreateModerationRequestInput3Type @type, string text, IDictionary additionalBinaryDataProperties) + internal InternalCreateModerationRequestInput3(string kind, string text, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; Text = text; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateModerationRequestInput3Type Type { get; } = "text"; + public string Kind { get; } = "text"; public string Text { get; } diff --git a/src/Generated/Models/InternalCreateModerationRequestInput3Type.cs b/src/Generated/Models/InternalCreateModerationRequestInput3Type.cs deleted file mode 100644 index 0e0e22bd9..000000000 --- a/src/Generated/Models/InternalCreateModerationRequestInput3Type.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Moderations -{ - internal readonly partial struct InternalCreateModerationRequestInput3Type : IEquatable - { - private readonly string _value; - private const string TextValue = "text"; - - public InternalCreateModerationRequestInput3Type(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateModerationRequestInput3Type Text { get; } = new InternalCreateModerationRequestInput3Type(TextValue); - - public static bool operator ==(InternalCreateModerationRequestInput3Type left, InternalCreateModerationRequestInput3Type right) => left.Equals(right); - - public static bool operator !=(InternalCreateModerationRequestInput3Type left, InternalCreateModerationRequestInput3Type right) => !left.Equals(right); - - public static implicit operator InternalCreateModerationRequestInput3Type(string value) => new InternalCreateModerationRequestInput3Type(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateModerationRequestInput3Type other && Equals(other); - - public bool Equals(InternalCreateModerationRequestInput3Type 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/InternalCreateModerationRequestInputImageUrl.Serialization.cs b/src/Generated/Models/InternalCreateModerationRequestInputImageUrl.Serialization.cs index 5d763edfc..3b95d4627 100644 --- a/src/Generated/Models/InternalCreateModerationRequestInputImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalCreateModerationRequestInputImageUrl.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("url"u8); writer.WriteStringValue(Url); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateModerationRequestInputImageUrl IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateModerationRequestInputImageUrl JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalCreateModerationRequestInputImageUrl DeserializeInternal url = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateModerationRequestInputImageUrl(url, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalCreateModerationRequestInputImageUrl DeserializeInternal BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateModerationRequestInputImageUrl)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateModerationRequestInputImageUrl IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateModerationRequestInputImageUrl PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalCreateModerationRequestInputImageUrl PersistableModelC } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateModerationRequestInputImageUrl internalCreateModerationRequestInputImageUrl) - { - if (internalCreateModerationRequestInputImageUrl == null) - { - return null; - } - return BinaryContent.Create(internalCreateModerationRequestInputImageUrl, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateModerationRequestInputImageUrl(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateModerationRequestInputImageUrl(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateModerationRequestModel.cs b/src/Generated/Models/InternalCreateModerationRequestModel.cs index 9427eba80..954a0f977 100644 --- a/src/Generated/Models/InternalCreateModerationRequestModel.cs +++ b/src/Generated/Models/InternalCreateModerationRequestModel.cs @@ -23,13 +23,13 @@ public InternalCreateModerationRequestModel(string value) _value = value; } - public static InternalCreateModerationRequestModel OmniModerationLatest { get; } = new InternalCreateModerationRequestModel(OmniModerationLatestValue); + internal static InternalCreateModerationRequestModel OmniModerationLatest { get; } = new InternalCreateModerationRequestModel(OmniModerationLatestValue); - public static InternalCreateModerationRequestModel OmniModeration20240926 { get; } = new InternalCreateModerationRequestModel(OmniModeration20240926Value); + internal static InternalCreateModerationRequestModel OmniModeration20240926 { get; } = new InternalCreateModerationRequestModel(OmniModeration20240926Value); - public static InternalCreateModerationRequestModel TextModerationLatest { get; } = new InternalCreateModerationRequestModel(TextModerationLatestValue); + internal static InternalCreateModerationRequestModel TextModerationLatest { get; } = new InternalCreateModerationRequestModel(TextModerationLatestValue); - public static InternalCreateModerationRequestModel TextModerationStable { get; } = new InternalCreateModerationRequestModel(TextModerationStableValue); + internal static InternalCreateModerationRequestModel TextModerationStable { get; } = new InternalCreateModerationRequestModel(TextModerationStableValue); public static bool operator ==(InternalCreateModerationRequestModel left, InternalCreateModerationRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.Serialization.cs b/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.Serialization.cs index 2075fc7bb..a4dc76c43 100644 --- a/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.Serialization.cs +++ b/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Moderations { internal partial class InternalCreateModerationResponseResultCategoryAppliedInputTypes : IJsonModel { - internal InternalCreateModerationResponseResultCategoryAppliedInputTypes() + internal InternalCreateModerationResponseResultCategoryAppliedInputTypes() : this(null, null, null, null, null, null, null, null, null, null, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -226,6 +227,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -249,6 +251,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateModerationResponseResultCategoryAppliedInputTypes IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateModerationResponseResultCategoryAppliedInputTypes JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -503,6 +506,7 @@ internal static InternalCreateModerationResponseResultCategoryAppliedInputTypes violenceGraphic = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateModerationResponseResultCategoryAppliedInputTypes( @@ -524,13 +528,14 @@ internal static InternalCreateModerationResponseResultCategoryAppliedInputTypes BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateModerationResponseResultCategoryAppliedInputTypes)} does not support writing '{options.Format}' format."); } @@ -538,6 +543,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateModerationResponseResultCategoryAppliedInputTypes IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateModerationResponseResultCategoryAppliedInputTypes PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -554,21 +560,5 @@ protected virtual InternalCreateModerationResponseResultCategoryAppliedInputType } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateModerationResponseResultCategoryAppliedInputTypes internalCreateModerationResponseResultCategoryAppliedInputTypes) - { - if (internalCreateModerationResponseResultCategoryAppliedInputTypes == null) - { - return null; - } - return BinaryContent.Create(internalCreateModerationResponseResultCategoryAppliedInputTypes, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateModerationResponseResultCategoryAppliedInputTypes(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateModerationResponseResultCategoryAppliedInputTypes(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.cs b/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.cs index de743bfbc..f40b731ca 100644 --- a/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.cs +++ b/src/Generated/Models/InternalCreateModerationResponseResultCategoryAppliedInputTypes.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; namespace OpenAI.Moderations { @@ -31,19 +32,20 @@ internal InternalCreateModerationResponseResultCategoryAppliedInputTypes(IEnumer internal InternalCreateModerationResponseResultCategoryAppliedInputTypes(IReadOnlyList hate, IReadOnlyList hateThreatening, IReadOnlyList harassment, IReadOnlyList harassmentThreatening, IReadOnlyList illicit, IReadOnlyList illicitViolent, IReadOnlyList selfHarm, IReadOnlyList selfHarmIntent, IReadOnlyList selfHarmInstructions, IReadOnlyList sexual, IReadOnlyList sexualMinors, IReadOnlyList violence, IReadOnlyList violenceGraphic, IDictionary additionalBinaryDataProperties) { - Hate = hate; - HateThreatening = hateThreatening; - Harassment = harassment; - HarassmentThreatening = harassmentThreatening; - Illicit = illicit; - IllicitViolent = illicitViolent; - SelfHarm = selfHarm; - SelfHarmIntent = selfHarmIntent; - SelfHarmInstructions = selfHarmInstructions; - Sexual = sexual; - SexualMinors = sexualMinors; - Violence = violence; - ViolenceGraphic = violenceGraphic; + // Plugin customization: ensure initialization of collections + Hate = hate ?? new ChangeTrackingList(); + HateThreatening = hateThreatening ?? new ChangeTrackingList(); + Harassment = harassment ?? new ChangeTrackingList(); + HarassmentThreatening = harassmentThreatening ?? new ChangeTrackingList(); + Illicit = illicit ?? new ChangeTrackingList(); + IllicitViolent = illicitViolent ?? new ChangeTrackingList(); + SelfHarm = selfHarm ?? new ChangeTrackingList(); + SelfHarmIntent = selfHarmIntent ?? new ChangeTrackingList(); + SelfHarmInstructions = selfHarmInstructions ?? new ChangeTrackingList(); + Sexual = sexual ?? new ChangeTrackingList(); + SexualMinors = sexualMinors ?? new ChangeTrackingList(); + Violence = violence ?? new ChangeTrackingList(); + ViolenceGraphic = violenceGraphic ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCreateResponsesRequestIncludable.cs b/src/Generated/Models/InternalCreateResponsesRequestIncludable.cs deleted file mode 100644 index 3c4902e14..000000000 --- a/src/Generated/Models/InternalCreateResponsesRequestIncludable.cs +++ /dev/null @@ -1,47 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalCreateResponsesRequestIncludable : IEquatable - { - private readonly string _value; - private const string FileSearchCallResultsValue = "file_search_call.results"; - private const string ComputerCallOutputOutputImageUrlValue = "computer_call_output.output.image_url"; - private const string MessageInputImageImageUrlValue = "message.input_image.image_url"; - - public InternalCreateResponsesRequestIncludable(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateResponsesRequestIncludable FileSearchCallResults { get; } = new InternalCreateResponsesRequestIncludable(FileSearchCallResultsValue); - - public static InternalCreateResponsesRequestIncludable ComputerCallOutputOutputImageUrl { get; } = new InternalCreateResponsesRequestIncludable(ComputerCallOutputOutputImageUrlValue); - - public static InternalCreateResponsesRequestIncludable MessageInputImageImageUrl { get; } = new InternalCreateResponsesRequestIncludable(MessageInputImageImageUrlValue); - - public static bool operator ==(InternalCreateResponsesRequestIncludable left, InternalCreateResponsesRequestIncludable right) => left.Equals(right); - - public static bool operator !=(InternalCreateResponsesRequestIncludable left, InternalCreateResponsesRequestIncludable right) => !left.Equals(right); - - public static implicit operator InternalCreateResponsesRequestIncludable(string value) => new InternalCreateResponsesRequestIncludable(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateResponsesRequestIncludable other && Equals(other); - - public bool Equals(InternalCreateResponsesRequestIncludable 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/InternalCreateResponsesRequestModel.cs b/src/Generated/Models/InternalCreateResponsesRequestModel.cs deleted file mode 100644 index b5b312d8b..000000000 --- a/src/Generated/Models/InternalCreateResponsesRequestModel.cs +++ /dev/null @@ -1,170 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalCreateResponsesRequestModel : IEquatable - { - private readonly string _value; - private const string O3MiniValue = "o3-mini"; - private const string O3Mini20250131Value = "o3-mini-2025-01-31"; - private const string O1Value = "o1"; - private const string O120241217Value = "o1-2024-12-17"; - private const string O1PreviewValue = "o1-preview"; - private const string O1Preview20240912Value = "o1-preview-2024-09-12"; - private const string O1MiniValue = "o1-mini"; - private const string O1Mini20240912Value = "o1-mini-2024-09-12"; - private const string ComputerUsePreviewValue = "computer-use-preview"; - private const string ComputerUsePreview20250204Value = "computer-use-preview-2025-02-04"; - private const string ComputerUsePreview20250311Value = "computer-use-preview-2025-03-11"; - private const string Gpt45PreviewValue = "gpt-4.5-preview"; - private const string Gpt45Preview20250227Value = "gpt-4.5-preview-2025-02-27"; - private const string Gpt4oValue = "gpt-4o"; - private const string Gpt4o20241120Value = "gpt-4o-2024-11-20"; - private const string Gpt4o20240806Value = "gpt-4o-2024-08-06"; - private const string Gpt4o20240513Value = "gpt-4o-2024-05-13"; - private const string Gpt4oAudioPreviewValue = "gpt-4o-audio-preview"; - private const string Gpt4oAudioPreview20241001Value = "gpt-4o-audio-preview-2024-10-01"; - private const string Gpt4oAudioPreview20241217Value = "gpt-4o-audio-preview-2024-12-17"; - private const string Gpt4oMiniAudioPreviewValue = "gpt-4o-mini-audio-preview"; - private const string Gpt4oMiniAudioPreview20241217Value = "gpt-4o-mini-audio-preview-2024-12-17"; - private const string Chatgpt4oLatestValue = "chatgpt-4o-latest"; - private const string Gpt4oMiniValue = "gpt-4o-mini"; - private const string Gpt4oMini20240718Value = "gpt-4o-mini-2024-07-18"; - private const string Gpt4TurboValue = "gpt-4-turbo"; - private const string Gpt4Turbo20240409Value = "gpt-4-turbo-2024-04-09"; - private const string Gpt40125PreviewValue = "gpt-4-0125-preview"; - private const string Gpt4TurboPreviewValue = "gpt-4-turbo-preview"; - private const string Gpt41106PreviewValue = "gpt-4-1106-preview"; - private const string Gpt4VisionPreviewValue = "gpt-4-vision-preview"; - private const string Gpt4Value = "gpt-4"; - private const string Gpt40314Value = "gpt-4-0314"; - private const string Gpt40613Value = "gpt-4-0613"; - private const string Gpt432kValue = "gpt-4-32k"; - private const string Gpt432k0314Value = "gpt-4-32k-0314"; - private const string Gpt432k0613Value = "gpt-4-32k-0613"; - private const string Gpt35TurboValue = "gpt-3.5-turbo"; - private const string Gpt35Turbo16kValue = "gpt-3.5-turbo-16k"; - private const string Gpt35Turbo0301Value = "gpt-3.5-turbo-0301"; - private const string Gpt35Turbo0613Value = "gpt-3.5-turbo-0613"; - private const string Gpt35Turbo1106Value = "gpt-3.5-turbo-1106"; - private const string Gpt35Turbo0125Value = "gpt-3.5-turbo-0125"; - private const string Gpt35Turbo16k0613Value = "gpt-3.5-turbo-16k-0613"; - - public InternalCreateResponsesRequestModel(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateResponsesRequestModel O3Mini { get; } = new InternalCreateResponsesRequestModel(O3MiniValue); - - public static InternalCreateResponsesRequestModel O3Mini20250131 { get; } = new InternalCreateResponsesRequestModel(O3Mini20250131Value); - - public static InternalCreateResponsesRequestModel O1 { get; } = new InternalCreateResponsesRequestModel(O1Value); - - public static InternalCreateResponsesRequestModel O120241217 { get; } = new InternalCreateResponsesRequestModel(O120241217Value); - - public static InternalCreateResponsesRequestModel O1Preview { get; } = new InternalCreateResponsesRequestModel(O1PreviewValue); - - public static InternalCreateResponsesRequestModel O1Preview20240912 { get; } = new InternalCreateResponsesRequestModel(O1Preview20240912Value); - - public static InternalCreateResponsesRequestModel O1Mini { get; } = new InternalCreateResponsesRequestModel(O1MiniValue); - - public static InternalCreateResponsesRequestModel O1Mini20240912 { get; } = new InternalCreateResponsesRequestModel(O1Mini20240912Value); - - public static InternalCreateResponsesRequestModel ComputerUsePreview { get; } = new InternalCreateResponsesRequestModel(ComputerUsePreviewValue); - - public static InternalCreateResponsesRequestModel ComputerUsePreview20250204 { get; } = new InternalCreateResponsesRequestModel(ComputerUsePreview20250204Value); - - public static InternalCreateResponsesRequestModel ComputerUsePreview20250311 { get; } = new InternalCreateResponsesRequestModel(ComputerUsePreview20250311Value); - - public static InternalCreateResponsesRequestModel Gpt45Preview { get; } = new InternalCreateResponsesRequestModel(Gpt45PreviewValue); - - public static InternalCreateResponsesRequestModel Gpt45Preview20250227 { get; } = new InternalCreateResponsesRequestModel(Gpt45Preview20250227Value); - - public static InternalCreateResponsesRequestModel Gpt4o { get; } = new InternalCreateResponsesRequestModel(Gpt4oValue); - - public static InternalCreateResponsesRequestModel Gpt4o20241120 { get; } = new InternalCreateResponsesRequestModel(Gpt4o20241120Value); - - public static InternalCreateResponsesRequestModel Gpt4o20240806 { get; } = new InternalCreateResponsesRequestModel(Gpt4o20240806Value); - - public static InternalCreateResponsesRequestModel Gpt4o20240513 { get; } = new InternalCreateResponsesRequestModel(Gpt4o20240513Value); - - public static InternalCreateResponsesRequestModel Gpt4oAudioPreview { get; } = new InternalCreateResponsesRequestModel(Gpt4oAudioPreviewValue); - - public static InternalCreateResponsesRequestModel Gpt4oAudioPreview20241001 { get; } = new InternalCreateResponsesRequestModel(Gpt4oAudioPreview20241001Value); - - public static InternalCreateResponsesRequestModel Gpt4oAudioPreview20241217 { get; } = new InternalCreateResponsesRequestModel(Gpt4oAudioPreview20241217Value); - - public static InternalCreateResponsesRequestModel Gpt4oMiniAudioPreview { get; } = new InternalCreateResponsesRequestModel(Gpt4oMiniAudioPreviewValue); - - public static InternalCreateResponsesRequestModel Gpt4oMiniAudioPreview20241217 { get; } = new InternalCreateResponsesRequestModel(Gpt4oMiniAudioPreview20241217Value); - - public static InternalCreateResponsesRequestModel Chatgpt4oLatest { get; } = new InternalCreateResponsesRequestModel(Chatgpt4oLatestValue); - - public static InternalCreateResponsesRequestModel Gpt4oMini { get; } = new InternalCreateResponsesRequestModel(Gpt4oMiniValue); - - public static InternalCreateResponsesRequestModel Gpt4oMini20240718 { get; } = new InternalCreateResponsesRequestModel(Gpt4oMini20240718Value); - - public static InternalCreateResponsesRequestModel Gpt4Turbo { get; } = new InternalCreateResponsesRequestModel(Gpt4TurboValue); - - public static InternalCreateResponsesRequestModel Gpt4Turbo20240409 { get; } = new InternalCreateResponsesRequestModel(Gpt4Turbo20240409Value); - - public static InternalCreateResponsesRequestModel Gpt40125Preview { get; } = new InternalCreateResponsesRequestModel(Gpt40125PreviewValue); - - public static InternalCreateResponsesRequestModel Gpt4TurboPreview { get; } = new InternalCreateResponsesRequestModel(Gpt4TurboPreviewValue); - - public static InternalCreateResponsesRequestModel Gpt41106Preview { get; } = new InternalCreateResponsesRequestModel(Gpt41106PreviewValue); - - public static InternalCreateResponsesRequestModel Gpt4VisionPreview { get; } = new InternalCreateResponsesRequestModel(Gpt4VisionPreviewValue); - - public static InternalCreateResponsesRequestModel Gpt4 { get; } = new InternalCreateResponsesRequestModel(Gpt4Value); - - public static InternalCreateResponsesRequestModel Gpt40314 { get; } = new InternalCreateResponsesRequestModel(Gpt40314Value); - - public static InternalCreateResponsesRequestModel Gpt40613 { get; } = new InternalCreateResponsesRequestModel(Gpt40613Value); - - public static InternalCreateResponsesRequestModel Gpt432k { get; } = new InternalCreateResponsesRequestModel(Gpt432kValue); - - public static InternalCreateResponsesRequestModel Gpt432k0314 { get; } = new InternalCreateResponsesRequestModel(Gpt432k0314Value); - - public static InternalCreateResponsesRequestModel Gpt432k0613 { get; } = new InternalCreateResponsesRequestModel(Gpt432k0613Value); - - public static InternalCreateResponsesRequestModel Gpt35Turbo { get; } = new InternalCreateResponsesRequestModel(Gpt35TurboValue); - - public static InternalCreateResponsesRequestModel Gpt35Turbo16k { get; } = new InternalCreateResponsesRequestModel(Gpt35Turbo16kValue); - - public static InternalCreateResponsesRequestModel Gpt35Turbo0301 { get; } = new InternalCreateResponsesRequestModel(Gpt35Turbo0301Value); - - public static InternalCreateResponsesRequestModel Gpt35Turbo0613 { get; } = new InternalCreateResponsesRequestModel(Gpt35Turbo0613Value); - - public static InternalCreateResponsesRequestModel Gpt35Turbo1106 { get; } = new InternalCreateResponsesRequestModel(Gpt35Turbo1106Value); - - public static InternalCreateResponsesRequestModel Gpt35Turbo0125 { get; } = new InternalCreateResponsesRequestModel(Gpt35Turbo0125Value); - - public static InternalCreateResponsesRequestModel Gpt35Turbo16k0613 { get; } = new InternalCreateResponsesRequestModel(Gpt35Turbo16k0613Value); - - public static bool operator ==(InternalCreateResponsesRequestModel left, InternalCreateResponsesRequestModel right) => left.Equals(right); - - public static bool operator !=(InternalCreateResponsesRequestModel left, InternalCreateResponsesRequestModel right) => !left.Equals(right); - - public static implicit operator InternalCreateResponsesRequestModel(string value) => new InternalCreateResponsesRequestModel(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateResponsesRequestModel other && Equals(other); - - public bool Equals(InternalCreateResponsesRequestModel 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/InternalCreateResponsesResponseObject.cs b/src/Generated/Models/InternalCreateResponsesResponseObject.cs deleted file mode 100644 index cc9646a32..000000000 --- a/src/Generated/Models/InternalCreateResponsesResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalCreateResponsesResponseObject : IEquatable - { - private readonly string _value; - private const string ResponseValue = "response"; - - public InternalCreateResponsesResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateResponsesResponseObject Response { get; } = new InternalCreateResponsesResponseObject(ResponseValue); - - public static bool operator ==(InternalCreateResponsesResponseObject left, InternalCreateResponsesResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalCreateResponsesResponseObject left, InternalCreateResponsesResponseObject right) => !left.Equals(right); - - public static implicit operator InternalCreateResponsesResponseObject(string value) => new InternalCreateResponsesResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateResponsesResponseObject other && Equals(other); - - public bool Equals(InternalCreateResponsesResponseObject 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/InternalCreateSpeechRequestModel.cs b/src/Generated/Models/InternalCreateSpeechRequestModel.cs index 8c9149261..40f9eb852 100644 --- a/src/Generated/Models/InternalCreateSpeechRequestModel.cs +++ b/src/Generated/Models/InternalCreateSpeechRequestModel.cs @@ -13,6 +13,7 @@ namespace OpenAI.Audio private readonly string _value; private const string Tts1Value = "tts-1"; private const string Tts1HdValue = "tts-1-hd"; + private const string Gpt4oMiniTtsValue = "gpt-4o-mini-tts"; public InternalCreateSpeechRequestModel(string value) { @@ -21,9 +22,11 @@ public InternalCreateSpeechRequestModel(string value) _value = value; } - public static InternalCreateSpeechRequestModel Tts1 { get; } = new InternalCreateSpeechRequestModel(Tts1Value); + internal static InternalCreateSpeechRequestModel Tts1 { get; } = new InternalCreateSpeechRequestModel(Tts1Value); - public static InternalCreateSpeechRequestModel Tts1Hd { get; } = new InternalCreateSpeechRequestModel(Tts1HdValue); + internal static InternalCreateSpeechRequestModel Tts1Hd { get; } = new InternalCreateSpeechRequestModel(Tts1HdValue); + + internal static InternalCreateSpeechRequestModel Gpt4oMiniTts { get; } = new InternalCreateSpeechRequestModel(Gpt4oMiniTtsValue); public static bool operator ==(InternalCreateSpeechRequestModel left, InternalCreateSpeechRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs index e8e22aec0..6dd0a185b 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalCreateThreadAndRunRequest : IJsonModel { - internal InternalCreateThreadAndRunRequest() + internal InternalCreateThreadAndRunRequest() : this(null, null, null, null, null, default, default, default, default, default, null, default, null, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -127,6 +128,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("tool_choice"u8); writer.WriteObjectValue(ToolChoice, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -150,6 +152,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateThreadAndRunRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadAndRunRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -354,6 +357,7 @@ internal static InternalCreateThreadAndRunRequest DeserializeInternalCreateThrea toolChoice = ToolConstraint.DeserializeToolConstraint(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadAndRunRequest( @@ -378,13 +382,14 @@ internal static InternalCreateThreadAndRunRequest DeserializeInternalCreateThrea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateThreadAndRunRequest)} does not support writing '{options.Format}' format."); } @@ -392,6 +397,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateThreadAndRunRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadAndRunRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -408,21 +414,5 @@ protected virtual InternalCreateThreadAndRunRequest PersistableModelCreateCore(B } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateThreadAndRunRequest internalCreateThreadAndRunRequest) - { - if (internalCreateThreadAndRunRequest == null) - { - return null; - } - return BinaryContent.Create(internalCreateThreadAndRunRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateThreadAndRunRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateThreadAndRunRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequest.cs b/src/Generated/Models/InternalCreateThreadAndRunRequest.cs index 237c224ce..d3ee39f3c 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequest.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequest.cs @@ -23,11 +23,12 @@ public InternalCreateThreadAndRunRequest(string assistantId) internal InternalCreateThreadAndRunRequest(string assistantId, ThreadCreationOptions thread, string instructions, IList tools, IDictionary metadata, float? temperature, float? topP, bool? stream, int? maxPromptTokens, int? maxCompletionTokens, RunTruncationStrategy truncationStrategy, bool? parallelToolCalls, string model, ToolResources toolResources, AssistantResponseFormat responseFormat, ToolConstraint toolChoice, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections AssistantId = assistantId; Thread = thread; Instructions = instructions; - Tools = tools; - Metadata = metadata; + Tools = tools ?? new ChangeTrackingList(); + Metadata = metadata ?? new ChangeTrackingDictionary(); Temperature = temperature; TopP = topP; Stream = stream; diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestModel.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestModel.cs index 7a540c6f2..d9aa2f1ef 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestModel.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestModel.cs @@ -11,6 +11,12 @@ namespace OpenAI.Assistants internal readonly partial struct InternalCreateThreadAndRunRequestModel : IEquatable { private readonly string _value; + private const string Gpt41Value = "gpt-4.1"; + private const string Gpt41MiniValue = "gpt-4.1-mini"; + private const string Gpt41NanoValue = "gpt-4.1-nano"; + private const string Gpt4120250414Value = "gpt-4.1-2025-04-14"; + private const string Gpt41Mini20250414Value = "gpt-4.1-mini-2025-04-14"; + private const string Gpt41Nano20250414Value = "gpt-4.1-nano-2025-04-14"; private const string Gpt4oValue = "gpt-4o"; private const string Gpt4o20241120Value = "gpt-4o-2024-11-20"; private const string Gpt4o20240806Value = "gpt-4o-2024-08-06"; @@ -45,57 +51,69 @@ public InternalCreateThreadAndRunRequestModel(string value) _value = value; } - public static InternalCreateThreadAndRunRequestModel Gpt4o { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4oValue); + internal static InternalCreateThreadAndRunRequestModel Gpt41 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt41Value); - public static InternalCreateThreadAndRunRequestModel Gpt4o20241120 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4o20241120Value); + internal static InternalCreateThreadAndRunRequestModel Gpt41Mini { get; } = new InternalCreateThreadAndRunRequestModel(Gpt41MiniValue); - public static InternalCreateThreadAndRunRequestModel Gpt4o20240806 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4o20240806Value); + internal static InternalCreateThreadAndRunRequestModel Gpt41Nano { get; } = new InternalCreateThreadAndRunRequestModel(Gpt41NanoValue); - public static InternalCreateThreadAndRunRequestModel Gpt4o20240513 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4o20240513Value); + internal static InternalCreateThreadAndRunRequestModel Gpt4120250414 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4120250414Value); - public static InternalCreateThreadAndRunRequestModel Gpt4oMini { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4oMiniValue); + internal static InternalCreateThreadAndRunRequestModel Gpt41Mini20250414 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt41Mini20250414Value); - public static InternalCreateThreadAndRunRequestModel Gpt4oMini20240718 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4oMini20240718Value); + internal static InternalCreateThreadAndRunRequestModel Gpt41Nano20250414 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt41Nano20250414Value); - public static InternalCreateThreadAndRunRequestModel Gpt45Preview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt45PreviewValue); + internal static InternalCreateThreadAndRunRequestModel Gpt4o { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4oValue); - public static InternalCreateThreadAndRunRequestModel Gpt45Preview20250227 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt45Preview20250227Value); + internal static InternalCreateThreadAndRunRequestModel Gpt4o20241120 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4o20241120Value); - public static InternalCreateThreadAndRunRequestModel Gpt4Turbo { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4TurboValue); + internal static InternalCreateThreadAndRunRequestModel Gpt4o20240806 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4o20240806Value); - public static InternalCreateThreadAndRunRequestModel Gpt4Turbo20240409 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4Turbo20240409Value); + internal static InternalCreateThreadAndRunRequestModel Gpt4o20240513 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4o20240513Value); - public static InternalCreateThreadAndRunRequestModel Gpt40125Preview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt40125PreviewValue); + internal static InternalCreateThreadAndRunRequestModel Gpt4oMini { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4oMiniValue); - public static InternalCreateThreadAndRunRequestModel Gpt4TurboPreview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4TurboPreviewValue); + internal static InternalCreateThreadAndRunRequestModel Gpt4oMini20240718 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4oMini20240718Value); - public static InternalCreateThreadAndRunRequestModel Gpt41106Preview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt41106PreviewValue); + internal static InternalCreateThreadAndRunRequestModel Gpt45Preview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt45PreviewValue); - public static InternalCreateThreadAndRunRequestModel Gpt4VisionPreview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4VisionPreviewValue); + internal static InternalCreateThreadAndRunRequestModel Gpt45Preview20250227 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt45Preview20250227Value); - public static InternalCreateThreadAndRunRequestModel Gpt4 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4Value); + internal static InternalCreateThreadAndRunRequestModel Gpt4Turbo { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4TurboValue); - public static InternalCreateThreadAndRunRequestModel Gpt40314 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt40314Value); + internal static InternalCreateThreadAndRunRequestModel Gpt4Turbo20240409 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4Turbo20240409Value); - public static InternalCreateThreadAndRunRequestModel Gpt40613 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt40613Value); + internal static InternalCreateThreadAndRunRequestModel Gpt40125Preview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt40125PreviewValue); - public static InternalCreateThreadAndRunRequestModel Gpt432k { get; } = new InternalCreateThreadAndRunRequestModel(Gpt432kValue); + internal static InternalCreateThreadAndRunRequestModel Gpt4TurboPreview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4TurboPreviewValue); - public static InternalCreateThreadAndRunRequestModel Gpt432k0314 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt432k0314Value); + internal static InternalCreateThreadAndRunRequestModel Gpt41106Preview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt41106PreviewValue); - public static InternalCreateThreadAndRunRequestModel Gpt432k0613 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt432k0613Value); + internal static InternalCreateThreadAndRunRequestModel Gpt4VisionPreview { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4VisionPreviewValue); - public static InternalCreateThreadAndRunRequestModel Gpt35Turbo { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35TurboValue); + internal static InternalCreateThreadAndRunRequestModel Gpt4 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt4Value); - public static InternalCreateThreadAndRunRequestModel Gpt35Turbo16k { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo16kValue); + internal static InternalCreateThreadAndRunRequestModel Gpt40314 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt40314Value); - public static InternalCreateThreadAndRunRequestModel Gpt35Turbo0613 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo0613Value); + internal static InternalCreateThreadAndRunRequestModel Gpt40613 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt40613Value); - public static InternalCreateThreadAndRunRequestModel Gpt35Turbo1106 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo1106Value); + internal static InternalCreateThreadAndRunRequestModel Gpt432k { get; } = new InternalCreateThreadAndRunRequestModel(Gpt432kValue); - public static InternalCreateThreadAndRunRequestModel Gpt35Turbo0125 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo0125Value); + internal static InternalCreateThreadAndRunRequestModel Gpt432k0314 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt432k0314Value); - public static InternalCreateThreadAndRunRequestModel Gpt35Turbo16k0613 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo16k0613Value); + internal static InternalCreateThreadAndRunRequestModel Gpt432k0613 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt432k0613Value); + + internal static InternalCreateThreadAndRunRequestModel Gpt35Turbo { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35TurboValue); + + internal static InternalCreateThreadAndRunRequestModel Gpt35Turbo16k { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo16kValue); + + internal static InternalCreateThreadAndRunRequestModel Gpt35Turbo0613 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo0613Value); + + internal static InternalCreateThreadAndRunRequestModel Gpt35Turbo1106 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo1106Value); + + internal static InternalCreateThreadAndRunRequestModel Gpt35Turbo0125 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo0125Value); + + internal static InternalCreateThreadAndRunRequestModel Gpt35Turbo16k0613 { get; } = new InternalCreateThreadAndRunRequestModel(Gpt35Turbo16k0613Value); public static bool operator ==(InternalCreateThreadAndRunRequestModel left, InternalCreateThreadAndRunRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolChoice.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolChoice.cs index 439d3b7fc..aed6de1ca 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolChoice.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolChoice.cs @@ -22,11 +22,11 @@ public InternalCreateThreadAndRunRequestToolChoice(string value) _value = value; } - public static InternalCreateThreadAndRunRequestToolChoice None { get; } = new InternalCreateThreadAndRunRequestToolChoice(NoneValue); + internal static InternalCreateThreadAndRunRequestToolChoice None { get; } = new InternalCreateThreadAndRunRequestToolChoice(NoneValue); - public static InternalCreateThreadAndRunRequestToolChoice Auto { get; } = new InternalCreateThreadAndRunRequestToolChoice(AutoValue); + internal static InternalCreateThreadAndRunRequestToolChoice Auto { get; } = new InternalCreateThreadAndRunRequestToolChoice(AutoValue); - public static InternalCreateThreadAndRunRequestToolChoice Required { get; } = new InternalCreateThreadAndRunRequestToolChoice(RequiredValue); + internal static InternalCreateThreadAndRunRequestToolChoice Required { get; } = new InternalCreateThreadAndRunRequestToolChoice(RequiredValue); public static bool operator ==(InternalCreateThreadAndRunRequestToolChoice left, InternalCreateThreadAndRunRequestToolChoice right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs index ea3d59e55..c435194cd 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateThreadAndRunRequestToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadAndRunRequestToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static InternalCreateThreadAndRunRequestToolResources DeserializeIntern fileSearch = InternalToolResourcesFileSearchIdsOnly.DeserializeInternalToolResourcesFileSearchIdsOnly(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadAndRunRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static InternalCreateThreadAndRunRequestToolResources DeserializeIntern BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateThreadAndRunRequestToolResources)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateThreadAndRunRequestToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadAndRunRequestToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalCreateThreadAndRunRequestToolResources PersistableMode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateThreadAndRunRequestToolResources internalCreateThreadAndRunRequestToolResources) - { - if (internalCreateThreadAndRunRequestToolResources == null) - { - return null; - } - return BinaryContent.Create(internalCreateThreadAndRunRequestToolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateThreadAndRunRequestToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateThreadAndRunRequestToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.cs index 08726ec52..b3862c664 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResources.cs @@ -22,9 +22,9 @@ internal InternalCreateThreadAndRunRequestToolResources(InternalCreateThreadAndR _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } + internal InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } - public InternalToolResourcesFileSearchIdsOnly FileSearch { get; set; } + internal InternalToolResourcesFileSearchIdsOnly FileSearch { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs index 465600247..bc4c3eaa1 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.W writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter De fileIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter De BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter internalCreateThreadAndRunRequestToolResourcesCodeInterpreter) - { - if (internalCreateThreadAndRunRequestToolResourcesCodeInterpreter == null) - { - return null; - } - return BinaryContent.Create(internalCreateThreadAndRunRequestToolResourcesCodeInterpreter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateThreadAndRunRequestToolResourcesCodeInterpreter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.cs index d48dfdb72..fdb581eab 100644 --- a/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter.cs @@ -12,14 +12,14 @@ internal partial class InternalCreateThreadAndRunRequestToolResourcesCodeInterpr { private protected IDictionary _additionalBinaryDataProperties; - public InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter() + public InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter() : this(null, null) { - FileIds = new ChangeTrackingList(); } internal InternalCreateThreadAndRunRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs index 1b2c7f3f9..d55c808d9 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateThreadRequestToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadRequestToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static InternalCreateThreadRequestToolResources DeserializeInternalCrea fileSearch = FileSearchToolResources.DeserializeFileSearchToolResources(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static InternalCreateThreadRequestToolResources DeserializeInternalCrea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateThreadRequestToolResources)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateThreadRequestToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadRequestToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalCreateThreadRequestToolResources PersistableModelCreat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateThreadRequestToolResources internalCreateThreadRequestToolResources) - { - if (internalCreateThreadRequestToolResources == null) - { - return null; - } - return BinaryContent.Create(internalCreateThreadRequestToolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateThreadRequestToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateThreadRequestToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResources.cs b/src/Generated/Models/InternalCreateThreadRequestToolResources.cs index f13e765c6..0c973b7cd 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResources.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResources.cs @@ -22,7 +22,7 @@ internal InternalCreateThreadRequestToolResources(InternalCreateThreadRequestToo _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalCreateThreadRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } + internal InternalCreateThreadRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } public FileSearchToolResources FileSearch { get; set; } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs index ce25a6869..b6bca2bbb 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(U writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateThreadRequestToolResourcesCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadRequestToolResourcesCodeInterpreter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalCreateThreadRequestToolResourcesCodeInterpreter Deserial fileIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalCreateThreadRequestToolResourcesCodeInterpreter Deserial BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateThreadRequestToolResourcesCodeInterpreter)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateThreadRequestToolResourcesCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadRequestToolResourcesCodeInterpreter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalCreateThreadRequestToolResourcesCodeInterpreter Persis } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateThreadRequestToolResourcesCodeInterpreter internalCreateThreadRequestToolResourcesCodeInterpreter) - { - if (internalCreateThreadRequestToolResourcesCodeInterpreter == null) - { - return null; - } - return BinaryContent.Create(internalCreateThreadRequestToolResourcesCodeInterpreter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateThreadRequestToolResourcesCodeInterpreter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateThreadRequestToolResourcesCodeInterpreter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.cs index af5286bc4..e5ed032d8 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesCodeInterpreter.cs @@ -12,14 +12,14 @@ internal partial class InternalCreateThreadRequestToolResourcesCodeInterpreter { private protected IDictionary _additionalBinaryDataProperties; - public InternalCreateThreadRequestToolResourcesCodeInterpreter() + public InternalCreateThreadRequestToolResourcesCodeInterpreter() : this(null, null) { - FileIds = new ChangeTrackingList(); } internal InternalCreateThreadRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs index af5668d00..05f531f3f 100644 --- a/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs +++ b/src/Generated/Models/InternalCreateThreadRequestToolResourcesFileSearchBase.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Ut writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,6 +28,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalCreateThreadRequestToolResourcesFileSearchBase)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -50,6 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateThreadRequestToolResourcesFileSearchBase IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadRequestToolResourcesFileSearchBase JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -70,6 +73,7 @@ internal static InternalCreateThreadRequestToolResourcesFileSearchBase Deseriali IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateThreadRequestToolResourcesFileSearchBase(additionalBinaryDataProperties); @@ -77,13 +81,14 @@ internal static InternalCreateThreadRequestToolResourcesFileSearchBase Deseriali BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateThreadRequestToolResourcesFileSearchBase)} does not support writing '{options.Format}' format."); } @@ -91,6 +96,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateThreadRequestToolResourcesFileSearchBase IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateThreadRequestToolResourcesFileSearchBase PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,21 +113,5 @@ protected virtual InternalCreateThreadRequestToolResourcesFileSearchBase Persist } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateThreadRequestToolResourcesFileSearchBase internalCreateThreadRequestToolResourcesFileSearchBase) - { - if (internalCreateThreadRequestToolResourcesFileSearchBase == null) - { - return null; - } - return BinaryContent.Create(internalCreateThreadRequestToolResourcesFileSearchBase, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateThreadRequestToolResourcesFileSearchBase(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateThreadRequestToolResourcesFileSearchBase(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateTranscriptionRequestAccept.cs b/src/Generated/Models/InternalCreateTranscriptionRequestAccept.cs new file mode 100644 index 000000000..2af628e07 --- /dev/null +++ b/src/Generated/Models/InternalCreateTranscriptionRequestAccept.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Audio +{ + internal readonly partial struct InternalCreateTranscriptionRequestAccept : IEquatable + { + private readonly string _value; + private const string ApplicationJsonValue = "application/json"; + private const string TextEventStreamValue = "text/event-stream"; + + public InternalCreateTranscriptionRequestAccept(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalCreateTranscriptionRequestAccept ApplicationJson { get; } = new InternalCreateTranscriptionRequestAccept(ApplicationJsonValue); + + internal static InternalCreateTranscriptionRequestAccept TextEventStream { get; } = new InternalCreateTranscriptionRequestAccept(TextEventStreamValue); + + public static bool operator ==(InternalCreateTranscriptionRequestAccept left, InternalCreateTranscriptionRequestAccept right) => left.Equals(right); + + public static bool operator !=(InternalCreateTranscriptionRequestAccept left, InternalCreateTranscriptionRequestAccept right) => !left.Equals(right); + + public static implicit operator InternalCreateTranscriptionRequestAccept(string value) => new InternalCreateTranscriptionRequestAccept(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalCreateTranscriptionRequestAccept other && Equals(other); + + public bool Equals(InternalCreateTranscriptionRequestAccept 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/InternalCreateTranscriptionRequestModel.cs b/src/Generated/Models/InternalCreateTranscriptionRequestModel.cs index 783ab0bcf..6751afaad 100644 --- a/src/Generated/Models/InternalCreateTranscriptionRequestModel.cs +++ b/src/Generated/Models/InternalCreateTranscriptionRequestModel.cs @@ -12,6 +12,8 @@ namespace OpenAI.Audio { private readonly string _value; private const string Whisper1Value = "whisper-1"; + private const string Gpt4oTranscribeValue = "gpt-4o-transcribe"; + private const string Gpt4oMiniTranscribeValue = "gpt-4o-mini-transcribe"; public InternalCreateTranscriptionRequestModel(string value) { @@ -20,7 +22,11 @@ public InternalCreateTranscriptionRequestModel(string value) _value = value; } - public static InternalCreateTranscriptionRequestModel Whisper1 { get; } = new InternalCreateTranscriptionRequestModel(Whisper1Value); + internal static InternalCreateTranscriptionRequestModel Whisper1 { get; } = new InternalCreateTranscriptionRequestModel(Whisper1Value); + + internal static InternalCreateTranscriptionRequestModel Gpt4oTranscribe { get; } = new InternalCreateTranscriptionRequestModel(Gpt4oTranscribeValue); + + internal static InternalCreateTranscriptionRequestModel Gpt4oMiniTranscribe { get; } = new InternalCreateTranscriptionRequestModel(Gpt4oMiniTranscribeValue); public static bool operator ==(InternalCreateTranscriptionRequestModel left, InternalCreateTranscriptionRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateTranscriptionRequestTimestampGranularities.cs b/src/Generated/Models/InternalCreateTranscriptionRequestTimestampGranularities.cs index f5153c185..002fbdd7a 100644 --- a/src/Generated/Models/InternalCreateTranscriptionRequestTimestampGranularities.cs +++ b/src/Generated/Models/InternalCreateTranscriptionRequestTimestampGranularities.cs @@ -21,9 +21,9 @@ public InternalCreateTranscriptionRequestTimestampGranularities(string value) _value = value; } - public static InternalCreateTranscriptionRequestTimestampGranularities Word { get; } = new InternalCreateTranscriptionRequestTimestampGranularities(WordValue); + internal static InternalCreateTranscriptionRequestTimestampGranularities Word { get; } = new InternalCreateTranscriptionRequestTimestampGranularities(WordValue); - public static InternalCreateTranscriptionRequestTimestampGranularities Segment { get; } = new InternalCreateTranscriptionRequestTimestampGranularities(SegmentValue); + internal static InternalCreateTranscriptionRequestTimestampGranularities Segment { get; } = new InternalCreateTranscriptionRequestTimestampGranularities(SegmentValue); public static bool operator ==(InternalCreateTranscriptionRequestTimestampGranularities left, InternalCreateTranscriptionRequestTimestampGranularities right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs b/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs index 282248ae1..082d64b28 100644 --- a/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs +++ b/src/Generated/Models/InternalCreateTranscriptionResponseJson.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Audio { internal partial class InternalCreateTranscriptionResponseJson : IJsonModel { - internal InternalCreateTranscriptionResponseJson() + internal InternalCreateTranscriptionResponseJson() : this(null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } + if (Optional.IsCollectionDefined(Logprobs) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) + { + writer.WritePropertyName("logprobs"u8); + writer.WriteStartArray(); + foreach (InternalCreateTranscriptionResponseJsonLogprob item in Logprobs) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateTranscriptionResponseJson IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateTranscriptionResponseJson JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -77,6 +90,7 @@ internal static InternalCreateTranscriptionResponseJson DeserializeInternalCreat return null; } string text = default; + IList logprobs = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -85,20 +99,36 @@ internal static InternalCreateTranscriptionResponseJson DeserializeInternalCreat text = prop.Value.GetString(); continue; } + if (prop.NameEquals("logprobs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalCreateTranscriptionResponseJsonLogprob.DeserializeInternalCreateTranscriptionResponseJsonLogprob(item, options)); + } + logprobs = array; + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCreateTranscriptionResponseJson(text, additionalBinaryDataProperties); + return new InternalCreateTranscriptionResponseJson(text, logprobs ?? new ChangeTrackingList(), additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateTranscriptionResponseJson)} does not support writing '{options.Format}' format."); } @@ -106,6 +136,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateTranscriptionResponseJson IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateTranscriptionResponseJson PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +153,5 @@ protected virtual InternalCreateTranscriptionResponseJson PersistableModelCreate } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateTranscriptionResponseJson internalCreateTranscriptionResponseJson) - { - if (internalCreateTranscriptionResponseJson == null) - { - return null; - } - return BinaryContent.Create(internalCreateTranscriptionResponseJson, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateTranscriptionResponseJson(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateTranscriptionResponseJson(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseJson.cs b/src/Generated/Models/InternalCreateTranscriptionResponseJson.cs index 0e765561d..32d2d6eac 100644 --- a/src/Generated/Models/InternalCreateTranscriptionResponseJson.cs +++ b/src/Generated/Models/InternalCreateTranscriptionResponseJson.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Audio { @@ -14,16 +15,21 @@ internal partial class InternalCreateTranscriptionResponseJson internal InternalCreateTranscriptionResponseJson(string text) { Text = text; + Logprobs = new ChangeTrackingList(); } - internal InternalCreateTranscriptionResponseJson(string text, IDictionary additionalBinaryDataProperties) + internal InternalCreateTranscriptionResponseJson(string text, IList logprobs, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Text = text; + Logprobs = logprobs ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } public string Text { get; } + internal IList Logprobs { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseJsonLogprob.Serialization.cs b/src/Generated/Models/InternalCreateTranscriptionResponseJsonLogprob.Serialization.cs new file mode 100644 index 000000000..e27a08005 --- /dev/null +++ b/src/Generated/Models/InternalCreateTranscriptionResponseJsonLogprob.Serialization.cs @@ -0,0 +1,168 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Audio +{ + internal partial class InternalCreateTranscriptionResponseJsonLogprob : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateTranscriptionResponseJsonLogprob)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Token) && _additionalBinaryDataProperties?.ContainsKey("token") != true) + { + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); + } + if (Optional.IsDefined(Logprob) && _additionalBinaryDataProperties?.ContainsKey("logprob") != true) + { + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(Logprob.Value); + } + if (Optional.IsCollectionDefined(Bytes) && _additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (float item in Bytes) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCreateTranscriptionResponseJsonLogprob IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateTranscriptionResponseJsonLogprob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateTranscriptionResponseJsonLogprob)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateTranscriptionResponseJsonLogprob(document.RootElement, options); + } + + internal static InternalCreateTranscriptionResponseJsonLogprob DeserializeInternalCreateTranscriptionResponseJsonLogprob(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string token = default; + float? logprob = default; + IList bytes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("token"u8)) + { + token = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprob"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + logprob = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetSingle()); + } + bytes = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateTranscriptionResponseJsonLogprob(token, logprob, bytes ?? new ChangeTrackingList(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCreateTranscriptionResponseJsonLogprob)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateTranscriptionResponseJsonLogprob IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateTranscriptionResponseJsonLogprob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateTranscriptionResponseJsonLogprob(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateTranscriptionResponseJsonLogprob)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseJsonLogprob.cs b/src/Generated/Models/InternalCreateTranscriptionResponseJsonLogprob.cs new file mode 100644 index 000000000..e47e0bf60 --- /dev/null +++ b/src/Generated/Models/InternalCreateTranscriptionResponseJsonLogprob.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Audio +{ + internal partial class InternalCreateTranscriptionResponseJsonLogprob + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalCreateTranscriptionResponseJsonLogprob() : this(null, default, null, null) + { + } + + internal InternalCreateTranscriptionResponseJsonLogprob(string token, float? logprob, IList bytes, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Token = token; + Logprob = logprob; + Bytes = bytes ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Token { get; } + + public float? Logprob { get; } + + public IList Bytes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJson.Serialization.cs b/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJson.Serialization.cs new file mode 100644 index 000000000..4c2ddb65b --- /dev/null +++ b/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJson.Serialization.cs @@ -0,0 +1,224 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Audio +{ + internal partial class InternalCreateTranscriptionResponseVerboseJson : IJsonModel + { + internal InternalCreateTranscriptionResponseVerboseJson() : this(null, null, default, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateTranscriptionResponseVerboseJson)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("task") != true) + { + writer.WritePropertyName("task"u8); + writer.WriteStringValue(Task); + } + if (_additionalBinaryDataProperties?.ContainsKey("language") != true) + { + writer.WritePropertyName("language"u8); + writer.WriteStringValue(Language); + } + if (_additionalBinaryDataProperties?.ContainsKey("duration") != true) + { + writer.WritePropertyName("duration"u8); + writer.WriteNumberValue(Convert.ToDouble(Duration.ToString("s\\.FFF"))); + } + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + // Plugin customization: remove options.Format != "W" check + if (Optional.IsCollectionDefined(Words) && _additionalBinaryDataProperties?.ContainsKey("words") != true) + { + writer.WritePropertyName("words"u8); + writer.WriteStartArray(); + foreach (TranscribedWord item in Words) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (Optional.IsCollectionDefined(Segments) && _additionalBinaryDataProperties?.ContainsKey("segments") != true) + { + writer.WritePropertyName("segments"u8); + writer.WriteStartArray(); + foreach (TranscribedSegment item in Segments) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalCreateTranscriptionResponseVerboseJson IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateTranscriptionResponseVerboseJson JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalCreateTranscriptionResponseVerboseJson)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalCreateTranscriptionResponseVerboseJson(document.RootElement, options); + } + + internal static InternalCreateTranscriptionResponseVerboseJson DeserializeInternalCreateTranscriptionResponseVerboseJson(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string task = default; + string language = default; + TimeSpan duration = default; + string text = default; + IReadOnlyList words = default; + IReadOnlyList segments = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("task"u8)) + { + task = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("language"u8)) + { + language = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("duration"u8)) + { + duration = TimeSpan.FromSeconds(prop.Value.GetDouble()); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("words"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(TranscribedWord.DeserializeTranscribedWord(item, options)); + } + words = array; + continue; + } + if (prop.NameEquals("segments"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(TranscribedSegment.DeserializeTranscribedSegment(item, options)); + } + segments = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalCreateTranscriptionResponseVerboseJson( + task, + language, + duration, + text, + words ?? new ChangeTrackingList(), + segments ?? new ChangeTrackingList(), + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalCreateTranscriptionResponseVerboseJson)} does not support writing '{options.Format}' format."); + } + } + + InternalCreateTranscriptionResponseVerboseJson IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalCreateTranscriptionResponseVerboseJson PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalCreateTranscriptionResponseVerboseJson(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalCreateTranscriptionResponseVerboseJson)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJson.cs b/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJson.cs new file mode 100644 index 000000000..1eb877fc4 --- /dev/null +++ b/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJson.cs @@ -0,0 +1,54 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Audio +{ + internal partial class InternalCreateTranscriptionResponseVerboseJson + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalCreateTranscriptionResponseVerboseJson(string language, TimeSpan duration, string text) + { + Language = language; + Duration = duration; + Text = text; + Words = new ChangeTrackingList(); + Segments = new ChangeTrackingList(); + } + + internal InternalCreateTranscriptionResponseVerboseJson(string task, string language, TimeSpan duration, string text, IReadOnlyList words, IReadOnlyList segments, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Task = task; + Language = language; + Duration = duration; + Text = text; + Words = words ?? new ChangeTrackingList(); + Segments = segments ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Task { get; } = "transcribe"; + + public string Language { get; } + + public TimeSpan Duration { get; } + + public string Text { get; } + + public IReadOnlyList Words { get; } + + public IReadOnlyList Segments { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJsonTask.cs b/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJsonTask.cs deleted file mode 100644 index 5d3c06858..000000000 --- a/src/Generated/Models/InternalCreateTranscriptionResponseVerboseJsonTask.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Audio -{ - internal readonly partial struct InternalCreateTranscriptionResponseVerboseJsonTask : IEquatable - { - private readonly string _value; - private const string TranscribeValue = "transcribe"; - - public InternalCreateTranscriptionResponseVerboseJsonTask(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateTranscriptionResponseVerboseJsonTask Transcribe { get; } = new InternalCreateTranscriptionResponseVerboseJsonTask(TranscribeValue); - - public static bool operator ==(InternalCreateTranscriptionResponseVerboseJsonTask left, InternalCreateTranscriptionResponseVerboseJsonTask right) => left.Equals(right); - - public static bool operator !=(InternalCreateTranscriptionResponseVerboseJsonTask left, InternalCreateTranscriptionResponseVerboseJsonTask right) => !left.Equals(right); - - public static implicit operator InternalCreateTranscriptionResponseVerboseJsonTask(string value) => new InternalCreateTranscriptionResponseVerboseJsonTask(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateTranscriptionResponseVerboseJsonTask other && Equals(other); - - public bool Equals(InternalCreateTranscriptionResponseVerboseJsonTask 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/InternalCreateTranslationRequestModel.cs b/src/Generated/Models/InternalCreateTranslationRequestModel.cs index f83ea19bc..c44d1bbbf 100644 --- a/src/Generated/Models/InternalCreateTranslationRequestModel.cs +++ b/src/Generated/Models/InternalCreateTranslationRequestModel.cs @@ -20,7 +20,7 @@ public InternalCreateTranslationRequestModel(string value) _value = value; } - public static InternalCreateTranslationRequestModel Whisper1 { get; } = new InternalCreateTranslationRequestModel(Whisper1Value); + internal static InternalCreateTranslationRequestModel Whisper1 { get; } = new InternalCreateTranslationRequestModel(Whisper1Value); public static bool operator ==(InternalCreateTranslationRequestModel left, InternalCreateTranslationRequestModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs b/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs index 1499fbd37..c085fb38e 100644 --- a/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs +++ b/src/Generated/Models/InternalCreateTranslationResponseJson.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("text"u8); writer.WriteStringValue(Text); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateTranslationResponseJson IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateTranslationResponseJson JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalCreateTranslationResponseJson DeserializeInternalCreateT text = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateTranslationResponseJson(text, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalCreateTranslationResponseJson DeserializeInternalCreateT BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateTranslationResponseJson)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateTranslationResponseJson IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateTranslationResponseJson PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalCreateTranslationResponseJson PersistableModelCreateCo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateTranslationResponseJson internalCreateTranslationResponseJson) - { - if (internalCreateTranslationResponseJson == null) - { - return null; - } - return BinaryContent.Create(internalCreateTranslationResponseJson, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateTranslationResponseJson(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateTranslationResponseJson(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateTranslationResponseVerboseJsonTask.cs b/src/Generated/Models/InternalCreateTranslationResponseVerboseJsonTask.cs deleted file mode 100644 index 22af3b6a7..000000000 --- a/src/Generated/Models/InternalCreateTranslationResponseVerboseJsonTask.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Audio -{ - internal readonly partial struct InternalCreateTranslationResponseVerboseJsonTask : IEquatable - { - private readonly string _value; - private const string TranslateValue = "translate"; - - public InternalCreateTranslationResponseVerboseJsonTask(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalCreateTranslationResponseVerboseJsonTask Translate { get; } = new InternalCreateTranslationResponseVerboseJsonTask(TranslateValue); - - public static bool operator ==(InternalCreateTranslationResponseVerboseJsonTask left, InternalCreateTranslationResponseVerboseJsonTask right) => left.Equals(right); - - public static bool operator !=(InternalCreateTranslationResponseVerboseJsonTask left, InternalCreateTranslationResponseVerboseJsonTask right) => !left.Equals(right); - - public static implicit operator InternalCreateTranslationResponseVerboseJsonTask(string value) => new InternalCreateTranslationResponseVerboseJsonTask(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalCreateTranslationResponseVerboseJsonTask other && Equals(other); - - public bool Equals(InternalCreateTranslationResponseVerboseJsonTask 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/InternalCreateUploadRequest.Serialization.cs b/src/Generated/Models/InternalCreateUploadRequest.Serialization.cs index d1ddbe246..0864b7923 100644 --- a/src/Generated/Models/InternalCreateUploadRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateUploadRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("mime_type"u8); writer.WriteStringValue(MimeType); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateUploadRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateUploadRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,6 +121,7 @@ internal static InternalCreateUploadRequest DeserializeInternalCreateUploadReque mimeType = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalCreateUploadRequest(filename, purpose, bytes, mimeType, additionalBinaryDataProperties); @@ -125,13 +129,14 @@ internal static InternalCreateUploadRequest DeserializeInternalCreateUploadReque BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateUploadRequest)} does not support writing '{options.Format}' format."); } @@ -139,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateUploadRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateUploadRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +161,5 @@ protected virtual InternalCreateUploadRequest PersistableModelCreateCore(BinaryD } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateUploadRequest internalCreateUploadRequest) - { - if (internalCreateUploadRequest == null) - { - return null; - } - return BinaryContent.Create(internalCreateUploadRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateUploadRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateUploadRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateUploadRequest.cs b/src/Generated/Models/InternalCreateUploadRequest.cs index 0fc06c1e2..a6c6be4d0 100644 --- a/src/Generated/Models/InternalCreateUploadRequest.cs +++ b/src/Generated/Models/InternalCreateUploadRequest.cs @@ -12,7 +12,7 @@ internal partial class InternalCreateUploadRequest { private protected IDictionary _additionalBinaryDataProperties; - public InternalCreateUploadRequest(string filename, InternalCreateUploadRequestPurpose purpose, int bytes, string mimeType) + internal InternalCreateUploadRequest(string filename, InternalCreateUploadRequestPurpose purpose, int bytes, string mimeType) { Argument.AssertNotNull(filename, nameof(filename)); Argument.AssertNotNull(mimeType, nameof(mimeType)); @@ -34,7 +34,7 @@ internal InternalCreateUploadRequest(string filename, InternalCreateUploadReques public string Filename { get; } - public InternalCreateUploadRequestPurpose Purpose { get; } + internal InternalCreateUploadRequestPurpose Purpose { get; } public int Bytes { get; } diff --git a/src/Generated/Models/InternalCreateUploadRequestPurpose.cs b/src/Generated/Models/InternalCreateUploadRequestPurpose.cs index f50d74b22..af2acf0a2 100644 --- a/src/Generated/Models/InternalCreateUploadRequestPurpose.cs +++ b/src/Generated/Models/InternalCreateUploadRequestPurpose.cs @@ -23,13 +23,13 @@ public InternalCreateUploadRequestPurpose(string value) _value = value; } - public static InternalCreateUploadRequestPurpose Assistants { get; } = new InternalCreateUploadRequestPurpose(AssistantsValue); + internal static InternalCreateUploadRequestPurpose Assistants { get; } = new InternalCreateUploadRequestPurpose(AssistantsValue); - public static InternalCreateUploadRequestPurpose Batch { get; } = new InternalCreateUploadRequestPurpose(BatchValue); + internal static InternalCreateUploadRequestPurpose Batch { get; } = new InternalCreateUploadRequestPurpose(BatchValue); - public static InternalCreateUploadRequestPurpose FineTune { get; } = new InternalCreateUploadRequestPurpose(FineTuneValue); + internal static InternalCreateUploadRequestPurpose FineTune { get; } = new InternalCreateUploadRequestPurpose(FineTuneValue); - public static InternalCreateUploadRequestPurpose Vision { get; } = new InternalCreateUploadRequestPurpose(VisionValue); + internal static InternalCreateUploadRequestPurpose Vision { get; } = new InternalCreateUploadRequestPurpose(VisionValue); public static bool operator ==(InternalCreateUploadRequestPurpose left, InternalCreateUploadRequestPurpose right) => left.Equals(right); diff --git a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs index 9499f88c6..5331d7ec3 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.VectorStores { internal partial class InternalCreateVectorStoreFileBatchRequest : IJsonModel { - internal InternalCreateVectorStoreFileBatchRequest() + internal InternalCreateVectorStoreFileBatchRequest() : this(null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -49,20 +50,32 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(ChunkingStrategy) && _additionalBinaryDataProperties?.ContainsKey("chunking_strategy") != true) { writer.WritePropertyName("chunking_strategy"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(ChunkingStrategy); -#else - using (JsonDocument document = JsonDocument.Parse(ChunkingStrategy)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif + writer.WriteObjectValue(ChunkingStrategy, options); } - if (Optional.IsDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) + if (Optional.IsCollectionDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) { writer.WritePropertyName("attributes"u8); - writer.WriteObjectValue(Attributes, options); + writer.WriteStartObject(); + foreach (var item in Attributes) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -86,6 +99,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateVectorStoreFileBatchRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateVectorStoreFileBatchRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -104,8 +118,8 @@ internal static InternalCreateVectorStoreFileBatchRequest DeserializeInternalCre return null; } IList fileIds = default; - BinaryData chunkingStrategy = default; - InternalVectorStoreFileAttributes attributes = default; + InternalChunkingStrategyRequestParam chunkingStrategy = default; + IDictionary attributes = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -132,33 +146,46 @@ internal static InternalCreateVectorStoreFileBatchRequest DeserializeInternalCre { continue; } - chunkingStrategy = BinaryData.FromString(prop.Value.GetRawText()); + chunkingStrategy = InternalChunkingStrategyRequestParam.DeserializeInternalChunkingStrategyRequestParam(prop.Value, options); continue; } if (prop.NameEquals("attributes"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - attributes = null; continue; } - attributes = InternalVectorStoreFileAttributes.DeserializeInternalVectorStoreFileAttributes(prop.Value, options); + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + attributes = dictionary; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCreateVectorStoreFileBatchRequest(fileIds, chunkingStrategy, attributes, additionalBinaryDataProperties); + return new InternalCreateVectorStoreFileBatchRequest(fileIds, chunkingStrategy, attributes ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateVectorStoreFileBatchRequest)} does not support writing '{options.Format}' format."); } @@ -166,6 +193,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateVectorStoreFileBatchRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateVectorStoreFileBatchRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +210,5 @@ protected virtual InternalCreateVectorStoreFileBatchRequest PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateVectorStoreFileBatchRequest internalCreateVectorStoreFileBatchRequest) - { - if (internalCreateVectorStoreFileBatchRequest == null) - { - return null; - } - return BinaryContent.Create(internalCreateVectorStoreFileBatchRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateVectorStoreFileBatchRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateVectorStoreFileBatchRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs index e97c60b2f..afc031f46 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileBatchRequest.cs @@ -18,21 +18,23 @@ public InternalCreateVectorStoreFileBatchRequest(IEnumerable fileIds) Argument.AssertNotNull(fileIds, nameof(fileIds)); FileIds = fileIds.ToList(); + Attributes = new ChangeTrackingDictionary(); } - internal InternalCreateVectorStoreFileBatchRequest(IList fileIds, BinaryData chunkingStrategy, InternalVectorStoreFileAttributes attributes, IDictionary additionalBinaryDataProperties) + internal InternalCreateVectorStoreFileBatchRequest(IList fileIds, InternalChunkingStrategyRequestParam chunkingStrategy, IDictionary attributes, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); ChunkingStrategy = chunkingStrategy; - Attributes = attributes; + Attributes = attributes ?? new ChangeTrackingDictionary(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } public IList FileIds { get; } - public BinaryData ChunkingStrategy { get; set; } + internal InternalChunkingStrategyRequestParam ChunkingStrategy { get; set; } - public InternalVectorStoreFileAttributes Attributes { get; set; } + public IDictionary Attributes { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs b/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs index 6a18275af..a33bf1342 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.VectorStores { internal partial class InternalCreateVectorStoreFileRequest : IJsonModel { - internal InternalCreateVectorStoreFileRequest() + internal InternalCreateVectorStoreFileRequest() : this(null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter write writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,16 +37,35 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } - if (Optional.IsDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) + if (Optional.IsCollectionDefined(Attributes) && _additionalBinaryDataProperties?.ContainsKey("attributes") != true) { writer.WritePropertyName("attributes"u8); - writer.WriteObjectValue(Attributes, options); + writer.WriteStartObject(); + foreach (var item in Attributes) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); } if (Optional.IsDefined(ChunkingStrategy) && _additionalBinaryDataProperties?.ContainsKey("chunking_strategy") != true) { writer.WritePropertyName("chunking_strategy"u8); writer.WriteObjectValue(ChunkingStrategy, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +89,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalCreateVectorStoreFileRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalCreateVectorStoreFileRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -87,7 +108,7 @@ internal static InternalCreateVectorStoreFileRequest DeserializeInternalCreateVe return null; } string fileId = default; - InternalVectorStoreFileAttributes attributes = default; + IDictionary attributes = default; FileChunkingStrategy chunkingStrategy = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -101,10 +122,21 @@ internal static InternalCreateVectorStoreFileRequest DeserializeInternalCreateVe { if (prop.Value.ValueKind == JsonValueKind.Null) { - attributes = null; continue; } - attributes = InternalVectorStoreFileAttributes.DeserializeInternalVectorStoreFileAttributes(prop.Value, options); + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + attributes = dictionary; continue; } if (prop.NameEquals("chunking_strategy"u8)) @@ -116,20 +148,22 @@ internal static InternalCreateVectorStoreFileRequest DeserializeInternalCreateVe chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalCreateVectorStoreFileRequest(fileId, attributes, chunkingStrategy, additionalBinaryDataProperties); + return new InternalCreateVectorStoreFileRequest(fileId, attributes ?? new ChangeTrackingDictionary(), chunkingStrategy, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCreateVectorStoreFileRequest)} does not support writing '{options.Format}' format."); } @@ -137,6 +171,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCreateVectorStoreFileRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalCreateVectorStoreFileRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -153,21 +188,5 @@ protected virtual InternalCreateVectorStoreFileRequest PersistableModelCreateCor } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalCreateVectorStoreFileRequest internalCreateVectorStoreFileRequest) - { - if (internalCreateVectorStoreFileRequest == null) - { - return null; - } - return BinaryContent.Create(internalCreateVectorStoreFileRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalCreateVectorStoreFileRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalCreateVectorStoreFileRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs b/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs index 74bed12e4..98127a139 100644 --- a/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs +++ b/src/Generated/Models/InternalCreateVectorStoreFileRequest.cs @@ -17,19 +17,21 @@ public InternalCreateVectorStoreFileRequest(string fileId) Argument.AssertNotNull(fileId, nameof(fileId)); FileId = fileId; + Attributes = new ChangeTrackingDictionary(); } - internal InternalCreateVectorStoreFileRequest(string fileId, InternalVectorStoreFileAttributes attributes, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) + internal InternalCreateVectorStoreFileRequest(string fileId, IDictionary attributes, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections FileId = fileId; - Attributes = attributes; + Attributes = attributes ?? new ChangeTrackingDictionary(); ChunkingStrategy = chunkingStrategy; _additionalBinaryDataProperties = additionalBinaryDataProperties; } public string FileId { get; } - public InternalVectorStoreFileAttributes Attributes { get; set; } + public IDictionary Attributes { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalDeleteAssistantResponseObject.cs b/src/Generated/Models/InternalDeleteAssistantResponseObject.cs deleted file mode 100644 index 6225c734b..000000000 --- a/src/Generated/Models/InternalDeleteAssistantResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalDeleteAssistantResponseObject : IEquatable - { - private readonly string _value; - private const string AssistantDeletedValue = "assistant.deleted"; - - public InternalDeleteAssistantResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalDeleteAssistantResponseObject AssistantDeleted { get; } = new InternalDeleteAssistantResponseObject(AssistantDeletedValue); - - public static bool operator ==(InternalDeleteAssistantResponseObject left, InternalDeleteAssistantResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalDeleteAssistantResponseObject left, InternalDeleteAssistantResponseObject right) => !left.Equals(right); - - public static implicit operator InternalDeleteAssistantResponseObject(string value) => new InternalDeleteAssistantResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalDeleteAssistantResponseObject other && Equals(other); - - public bool Equals(InternalDeleteAssistantResponseObject 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/InternalDeleteContainerFileResponse.Serialization.cs b/src/Generated/Models/InternalDeleteContainerFileResponse.Serialization.cs new file mode 100644 index 000000000..3ccc1bb81 --- /dev/null +++ b/src/Generated/Models/InternalDeleteContainerFileResponse.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalDeleteContainerFileResponse : IJsonModel + { + internal InternalDeleteContainerFileResponse() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteContainerFileResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalDeleteContainerFileResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteContainerFileResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteContainerFileResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDeleteContainerFileResponse(document.RootElement, options); + } + + internal static InternalDeleteContainerFileResponse DeserializeInternalDeleteContainerFileResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + string @object = default; + bool deleted = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("deleted"u8)) + { + deleted = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDeleteContainerFileResponse(id, @object, deleted, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDeleteContainerFileResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalDeleteContainerFileResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteContainerFileResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDeleteContainerFileResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDeleteContainerFileResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDeleteContainerFileResponse.cs b/src/Generated/Models/InternalDeleteContainerFileResponse.cs new file mode 100644 index 000000000..ca1cb1936 --- /dev/null +++ b/src/Generated/Models/InternalDeleteContainerFileResponse.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Containers +{ + internal partial class InternalDeleteContainerFileResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalDeleteContainerFileResponse(string id) + { + Id = id; + } + + internal InternalDeleteContainerFileResponse(string id, string @object, bool deleted, IDictionary additionalBinaryDataProperties) + { + Id = id; + Object = @object; + Deleted = deleted; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public string Object { get; } = "container.file.deleted"; + + public bool Deleted { get; } = true; + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalDeleteContainerResponse.Serialization.cs b/src/Generated/Models/InternalDeleteContainerResponse.Serialization.cs new file mode 100644 index 000000000..fe5333c58 --- /dev/null +++ b/src/Generated/Models/InternalDeleteContainerResponse.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Containers +{ + internal partial class InternalDeleteContainerResponse : IJsonModel + { + internal InternalDeleteContainerResponse() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteContainerResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalDeleteContainerResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteContainerResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteContainerResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDeleteContainerResponse(document.RootElement, options); + } + + internal static InternalDeleteContainerResponse DeserializeInternalDeleteContainerResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + string @object = default; + bool deleted = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("deleted"u8)) + { + deleted = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDeleteContainerResponse(id, @object, deleted, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDeleteContainerResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalDeleteContainerResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteContainerResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDeleteContainerResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDeleteContainerResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDeleteContainerResponse.cs b/src/Generated/Models/InternalDeleteContainerResponse.cs new file mode 100644 index 000000000..68b0c9832 --- /dev/null +++ b/src/Generated/Models/InternalDeleteContainerResponse.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Containers +{ + internal partial class InternalDeleteContainerResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalDeleteContainerResponse(string id) + { + Id = id; + } + + internal InternalDeleteContainerResponse(string id, string @object, bool deleted, IDictionary additionalBinaryDataProperties) + { + Id = id; + Object = @object; + Deleted = deleted; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public string Object { get; } = "container.deleted"; + + public bool Deleted { get; } = true; + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalDeleteEvalResponse.Serialization.cs b/src/Generated/Models/InternalDeleteEvalResponse.Serialization.cs new file mode 100644 index 000000000..c57917845 --- /dev/null +++ b/src/Generated/Models/InternalDeleteEvalResponse.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalDeleteEvalResponse : IJsonModel + { + internal InternalDeleteEvalResponse() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteEvalResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (_additionalBinaryDataProperties?.ContainsKey("eval_id") != true) + { + writer.WritePropertyName("eval_id"u8); + writer.WriteStringValue(EvalId); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalDeleteEvalResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteEvalResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteEvalResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDeleteEvalResponse(document.RootElement, options); + } + + internal static InternalDeleteEvalResponse DeserializeInternalDeleteEvalResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + bool deleted = default; + string evalId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("deleted"u8)) + { + deleted = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("eval_id"u8)) + { + evalId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDeleteEvalResponse(@object, deleted, evalId, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDeleteEvalResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalDeleteEvalResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteEvalResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDeleteEvalResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDeleteEvalResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDeleteEvalResponse.cs b/src/Generated/Models/InternalDeleteEvalResponse.cs new file mode 100644 index 000000000..315bf6c2f --- /dev/null +++ b/src/Generated/Models/InternalDeleteEvalResponse.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalDeleteEvalResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalDeleteEvalResponse(bool deleted, string evalId) + { + Deleted = deleted; + EvalId = evalId; + } + + internal InternalDeleteEvalResponse(string @object, bool deleted, string evalId, IDictionary additionalBinaryDataProperties) + { + Object = @object; + Deleted = deleted; + EvalId = evalId; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "eval.deleted"; + + public bool Deleted { get; } + + public string EvalId { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalDeleteEvalRunResponse.Serialization.cs b/src/Generated/Models/InternalDeleteEvalRunResponse.Serialization.cs new file mode 100644 index 000000000..6e4d5246e --- /dev/null +++ b/src/Generated/Models/InternalDeleteEvalRunResponse.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalDeleteEvalRunResponse : IJsonModel + { + internal InternalDeleteEvalRunResponse() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteEvalRunResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + if (_additionalBinaryDataProperties?.ContainsKey("eval_run_id") != true) + { + writer.WritePropertyName("eval_run_id"u8); + writer.WriteStringValue(EvalRunId); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalDeleteEvalRunResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteEvalRunResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteEvalRunResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDeleteEvalRunResponse(document.RootElement, options); + } + + internal static InternalDeleteEvalRunResponse DeserializeInternalDeleteEvalRunResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + bool deleted = default; + string evalRunId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("deleted"u8)) + { + deleted = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("eval_run_id"u8)) + { + evalRunId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDeleteEvalRunResponse(@object, deleted, evalRunId, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDeleteEvalRunResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalDeleteEvalRunResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteEvalRunResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDeleteEvalRunResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDeleteEvalRunResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDeleteEvalRunResponse.cs b/src/Generated/Models/InternalDeleteEvalRunResponse.cs new file mode 100644 index 000000000..1f3a00328 --- /dev/null +++ b/src/Generated/Models/InternalDeleteEvalRunResponse.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalDeleteEvalRunResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalDeleteEvalRunResponse(bool deleted, string evalRunId) + { + Deleted = deleted; + EvalRunId = evalRunId; + } + + internal InternalDeleteEvalRunResponse(string @object, bool deleted, string evalRunId, IDictionary additionalBinaryDataProperties) + { + Object = @object; + Deleted = deleted; + EvalRunId = evalRunId; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "eval_run.deleted"; + + public bool Deleted { get; } + + public string EvalRunId { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalDeleteFileResponseObject.cs b/src/Generated/Models/InternalDeleteFileResponseObject.cs deleted file mode 100644 index 488c1146e..000000000 --- a/src/Generated/Models/InternalDeleteFileResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Files -{ - internal readonly partial struct InternalDeleteFileResponseObject : IEquatable - { - private readonly string _value; - private const string FileValue = "file"; - - public InternalDeleteFileResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalDeleteFileResponseObject File { get; } = new InternalDeleteFileResponseObject(FileValue); - - public static bool operator ==(InternalDeleteFileResponseObject left, InternalDeleteFileResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalDeleteFileResponseObject left, InternalDeleteFileResponseObject right) => !left.Equals(right); - - public static implicit operator InternalDeleteFileResponseObject(string value) => new InternalDeleteFileResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalDeleteFileResponseObject other && Equals(other); - - public bool Equals(InternalDeleteFileResponseObject 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/InternalDeleteFineTuningCheckpointPermissionResponse.Serialization.cs b/src/Generated/Models/InternalDeleteFineTuningCheckpointPermissionResponse.Serialization.cs new file mode 100644 index 000000000..032ad9e45 --- /dev/null +++ b/src/Generated/Models/InternalDeleteFineTuningCheckpointPermissionResponse.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalDeleteFineTuningCheckpointPermissionResponse : IJsonModel + { + internal InternalDeleteFineTuningCheckpointPermissionResponse() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteFineTuningCheckpointPermissionResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("deleted") != true) + { + writer.WritePropertyName("deleted"u8); + writer.WriteBooleanValue(Deleted); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalDeleteFineTuningCheckpointPermissionResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteFineTuningCheckpointPermissionResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDeleteFineTuningCheckpointPermissionResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDeleteFineTuningCheckpointPermissionResponse(document.RootElement, options); + } + + internal static InternalDeleteFineTuningCheckpointPermissionResponse DeserializeInternalDeleteFineTuningCheckpointPermissionResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + string @object = default; + bool deleted = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("deleted"u8)) + { + deleted = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDeleteFineTuningCheckpointPermissionResponse(id, @object, deleted, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDeleteFineTuningCheckpointPermissionResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalDeleteFineTuningCheckpointPermissionResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalDeleteFineTuningCheckpointPermissionResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDeleteFineTuningCheckpointPermissionResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDeleteFineTuningCheckpointPermissionResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDeleteFineTuningCheckpointPermissionResponse.cs b/src/Generated/Models/InternalDeleteFineTuningCheckpointPermissionResponse.cs new file mode 100644 index 000000000..155d977a4 --- /dev/null +++ b/src/Generated/Models/InternalDeleteFineTuningCheckpointPermissionResponse.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + internal partial class InternalDeleteFineTuningCheckpointPermissionResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalDeleteFineTuningCheckpointPermissionResponse(string id, bool deleted) + { + Id = id; + Deleted = deleted; + } + + internal InternalDeleteFineTuningCheckpointPermissionResponse(string id, string @object, bool deleted, IDictionary additionalBinaryDataProperties) + { + Id = id; + Object = @object; + Deleted = deleted; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public string Object { get; } = "checkpoint.permission"; + + public bool Deleted { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalDeleteMessageResponseObject.cs b/src/Generated/Models/InternalDeleteMessageResponseObject.cs deleted file mode 100644 index 5bac8c4fa..000000000 --- a/src/Generated/Models/InternalDeleteMessageResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalDeleteMessageResponseObject : IEquatable - { - private readonly string _value; - private const string ThreadMessageDeletedValue = "thread.message.deleted"; - - public InternalDeleteMessageResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalDeleteMessageResponseObject ThreadMessageDeleted { get; } = new InternalDeleteMessageResponseObject(ThreadMessageDeletedValue); - - public static bool operator ==(InternalDeleteMessageResponseObject left, InternalDeleteMessageResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalDeleteMessageResponseObject left, InternalDeleteMessageResponseObject right) => !left.Equals(right); - - public static implicit operator InternalDeleteMessageResponseObject(string value) => new InternalDeleteMessageResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalDeleteMessageResponseObject other && Equals(other); - - public bool Equals(InternalDeleteMessageResponseObject 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/InternalDeleteModelResponseObject.cs b/src/Generated/Models/InternalDeleteModelResponseObject.cs deleted file mode 100644 index b2bf4456c..000000000 --- a/src/Generated/Models/InternalDeleteModelResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Models -{ - internal readonly partial struct InternalDeleteModelResponseObject : IEquatable - { - private readonly string _value; - private const string ModelValue = "model"; - - public InternalDeleteModelResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalDeleteModelResponseObject Model { get; } = new InternalDeleteModelResponseObject(ModelValue); - - public static bool operator ==(InternalDeleteModelResponseObject left, InternalDeleteModelResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalDeleteModelResponseObject left, InternalDeleteModelResponseObject right) => !left.Equals(right); - - public static implicit operator InternalDeleteModelResponseObject(string value) => new InternalDeleteModelResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalDeleteModelResponseObject other && Equals(other); - - public bool Equals(InternalDeleteModelResponseObject 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/InternalDeleteResponseResponseObject.cs b/src/Generated/Models/InternalDeleteResponseResponseObject.cs deleted file mode 100644 index a6818caea..000000000 --- a/src/Generated/Models/InternalDeleteResponseResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalDeleteResponseResponseObject : IEquatable - { - private readonly string _value; - private const string ResponseDeletedValue = "response.deleted"; - - public InternalDeleteResponseResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalDeleteResponseResponseObject ResponseDeleted { get; } = new InternalDeleteResponseResponseObject(ResponseDeletedValue); - - public static bool operator ==(InternalDeleteResponseResponseObject left, InternalDeleteResponseResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalDeleteResponseResponseObject left, InternalDeleteResponseResponseObject right) => !left.Equals(right); - - public static implicit operator InternalDeleteResponseResponseObject(string value) => new InternalDeleteResponseResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalDeleteResponseResponseObject other && Equals(other); - - public bool Equals(InternalDeleteResponseResponseObject 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/InternalDeleteThreadResponseObject.cs b/src/Generated/Models/InternalDeleteThreadResponseObject.cs deleted file mode 100644 index 37b6f7144..000000000 --- a/src/Generated/Models/InternalDeleteThreadResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalDeleteThreadResponseObject : IEquatable - { - private readonly string _value; - private const string ThreadDeletedValue = "thread.deleted"; - - public InternalDeleteThreadResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalDeleteThreadResponseObject ThreadDeleted { get; } = new InternalDeleteThreadResponseObject(ThreadDeletedValue); - - public static bool operator ==(InternalDeleteThreadResponseObject left, InternalDeleteThreadResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalDeleteThreadResponseObject left, InternalDeleteThreadResponseObject right) => !left.Equals(right); - - public static implicit operator InternalDeleteThreadResponseObject(string value) => new InternalDeleteThreadResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalDeleteThreadResponseObject other && Equals(other); - - public bool Equals(InternalDeleteThreadResponseObject 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/InternalDeleteVectorStoreFileResponseObject.cs b/src/Generated/Models/InternalDeleteVectorStoreFileResponseObject.cs deleted file mode 100644 index ec1f0afed..000000000 --- a/src/Generated/Models/InternalDeleteVectorStoreFileResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal readonly partial struct InternalDeleteVectorStoreFileResponseObject : IEquatable - { - private readonly string _value; - private const string VectorStoreFileDeletedValue = "vector_store.file.deleted"; - - public InternalDeleteVectorStoreFileResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalDeleteVectorStoreFileResponseObject VectorStoreFileDeleted { get; } = new InternalDeleteVectorStoreFileResponseObject(VectorStoreFileDeletedValue); - - public static bool operator ==(InternalDeleteVectorStoreFileResponseObject left, InternalDeleteVectorStoreFileResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalDeleteVectorStoreFileResponseObject left, InternalDeleteVectorStoreFileResponseObject right) => !left.Equals(right); - - public static implicit operator InternalDeleteVectorStoreFileResponseObject(string value) => new InternalDeleteVectorStoreFileResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalDeleteVectorStoreFileResponseObject other && Equals(other); - - public bool Equals(InternalDeleteVectorStoreFileResponseObject 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/InternalDeleteVectorStoreResponseObject.cs b/src/Generated/Models/InternalDeleteVectorStoreResponseObject.cs deleted file mode 100644 index 933ba71f7..000000000 --- a/src/Generated/Models/InternalDeleteVectorStoreResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal readonly partial struct InternalDeleteVectorStoreResponseObject : IEquatable - { - private readonly string _value; - private const string VectorStoreDeletedValue = "vector_store.deleted"; - - public InternalDeleteVectorStoreResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalDeleteVectorStoreResponseObject VectorStoreDeleted { get; } = new InternalDeleteVectorStoreResponseObject(VectorStoreDeletedValue); - - public static bool operator ==(InternalDeleteVectorStoreResponseObject left, InternalDeleteVectorStoreResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalDeleteVectorStoreResponseObject left, InternalDeleteVectorStoreResponseObject right) => !left.Equals(right); - - public static implicit operator InternalDeleteVectorStoreResponseObject(string value) => new InternalDeleteVectorStoreResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalDeleteVectorStoreResponseObject other && Equals(other); - - public bool Equals(InternalDeleteVectorStoreResponseObject 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/InternalDotNetAssistantResponseFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonObject.Serialization.cs new file mode 100644 index 000000000..ed3e06513 --- /dev/null +++ b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonObject.Serialization.cs @@ -0,0 +1,105 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Assistants +{ + internal partial class InternalDotNetAssistantResponseFormatJsonObject : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonObject)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalDotNetAssistantResponseFormatJsonObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotNetAssistantResponseFormatJsonObject)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetAssistantResponseFormatJsonObject(document.RootElement, options); + } + + internal static InternalDotNetAssistantResponseFormatJsonObject DeserializeInternalDotNetAssistantResponseFormatJsonObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseFormatType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseFormatType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetAssistantResponseFormatJsonObject(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetAssistantResponseFormatJsonObject)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetAssistantResponseFormatJsonObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotNetAssistantResponseFormatJsonObject)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetAssistantResponseFormatJsonObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonObject.cs b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonObject.cs new file mode 100644 index 000000000..ffe33df11 --- /dev/null +++ b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonObject.cs @@ -0,0 +1,21 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Internal; + +namespace OpenAI.Assistants +{ + internal partial class InternalDotNetAssistantResponseFormatJsonObject : AssistantResponseFormat + { + public InternalDotNetAssistantResponseFormatJsonObject() : this(InternalResponseFormatType.JsonObject, null) + { + } + + internal InternalDotNetAssistantResponseFormatJsonObject(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchema.Serialization.cs new file mode 100644 index 000000000..85541bb8d --- /dev/null +++ b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchema.Serialization.cs @@ -0,0 +1,120 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Assistants +{ + internal partial class InternalDotNetAssistantResponseFormatJsonSchema : IJsonModel + { + internal InternalDotNetAssistantResponseFormatJsonSchema() : this(InternalResponseFormatType.JsonSchema, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonSchema)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("json_schema") != true) + { + writer.WritePropertyName("json_schema"u8); + writer.WriteObjectValue(JsonSchema, options); + } + } + + InternalDotNetAssistantResponseFormatJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotNetAssistantResponseFormatJsonSchema)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonSchema)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetAssistantResponseFormatJsonSchema(document.RootElement, options); + } + + internal static InternalDotNetAssistantResponseFormatJsonSchema DeserializeInternalDotNetAssistantResponseFormatJsonSchema(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseFormatType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema jsonSchema = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseFormatType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("json_schema"u8)) + { + jsonSchema = InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema.DeserializeInternalDotNetAssistantResponseFormatJsonSchemaJsonSchema(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetAssistantResponseFormatJsonSchema(kind, additionalBinaryDataProperties, jsonSchema); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetAssistantResponseFormatJsonSchema)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetAssistantResponseFormatJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotNetAssistantResponseFormatJsonSchema)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetAssistantResponseFormatJsonSchema(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonSchema)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchema.cs b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchema.cs new file mode 100644 index 000000000..8ce485e94 --- /dev/null +++ b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchema.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Assistants +{ + internal partial class InternalDotNetAssistantResponseFormatJsonSchema : AssistantResponseFormat + { + internal InternalDotNetAssistantResponseFormatJsonSchema(InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema jsonSchema) : base(InternalResponseFormatType.JsonSchema) + { + Argument.AssertNotNull(jsonSchema, nameof(jsonSchema)); + + JsonSchema = jsonSchema; + } + + internal InternalDotNetAssistantResponseFormatJsonSchema(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties, InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema jsonSchema) : base(kind, additionalBinaryDataProperties) + { + JsonSchema = jsonSchema; + } + + internal InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema JsonSchema { get; set; } + } +} diff --git a/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema.Serialization.cs b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema.Serialization.cs new file mode 100644 index 000000000..d13d2918f --- /dev/null +++ b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema.Serialization.cs @@ -0,0 +1,181 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema : IJsonModel + { + internal InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Description) && _additionalBinaryDataProperties?.ContainsKey("description") != true) + { + writer.WritePropertyName("description"u8); + writer.WriteStringValue(Description); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (Optional.IsDefined(Schema) && _additionalBinaryDataProperties?.ContainsKey("schema") != true) + { + writer.WritePropertyName("schema"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Schema); +#else + using (JsonDocument document = JsonDocument.Parse(Schema)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(Strict) && _additionalBinaryDataProperties?.ContainsKey("strict") != true) + { + writer.WritePropertyName("strict"u8); + writer.WriteBooleanValue(Strict.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetAssistantResponseFormatJsonSchemaJsonSchema(document.RootElement, options); + } + + internal static InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema DeserializeInternalDotNetAssistantResponseFormatJsonSchemaJsonSchema(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string description = default; + string name = default; + BinaryData schema = default; + bool? strict = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("description"u8)) + { + description = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("schema"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + schema = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("strict"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + strict = null; + continue; + } + strict = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema(description, name, schema, strict, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetAssistantResponseFormatJsonSchemaJsonSchema(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema.cs b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema.cs new file mode 100644 index 000000000..a933db141 --- /dev/null +++ b/src/Generated/Models/InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema.cs @@ -0,0 +1,45 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema(string name) + { + Argument.AssertNotNull(name, nameof(name)); + + Name = name; + } + + internal InternalDotNetAssistantResponseFormatJsonSchemaJsonSchema(string description, string name, BinaryData schema, bool? strict, IDictionary additionalBinaryDataProperties) + { + Description = description; + Name = name; + Schema = schema; + Strict = strict; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Description { get; set; } + + public string Name { get; set; } + + public BinaryData Schema { get; set; } + + public bool? Strict { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalDotNetAssistantResponseFormatText.Serialization.cs b/src/Generated/Models/InternalDotNetAssistantResponseFormatText.Serialization.cs new file mode 100644 index 000000000..70476504b --- /dev/null +++ b/src/Generated/Models/InternalDotNetAssistantResponseFormatText.Serialization.cs @@ -0,0 +1,105 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Assistants +{ + internal partial class InternalDotNetAssistantResponseFormatText : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatText)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalDotNetAssistantResponseFormatText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotNetAssistantResponseFormatText)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatText)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetAssistantResponseFormatText(document.RootElement, options); + } + + internal static InternalDotNetAssistantResponseFormatText DeserializeInternalDotNetAssistantResponseFormatText(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseFormatType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseFormatType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetAssistantResponseFormatText(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetAssistantResponseFormatText)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetAssistantResponseFormatText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotNetAssistantResponseFormatText)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetAssistantResponseFormatText(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetAssistantResponseFormatText)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetAssistantResponseFormatText.cs b/src/Generated/Models/InternalDotNetAssistantResponseFormatText.cs new file mode 100644 index 000000000..a644ae012 --- /dev/null +++ b/src/Generated/Models/InternalDotNetAssistantResponseFormatText.cs @@ -0,0 +1,21 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Internal; + +namespace OpenAI.Assistants +{ + internal partial class InternalDotNetAssistantResponseFormatText : AssistantResponseFormat + { + public InternalDotNetAssistantResponseFormatText() : this(InternalResponseFormatType.Text, null) + { + } + + internal InternalDotNetAssistantResponseFormatText(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalDotNetChatResponseFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalDotNetChatResponseFormatJsonObject.Serialization.cs new file mode 100644 index 000000000..4d31afdbc --- /dev/null +++ b/src/Generated/Models/InternalDotNetChatResponseFormatJsonObject.Serialization.cs @@ -0,0 +1,105 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Chat +{ + internal partial class InternalDotNetChatResponseFormatJsonObject : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonObject)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalDotNetChatResponseFormatJsonObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotNetChatResponseFormatJsonObject)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetChatResponseFormatJsonObject(document.RootElement, options); + } + + internal static InternalDotNetChatResponseFormatJsonObject DeserializeInternalDotNetChatResponseFormatJsonObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseFormatType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseFormatType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetChatResponseFormatJsonObject(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetChatResponseFormatJsonObject)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetChatResponseFormatJsonObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotNetChatResponseFormatJsonObject)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetChatResponseFormatJsonObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetChatResponseFormatJsonObject.cs b/src/Generated/Models/InternalDotNetChatResponseFormatJsonObject.cs new file mode 100644 index 000000000..e52b72ff4 --- /dev/null +++ b/src/Generated/Models/InternalDotNetChatResponseFormatJsonObject.cs @@ -0,0 +1,21 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Internal; + +namespace OpenAI.Chat +{ + internal partial class InternalDotNetChatResponseFormatJsonObject : ChatResponseFormat + { + public InternalDotNetChatResponseFormatJsonObject() : this(InternalResponseFormatType.JsonObject, null) + { + } + + internal InternalDotNetChatResponseFormatJsonObject(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchema.Serialization.cs new file mode 100644 index 000000000..b59c83e4a --- /dev/null +++ b/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchema.Serialization.cs @@ -0,0 +1,120 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Chat +{ + internal partial class InternalDotNetChatResponseFormatJsonSchema : IJsonModel + { + internal InternalDotNetChatResponseFormatJsonSchema() : this(InternalResponseFormatType.JsonSchema, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonSchema)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("json_schema") != true) + { + writer.WritePropertyName("json_schema"u8); + writer.WriteObjectValue(JsonSchema, options); + } + } + + InternalDotNetChatResponseFormatJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotNetChatResponseFormatJsonSchema)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonSchema)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetChatResponseFormatJsonSchema(document.RootElement, options); + } + + internal static InternalDotNetChatResponseFormatJsonSchema DeserializeInternalDotNetChatResponseFormatJsonSchema(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseFormatType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalDotNetChatResponseFormatJsonSchemaJsonSchema jsonSchema = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseFormatType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("json_schema"u8)) + { + jsonSchema = InternalDotNetChatResponseFormatJsonSchemaJsonSchema.DeserializeInternalDotNetChatResponseFormatJsonSchemaJsonSchema(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetChatResponseFormatJsonSchema(kind, additionalBinaryDataProperties, jsonSchema); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetChatResponseFormatJsonSchema)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetChatResponseFormatJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotNetChatResponseFormatJsonSchema)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetChatResponseFormatJsonSchema(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonSchema)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchema.cs b/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchema.cs new file mode 100644 index 000000000..7ee70d1dc --- /dev/null +++ b/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchema.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Chat +{ + internal partial class InternalDotNetChatResponseFormatJsonSchema : ChatResponseFormat + { + internal InternalDotNetChatResponseFormatJsonSchema(InternalDotNetChatResponseFormatJsonSchemaJsonSchema jsonSchema) : base(InternalResponseFormatType.JsonSchema) + { + Argument.AssertNotNull(jsonSchema, nameof(jsonSchema)); + + JsonSchema = jsonSchema; + } + + internal InternalDotNetChatResponseFormatJsonSchema(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties, InternalDotNetChatResponseFormatJsonSchemaJsonSchema jsonSchema) : base(kind, additionalBinaryDataProperties) + { + JsonSchema = jsonSchema; + } + + internal InternalDotNetChatResponseFormatJsonSchemaJsonSchema JsonSchema { get; set; } + } +} diff --git a/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchemaJsonSchema.Serialization.cs b/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchemaJsonSchema.Serialization.cs new file mode 100644 index 000000000..9080bce20 --- /dev/null +++ b/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchemaJsonSchema.Serialization.cs @@ -0,0 +1,181 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalDotNetChatResponseFormatJsonSchemaJsonSchema : IJsonModel + { + internal InternalDotNetChatResponseFormatJsonSchemaJsonSchema() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonSchemaJsonSchema)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Description) && _additionalBinaryDataProperties?.ContainsKey("description") != true) + { + writer.WritePropertyName("description"u8); + writer.WriteStringValue(Description); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (Optional.IsDefined(Schema) && _additionalBinaryDataProperties?.ContainsKey("schema") != true) + { + writer.WritePropertyName("schema"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Schema); +#else + using (JsonDocument document = JsonDocument.Parse(Schema)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(Strict) && _additionalBinaryDataProperties?.ContainsKey("strict") != true) + { + writer.WritePropertyName("strict"u8); + writer.WriteBooleanValue(Strict.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalDotNetChatResponseFormatJsonSchemaJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalDotNetChatResponseFormatJsonSchemaJsonSchema JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonSchemaJsonSchema)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetChatResponseFormatJsonSchemaJsonSchema(document.RootElement, options); + } + + internal static InternalDotNetChatResponseFormatJsonSchemaJsonSchema DeserializeInternalDotNetChatResponseFormatJsonSchemaJsonSchema(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string description = default; + string name = default; + BinaryData schema = default; + bool? strict = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("description"u8)) + { + description = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("schema"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + schema = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("strict"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + strict = null; + continue; + } + strict = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetChatResponseFormatJsonSchemaJsonSchema(description, name, schema, strict, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetChatResponseFormatJsonSchemaJsonSchema)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetChatResponseFormatJsonSchemaJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalDotNetChatResponseFormatJsonSchemaJsonSchema PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetChatResponseFormatJsonSchemaJsonSchema(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatJsonSchemaJsonSchema)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchemaJsonSchema.cs b/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchemaJsonSchema.cs new file mode 100644 index 000000000..7271902ee --- /dev/null +++ b/src/Generated/Models/InternalDotNetChatResponseFormatJsonSchemaJsonSchema.cs @@ -0,0 +1,45 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalDotNetChatResponseFormatJsonSchemaJsonSchema + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalDotNetChatResponseFormatJsonSchemaJsonSchema(string name) + { + Argument.AssertNotNull(name, nameof(name)); + + Name = name; + } + + internal InternalDotNetChatResponseFormatJsonSchemaJsonSchema(string description, string name, BinaryData schema, bool? strict, IDictionary additionalBinaryDataProperties) + { + Description = description; + Name = name; + Schema = schema; + Strict = strict; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Description { get; set; } + + public string Name { get; set; } + + public BinaryData Schema { get; set; } + + public bool? Strict { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalDotNetChatResponseFormatText.Serialization.cs b/src/Generated/Models/InternalDotNetChatResponseFormatText.Serialization.cs new file mode 100644 index 000000000..990b242f9 --- /dev/null +++ b/src/Generated/Models/InternalDotNetChatResponseFormatText.Serialization.cs @@ -0,0 +1,105 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Chat +{ + internal partial class InternalDotNetChatResponseFormatText : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatText)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalDotNetChatResponseFormatText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotNetChatResponseFormatText)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatText)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetChatResponseFormatText(document.RootElement, options); + } + + internal static InternalDotNetChatResponseFormatText DeserializeInternalDotNetChatResponseFormatText(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseFormatType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseFormatType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetChatResponseFormatText(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetChatResponseFormatText)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetChatResponseFormatText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotNetChatResponseFormatText)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetChatResponseFormatText(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetChatResponseFormatText)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetChatResponseFormatText.cs b/src/Generated/Models/InternalDotNetChatResponseFormatText.cs new file mode 100644 index 000000000..c5e4f196c --- /dev/null +++ b/src/Generated/Models/InternalDotNetChatResponseFormatText.cs @@ -0,0 +1,21 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Internal; + +namespace OpenAI.Chat +{ + internal partial class InternalDotNetChatResponseFormatText : ChatResponseFormat + { + public InternalDotNetChatResponseFormatText() : this(InternalResponseFormatType.Text, null) + { + } + + internal InternalDotNetChatResponseFormatText(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalDotNetCombinedAutoChunkingStrategyParam.Serialization.cs b/src/Generated/Models/InternalDotNetCombinedAutoChunkingStrategyParam.Serialization.cs new file mode 100644 index 000000000..adab27b7a --- /dev/null +++ b/src/Generated/Models/InternalDotNetCombinedAutoChunkingStrategyParam.Serialization.cs @@ -0,0 +1,105 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Responses; + +namespace OpenAI.VectorStores +{ + internal partial class InternalDotNetCombinedAutoChunkingStrategyParam : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetCombinedAutoChunkingStrategyParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalDotNetCombinedAutoChunkingStrategyParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotNetCombinedAutoChunkingStrategyParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetCombinedAutoChunkingStrategyParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetCombinedAutoChunkingStrategyParam(document.RootElement, options); + } + + internal static InternalDotNetCombinedAutoChunkingStrategyParam DeserializeInternalDotNetCombinedAutoChunkingStrategyParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalDotNetCombinedChunkingStrategyParamType2 kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalDotNetCombinedChunkingStrategyParamType2(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetCombinedAutoChunkingStrategyParam(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetCombinedAutoChunkingStrategyParam)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetCombinedAutoChunkingStrategyParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotNetCombinedAutoChunkingStrategyParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetCombinedAutoChunkingStrategyParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetCombinedAutoChunkingStrategyParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetCombinedAutoChunkingStrategyParam.cs b/src/Generated/Models/InternalDotNetCombinedAutoChunkingStrategyParam.cs new file mode 100644 index 000000000..5dcb12cf6 --- /dev/null +++ b/src/Generated/Models/InternalDotNetCombinedAutoChunkingStrategyParam.cs @@ -0,0 +1,21 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI.VectorStores +{ + internal partial class InternalDotNetCombinedAutoChunkingStrategyParam : FileChunkingStrategy + { + public InternalDotNetCombinedAutoChunkingStrategyParam() : this(InternalDotNetCombinedChunkingStrategyParamType2.Auto, null) + { + } + + internal InternalDotNetCombinedAutoChunkingStrategyParam(InternalDotNetCombinedChunkingStrategyParamType2 kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalDotNetCombinedChunkingStrategyParamType2.cs b/src/Generated/Models/InternalDotNetCombinedChunkingStrategyParamType2.cs new file mode 100644 index 000000000..a8d94fd69 --- /dev/null +++ b/src/Generated/Models/InternalDotNetCombinedChunkingStrategyParamType2.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalDotNetCombinedChunkingStrategyParamType2 : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + private const string StaticValue = "static"; + private const string OtherValue = "other"; + + public InternalDotNetCombinedChunkingStrategyParamType2(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalDotNetCombinedChunkingStrategyParamType2 Auto { get; } = new InternalDotNetCombinedChunkingStrategyParamType2(AutoValue); + + internal static InternalDotNetCombinedChunkingStrategyParamType2 Static { get; } = new InternalDotNetCombinedChunkingStrategyParamType2(StaticValue); + + internal static InternalDotNetCombinedChunkingStrategyParamType2 Other { get; } = new InternalDotNetCombinedChunkingStrategyParamType2(OtherValue); + + public static bool operator ==(InternalDotNetCombinedChunkingStrategyParamType2 left, InternalDotNetCombinedChunkingStrategyParamType2 right) => left.Equals(right); + + public static bool operator !=(InternalDotNetCombinedChunkingStrategyParamType2 left, InternalDotNetCombinedChunkingStrategyParamType2 right) => !left.Equals(right); + + public static implicit operator InternalDotNetCombinedChunkingStrategyParamType2(string value) => new InternalDotNetCombinedChunkingStrategyParamType2(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalDotNetCombinedChunkingStrategyParamType2 other && Equals(other); + + public bool Equals(InternalDotNetCombinedChunkingStrategyParamType2 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/InternalDotNetCombinedOtherChunkingStrategyParam.Serialization.cs b/src/Generated/Models/InternalDotNetCombinedOtherChunkingStrategyParam.Serialization.cs new file mode 100644 index 000000000..ed19b36dd --- /dev/null +++ b/src/Generated/Models/InternalDotNetCombinedOtherChunkingStrategyParam.Serialization.cs @@ -0,0 +1,105 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Responses; + +namespace OpenAI.VectorStores +{ + internal partial class InternalDotNetCombinedOtherChunkingStrategyParam : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetCombinedOtherChunkingStrategyParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalDotNetCombinedOtherChunkingStrategyParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotNetCombinedOtherChunkingStrategyParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetCombinedOtherChunkingStrategyParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetCombinedOtherChunkingStrategyParam(document.RootElement, options); + } + + internal static InternalDotNetCombinedOtherChunkingStrategyParam DeserializeInternalDotNetCombinedOtherChunkingStrategyParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalDotNetCombinedChunkingStrategyParamType2 kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalDotNetCombinedChunkingStrategyParamType2(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetCombinedOtherChunkingStrategyParam(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetCombinedOtherChunkingStrategyParam)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetCombinedOtherChunkingStrategyParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotNetCombinedOtherChunkingStrategyParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetCombinedOtherChunkingStrategyParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetCombinedOtherChunkingStrategyParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetCombinedOtherChunkingStrategyParam.cs b/src/Generated/Models/InternalDotNetCombinedOtherChunkingStrategyParam.cs new file mode 100644 index 000000000..daf473811 --- /dev/null +++ b/src/Generated/Models/InternalDotNetCombinedOtherChunkingStrategyParam.cs @@ -0,0 +1,21 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI.VectorStores +{ + internal partial class InternalDotNetCombinedOtherChunkingStrategyParam : FileChunkingStrategy + { + public InternalDotNetCombinedOtherChunkingStrategyParam() : this(InternalDotNetCombinedChunkingStrategyParamType2.Other, null) + { + } + + internal InternalDotNetCombinedOtherChunkingStrategyParam(InternalDotNetCombinedChunkingStrategyParamType2 kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalDotNetRealtimeLogProbProperties.Serialization.cs b/src/Generated/Models/InternalDotNetRealtimeLogProbProperties.Serialization.cs new file mode 100644 index 000000000..169b8c478 --- /dev/null +++ b/src/Generated/Models/InternalDotNetRealtimeLogProbProperties.Serialization.cs @@ -0,0 +1,164 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalDotNetRealtimeLogProbProperties : IJsonModel + { + internal InternalDotNetRealtimeLogProbProperties() : this(null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetRealtimeLogProbProperties)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("token") != true) + { + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); + } + if (_additionalBinaryDataProperties?.ContainsKey("logprob") != true) + { + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(Logprob); + } + if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (int item in Bytes) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalDotNetRealtimeLogProbProperties IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalDotNetRealtimeLogProbProperties JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotNetRealtimeLogProbProperties)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotNetRealtimeLogProbProperties(document.RootElement, options); + } + + internal static InternalDotNetRealtimeLogProbProperties DeserializeInternalDotNetRealtimeLogProbProperties(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string token = default; + float logprob = default; + IList bytes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("token"u8)) + { + token = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprob"u8)) + { + logprob = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetInt32()); + } + bytes = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotNetRealtimeLogProbProperties(token, logprob, bytes, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotNetRealtimeLogProbProperties)} does not support writing '{options.Format}' format."); + } + } + + InternalDotNetRealtimeLogProbProperties IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalDotNetRealtimeLogProbProperties PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotNetRealtimeLogProbProperties(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotNetRealtimeLogProbProperties)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotNetRealtimeLogProbProperties.cs b/src/Generated/Models/InternalDotNetRealtimeLogProbProperties.cs new file mode 100644 index 000000000..b0d855685 --- /dev/null +++ b/src/Generated/Models/InternalDotNetRealtimeLogProbProperties.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalDotNetRealtimeLogProbProperties + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalDotNetRealtimeLogProbProperties(string token, float logprob, IEnumerable bytes) + { + Token = token; + Logprob = logprob; + Bytes = bytes.ToList(); + } + + internal InternalDotNetRealtimeLogProbProperties(string token, float logprob, IList bytes, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Token = token; + Logprob = logprob; + Bytes = bytes ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Token { get; } + + public float Logprob { get; } + + public IList Bytes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalDotnetResponseWebSearchApproximateLocation.Serialization.cs b/src/Generated/Models/InternalDotnetResponseWebSearchApproximateLocation.Serialization.cs new file mode 100644 index 000000000..283189a39 --- /dev/null +++ b/src/Generated/Models/InternalDotnetResponseWebSearchApproximateLocation.Serialization.cs @@ -0,0 +1,174 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalDotnetResponseWebSearchApproximateLocation : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotnetResponseWebSearchApproximateLocation)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(Country) && _additionalBinaryDataProperties?.ContainsKey("country") != true) + { + writer.WritePropertyName("country"u8); + writer.WriteStringValue(Country); + } + if (Optional.IsDefined(Region) && _additionalBinaryDataProperties?.ContainsKey("region") != true) + { + writer.WritePropertyName("region"u8); + writer.WriteStringValue(Region); + } + if (Optional.IsDefined(City) && _additionalBinaryDataProperties?.ContainsKey("city") != true) + { + writer.WritePropertyName("city"u8); + writer.WriteStringValue(City); + } + if (Optional.IsDefined(Timezone) && _additionalBinaryDataProperties?.ContainsKey("timezone") != true) + { + writer.WritePropertyName("timezone"u8); + writer.WriteStringValue(Timezone); + } + } + + InternalDotnetResponseWebSearchApproximateLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalDotnetResponseWebSearchApproximateLocation)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override WebSearchUserLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalDotnetResponseWebSearchApproximateLocation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalDotnetResponseWebSearchApproximateLocation(document.RootElement, options); + } + + internal static InternalDotnetResponseWebSearchApproximateLocation DeserializeInternalDotnetResponseWebSearchApproximateLocation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalWebSearchUserLocationKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string country = default; + string region = default; + string city = default; + string timezone = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalWebSearchUserLocationKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("country"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + country = null; + continue; + } + country = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("region"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + region = null; + continue; + } + region = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("city"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + city = null; + continue; + } + city = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("timezone"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + timezone = null; + continue; + } + timezone = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalDotnetResponseWebSearchApproximateLocation( + kind, + additionalBinaryDataProperties, + country, + region, + city, + timezone); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalDotnetResponseWebSearchApproximateLocation)} does not support writing '{options.Format}' format."); + } + } + + InternalDotnetResponseWebSearchApproximateLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalDotnetResponseWebSearchApproximateLocation)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override WebSearchUserLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalDotnetResponseWebSearchApproximateLocation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalDotnetResponseWebSearchApproximateLocation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalDotnetResponseWebSearchApproximateLocation.cs b/src/Generated/Models/InternalDotnetResponseWebSearchApproximateLocation.cs new file mode 100644 index 000000000..bd6621366 --- /dev/null +++ b/src/Generated/Models/InternalDotnetResponseWebSearchApproximateLocation.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalDotnetResponseWebSearchApproximateLocation : WebSearchUserLocation + { + public InternalDotnetResponseWebSearchApproximateLocation() : this(InternalWebSearchUserLocationKind.Approximate, null, null, null, null, null) + { + } + + internal InternalDotnetResponseWebSearchApproximateLocation(InternalWebSearchUserLocationKind kind, IDictionary additionalBinaryDataProperties, string country, string region, string city, string timezone) : base(kind, additionalBinaryDataProperties) + { + Country = country; + Region = region; + City = city; + Timezone = timezone; + } + + public string Country { get; set; } + + public string Region { get; set; } + + public string City { get; set; } + + public string Timezone { get; set; } + } +} diff --git a/src/Generated/Models/InternalEmbeddingObject.cs b/src/Generated/Models/InternalEmbeddingObject.cs deleted file mode 100644 index 493e5ca4e..000000000 --- a/src/Generated/Models/InternalEmbeddingObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Embeddings -{ - internal readonly partial struct InternalEmbeddingObject : IEquatable - { - private readonly string _value; - private const string EmbeddingValue = "embedding"; - - public InternalEmbeddingObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalEmbeddingObject Embedding { get; } = new InternalEmbeddingObject(EmbeddingValue); - - public static bool operator ==(InternalEmbeddingObject left, InternalEmbeddingObject right) => left.Equals(right); - - public static bool operator !=(InternalEmbeddingObject left, InternalEmbeddingObject right) => !left.Equals(right); - - public static implicit operator InternalEmbeddingObject(string value) => new InternalEmbeddingObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalEmbeddingObject other && Equals(other); - - public bool Equals(InternalEmbeddingObject 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/InternalEval.Serialization.cs b/src/Generated/Models/InternalEval.Serialization.cs new file mode 100644 index 000000000..f09e65103 --- /dev/null +++ b/src/Generated/Models/InternalEval.Serialization.cs @@ -0,0 +1,263 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEval : IJsonModel + { + internal InternalEval() : this(null, null, null, null, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEval)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("data_source_config") != true) + { + writer.WritePropertyName("data_source_config"u8); + writer.WriteObjectValue(DataSourceConfig, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("testing_criteria") != true) + { + if (Optional.IsCollectionDefined(TestingCriteria)) + { + writer.WritePropertyName("testing_criteria"u8); + writer.WriteStartArray(); + foreach (InternalEvalGraderResource item in TestingCriteria) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + else + { + writer.WriteNull("testing_criteria"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + if (Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEval IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEval JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEval)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEval(document.RootElement, options); + } + + internal static InternalEval DeserializeInternalEval(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + string id = default; + string name = default; + InternalEvalDataSourceConfigResource dataSourceConfig = default; + IList testingCriteria = default; + DateTimeOffset createdAt = default; + IDictionary metadata = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data_source_config"u8)) + { + dataSourceConfig = InternalEvalDataSourceConfigResource.DeserializeInternalEvalDataSourceConfigResource(prop.Value, options); + continue; + } + if (prop.NameEquals("testing_criteria"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + testingCriteria = new ChangeTrackingList(); + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalGraderResource.DeserializeInternalEvalGraderResource(item, options)); + } + testingCriteria = array; + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + metadata = new ChangeTrackingDictionary(); + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEval( + @object, + id, + name, + dataSourceConfig, + testingCriteria, + createdAt, + metadata, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEval)} does not support writing '{options.Format}' format."); + } + } + + InternalEval IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEval PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEval(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEval)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEval.cs b/src/Generated/Models/InternalEval.cs new file mode 100644 index 000000000..538877a6d --- /dev/null +++ b/src/Generated/Models/InternalEval.cs @@ -0,0 +1,60 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEval + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEval(string id, string name, InternalEvalDataSourceConfigResource dataSourceConfig, IEnumerable testingCriteria, DateTimeOffset createdAt, IDictionary metadata) + { + // Plugin customization: ensure initialization of collections + Id = id; + Name = name; + DataSourceConfig = dataSourceConfig; + TestingCriteria = testingCriteria?.ToList(); + CreatedAt = createdAt; + Metadata = metadata ?? new ChangeTrackingDictionary(); + } + + internal InternalEval(string @object, string id, string name, InternalEvalDataSourceConfigResource dataSourceConfig, IList testingCriteria, DateTimeOffset createdAt, IDictionary metadata, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Id = id; + Name = name; + DataSourceConfig = dataSourceConfig; + TestingCriteria = testingCriteria ?? new ChangeTrackingList(); + CreatedAt = createdAt; + Metadata = metadata ?? new ChangeTrackingDictionary(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "eval"; + + public string Id { get; } + + public string Name { get; } + + internal InternalEvalDataSourceConfigResource DataSourceConfig { get; } + + internal IList TestingCriteria { get; } + + public DateTimeOffset CreatedAt { get; } + + public IDictionary Metadata { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalApiError.Serialization.cs b/src/Generated/Models/InternalEvalApiError.Serialization.cs new file mode 100644 index 000000000..1e2126b6a --- /dev/null +++ b/src/Generated/Models/InternalEvalApiError.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalApiError : IJsonModel + { + internal InternalEvalApiError() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalApiError)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("code") != true) + { + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); + } + if (_additionalBinaryDataProperties?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalApiError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalApiError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalApiError)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalApiError(document.RootElement, options); + } + + internal static InternalEvalApiError DeserializeInternalEvalApiError(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string code = default; + string message = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("code"u8)) + { + code = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("message"u8)) + { + message = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalApiError(code, message, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalApiError)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalApiError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalApiError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalApiError(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalApiError)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalApiError.cs b/src/Generated/Models/InternalEvalApiError.cs new file mode 100644 index 000000000..14d6b9e7b --- /dev/null +++ b/src/Generated/Models/InternalEvalApiError.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalApiError + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalApiError(string code, string message) + { + Code = code; + Message = message; + } + + internal InternalEvalApiError(string code, string message, IDictionary additionalBinaryDataProperties) + { + Code = code; + Message = message; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Code { get; } + + public string Message { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalCompletionsRunDataSourceParams.Serialization.cs b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParams.Serialization.cs new file mode 100644 index 000000000..914786fe2 --- /dev/null +++ b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParams.Serialization.cs @@ -0,0 +1,180 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCompletionsRunDataSourceParams : IJsonModel + { + internal InternalEvalCompletionsRunDataSourceParams() : this(InternalEvalRunDataSourceType.Completions, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(InputMessages) && _additionalBinaryDataProperties?.ContainsKey("input_messages") != true) + { + writer.WritePropertyName("input_messages"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(InputMessages); +#else + using (JsonDocument document = JsonDocument.Parse(InputMessages)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(SamplingParams) && _additionalBinaryDataProperties?.ContainsKey("sampling_params") != true) + { + writer.WritePropertyName("sampling_params"u8); + writer.WriteObjectValue(SamplingParams, options); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("source") != true) + { + writer.WritePropertyName("source"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Source); +#else + using (JsonDocument document = JsonDocument.Parse(Source)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalEvalCompletionsRunDataSourceParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalCompletionsRunDataSourceParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataSourceParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalCompletionsRunDataSourceParams(document.RootElement, options); + } + + internal static InternalEvalCompletionsRunDataSourceParams DeserializeInternalEvalCompletionsRunDataSourceParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + BinaryData inputMessages = default; + InternalEvalCompletionsRunDataSourceParamsSamplingParams samplingParams = default; + string model = default; + BinaryData source = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataSourceType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input_messages"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputMessages = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("sampling_params"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + samplingParams = InternalEvalCompletionsRunDataSourceParamsSamplingParams.DeserializeInternalEvalCompletionsRunDataSourceParamsSamplingParams(prop.Value, options); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("source"u8)) + { + source = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalCompletionsRunDataSourceParams( + kind, + additionalBinaryDataProperties, + inputMessages, + samplingParams, + model, + source); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalCompletionsRunDataSourceParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalCompletionsRunDataSourceParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalCompletionsRunDataSourceParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataSourceParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalCompletionsRunDataSourceParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalCompletionsRunDataSourceParams.cs b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParams.cs new file mode 100644 index 000000000..6b1f0e3be --- /dev/null +++ b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParams.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCompletionsRunDataSourceParams : InternalEvalRunDataSourceParams + { + public InternalEvalCompletionsRunDataSourceParams(BinaryData source) : base(InternalEvalRunDataSourceType.Completions) + { + Argument.AssertNotNull(source, nameof(source)); + + Source = source; + } + + internal InternalEvalCompletionsRunDataSourceParams(InternalEvalRunDataSourceType kind, IDictionary additionalBinaryDataProperties, BinaryData inputMessages, InternalEvalCompletionsRunDataSourceParamsSamplingParams samplingParams, string model, BinaryData source) : base(kind, additionalBinaryDataProperties) + { + InputMessages = inputMessages; + SamplingParams = samplingParams; + Model = model; + Source = source; + } + + public BinaryData InputMessages { get; set; } + + internal InternalEvalCompletionsRunDataSourceParamsSamplingParams SamplingParams { get; set; } + + public string Model { get; set; } + + public BinaryData Source { get; } + } +} diff --git a/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages1.Serialization.cs b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages1.Serialization.cs new file mode 100644 index 000000000..a58b3fe29 --- /dev/null +++ b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages1.Serialization.cs @@ -0,0 +1,172 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCompletionsRunDataSourceParamsInputMessages1 : IJsonModel + { + internal InternalEvalCompletionsRunDataSourceParamsInputMessages1() : this(null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsInputMessages1)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("template") != true) + { + writer.WritePropertyName("template"u8); + writer.WriteStartArray(); + foreach (BinaryData item in Template) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item); +#else + using (JsonDocument document = JsonDocument.Parse(item)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalCompletionsRunDataSourceParamsInputMessages1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalCompletionsRunDataSourceParamsInputMessages1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsInputMessages1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalCompletionsRunDataSourceParamsInputMessages1(document.RootElement, options); + } + + internal static InternalEvalCompletionsRunDataSourceParamsInputMessages1 DeserializeInternalEvalCompletionsRunDataSourceParamsInputMessages1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + IList template = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("template"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(BinaryData.FromString(item.GetRawText())); + } + } + template = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalCompletionsRunDataSourceParamsInputMessages1(kind, template, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalCompletionsRunDataSourceParamsInputMessages1)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalCompletionsRunDataSourceParamsInputMessages1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalCompletionsRunDataSourceParamsInputMessages1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalCompletionsRunDataSourceParamsInputMessages1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsInputMessages1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages1.cs b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages1.cs new file mode 100644 index 000000000..d1dd64417 --- /dev/null +++ b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages1.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCompletionsRunDataSourceParamsInputMessages1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalCompletionsRunDataSourceParamsInputMessages1(IEnumerable template) + { + Argument.AssertNotNull(template, nameof(template)); + + Template = template.ToList(); + } + + internal InternalEvalCompletionsRunDataSourceParamsInputMessages1(string kind, IList template, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Kind = kind; + Template = template ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "template"; + + public IList Template { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages2.Serialization.cs b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages2.Serialization.cs new file mode 100644 index 000000000..b718e63e2 --- /dev/null +++ b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages2.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCompletionsRunDataSourceParamsInputMessages2 : IJsonModel + { + internal InternalEvalCompletionsRunDataSourceParamsInputMessages2() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsInputMessages2)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_reference") != true) + { + writer.WritePropertyName("item_reference"u8); + writer.WriteStringValue(ItemReference); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalCompletionsRunDataSourceParamsInputMessages2 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalCompletionsRunDataSourceParamsInputMessages2 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsInputMessages2)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalCompletionsRunDataSourceParamsInputMessages2(document.RootElement, options); + } + + internal static InternalEvalCompletionsRunDataSourceParamsInputMessages2 DeserializeInternalEvalCompletionsRunDataSourceParamsInputMessages2(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + string itemReference = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_reference"u8)) + { + itemReference = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalCompletionsRunDataSourceParamsInputMessages2(kind, itemReference, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalCompletionsRunDataSourceParamsInputMessages2)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalCompletionsRunDataSourceParamsInputMessages2 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalCompletionsRunDataSourceParamsInputMessages2 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalCompletionsRunDataSourceParamsInputMessages2(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsInputMessages2)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages2.cs b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages2.cs new file mode 100644 index 000000000..d58a3239f --- /dev/null +++ b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsInputMessages2.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCompletionsRunDataSourceParamsInputMessages2 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalCompletionsRunDataSourceParamsInputMessages2(string itemReference) + { + Argument.AssertNotNull(itemReference, nameof(itemReference)); + + ItemReference = itemReference; + } + + internal InternalEvalCompletionsRunDataSourceParamsInputMessages2(string kind, string itemReference, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + ItemReference = itemReference; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "item_reference"; + + public string ItemReference { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsSamplingParams.Serialization.cs b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsSamplingParams.Serialization.cs new file mode 100644 index 000000000..5821c517f --- /dev/null +++ b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsSamplingParams.Serialization.cs @@ -0,0 +1,226 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Chat; +using OpenAI.Responses; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCompletionsRunDataSourceParamsSamplingParams : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsSamplingParams)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) + { + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); + } + if (Optional.IsDefined(MaxCompletionTokens) && _additionalBinaryDataProperties?.ContainsKey("max_completion_tokens") != true) + { + writer.WritePropertyName("max_completion_tokens"u8); + writer.WriteNumberValue(MaxCompletionTokens.Value); + } + if (Optional.IsDefined(TopP) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) + { + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP.Value); + } + if (Optional.IsDefined(Seed) && _additionalBinaryDataProperties?.ContainsKey("seed") != true) + { + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed.Value); + } + if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) + { + writer.WritePropertyName("response_format"u8); + writer.WriteObjectValue(ResponseFormat, options); + } + if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (ChatTool item in Tools) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalCompletionsRunDataSourceParamsSamplingParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalCompletionsRunDataSourceParamsSamplingParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsSamplingParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalCompletionsRunDataSourceParamsSamplingParams(document.RootElement, options); + } + + internal static InternalEvalCompletionsRunDataSourceParamsSamplingParams DeserializeInternalEvalCompletionsRunDataSourceParamsSamplingParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + float? temperature = default; + int? maxCompletionTokens = default; + float? topP = default; + int? seed = default; + ResponseTextFormat responseFormat = default; + IList tools = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("temperature"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + temperature = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("max_completion_tokens"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + maxCompletionTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("top_p"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + topP = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("seed"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + seed = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("response_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseFormat = ResponseTextFormat.DeserializeResponseTextFormat(prop.Value, options); + continue; + } + if (prop.NameEquals("tools"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ChatTool.DeserializeChatTool(item, options)); + } + tools = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalCompletionsRunDataSourceParamsSamplingParams( + temperature, + maxCompletionTokens, + topP, + seed, + responseFormat, + tools ?? new ChangeTrackingList(), + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalCompletionsRunDataSourceParamsSamplingParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalCompletionsRunDataSourceParamsSamplingParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalCompletionsRunDataSourceParamsSamplingParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalCompletionsRunDataSourceParamsSamplingParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalCompletionsRunDataSourceParamsSamplingParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsSamplingParams.cs b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsSamplingParams.cs new file mode 100644 index 000000000..3dab32b49 --- /dev/null +++ b/src/Generated/Models/InternalEvalCompletionsRunDataSourceParamsSamplingParams.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Chat; +using OpenAI.Responses; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCompletionsRunDataSourceParamsSamplingParams + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalCompletionsRunDataSourceParamsSamplingParams() : this(default, default, default, default, null, null, null) + { + } + + internal InternalEvalCompletionsRunDataSourceParamsSamplingParams(float? temperature, int? maxCompletionTokens, float? topP, int? seed, ResponseTextFormat responseFormat, IList tools, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Temperature = temperature; + MaxCompletionTokens = maxCompletionTokens; + TopP = topP; + Seed = seed; + ResponseFormat = responseFormat; + Tools = tools ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public float? Temperature { get; set; } + + public int? MaxCompletionTokens { get; set; } + + public float? TopP { get; set; } + + public int? Seed { get; set; } + + public ResponseTextFormat ResponseFormat { get; set; } + + public IList Tools { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalCustomDataSourceConfigParams.Serialization.cs b/src/Generated/Models/InternalEvalCustomDataSourceConfigParams.Serialization.cs new file mode 100644 index 000000000..5c7a55e6a --- /dev/null +++ b/src/Generated/Models/InternalEvalCustomDataSourceConfigParams.Serialization.cs @@ -0,0 +1,164 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCustomDataSourceConfigParams : IJsonModel + { + internal InternalEvalCustomDataSourceConfigParams() : this(InternalEvalDataSourceConfigType.Custom, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCustomDataSourceConfigParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_schema") != true) + { + writer.WritePropertyName("item_schema"u8); + writer.WriteStartObject(); + foreach (var item in ItemSchema) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + if (Optional.IsDefined(IncludeSampleSchema) && _additionalBinaryDataProperties?.ContainsKey("include_sample_schema") != true) + { + writer.WritePropertyName("include_sample_schema"u8); + writer.WriteBooleanValue(IncludeSampleSchema.Value); + } + } + + InternalEvalCustomDataSourceConfigParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalCustomDataSourceConfigParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCustomDataSourceConfigParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalCustomDataSourceConfigParams(document.RootElement, options); + } + + internal static InternalEvalCustomDataSourceConfigParams DeserializeInternalEvalCustomDataSourceConfigParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalDataSourceConfigType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IDictionary itemSchema = default; + bool? includeSampleSchema = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalDataSourceConfigType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("item_schema"u8)) + { + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + itemSchema = dictionary; + continue; + } + if (prop.NameEquals("include_sample_schema"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + includeSampleSchema = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalCustomDataSourceConfigParams(kind, additionalBinaryDataProperties, itemSchema, includeSampleSchema); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalCustomDataSourceConfigParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalCustomDataSourceConfigParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalCustomDataSourceConfigParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalCustomDataSourceConfigParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalCustomDataSourceConfigParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalCustomDataSourceConfigParams.cs b/src/Generated/Models/InternalEvalCustomDataSourceConfigParams.cs new file mode 100644 index 000000000..911c6c747 --- /dev/null +++ b/src/Generated/Models/InternalEvalCustomDataSourceConfigParams.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCustomDataSourceConfigParams : InternalEvalDataSourceConfigParams + { + public InternalEvalCustomDataSourceConfigParams(IDictionary itemSchema) : base(InternalEvalDataSourceConfigType.Custom) + { + // Plugin customization: ensure initialization of collections + Argument.AssertNotNull(itemSchema, nameof(itemSchema)); + + ItemSchema = itemSchema ?? new ChangeTrackingDictionary(); + } + + internal InternalEvalCustomDataSourceConfigParams(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties, IDictionary itemSchema, bool? includeSampleSchema) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ItemSchema = itemSchema ?? new ChangeTrackingDictionary(); + IncludeSampleSchema = includeSampleSchema; + } + + public IDictionary ItemSchema { get; } + + public bool? IncludeSampleSchema { get; set; } + } +} diff --git a/src/Generated/Models/InternalEvalCustomDataSourceConfigResource.Serialization.cs b/src/Generated/Models/InternalEvalCustomDataSourceConfigResource.Serialization.cs new file mode 100644 index 000000000..8d817fa47 --- /dev/null +++ b/src/Generated/Models/InternalEvalCustomDataSourceConfigResource.Serialization.cs @@ -0,0 +1,149 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCustomDataSourceConfigResource : IJsonModel + { + internal InternalEvalCustomDataSourceConfigResource() : this(InternalEvalDataSourceConfigType.Custom, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCustomDataSourceConfigResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("schema") != true) + { + writer.WritePropertyName("schema"u8); + writer.WriteStartObject(); + foreach (var item in Schema) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + } + + InternalEvalCustomDataSourceConfigResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalCustomDataSourceConfigResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalCustomDataSourceConfigResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalCustomDataSourceConfigResource(document.RootElement, options); + } + + internal static InternalEvalCustomDataSourceConfigResource DeserializeInternalEvalCustomDataSourceConfigResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalDataSourceConfigType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IDictionary schema = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalDataSourceConfigType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("schema"u8)) + { + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + schema = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalCustomDataSourceConfigResource(kind, additionalBinaryDataProperties, schema); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalCustomDataSourceConfigResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalCustomDataSourceConfigResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalCustomDataSourceConfigResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalCustomDataSourceConfigResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalCustomDataSourceConfigResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalCustomDataSourceConfigResource.cs b/src/Generated/Models/InternalEvalCustomDataSourceConfigResource.cs new file mode 100644 index 000000000..ef6246fb0 --- /dev/null +++ b/src/Generated/Models/InternalEvalCustomDataSourceConfigResource.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalCustomDataSourceConfigResource : InternalEvalDataSourceConfigResource + { + internal InternalEvalCustomDataSourceConfigResource(IDictionary schema) : base(InternalEvalDataSourceConfigType.Custom) + { + // Plugin customization: ensure initialization of collections + Schema = schema ?? new ChangeTrackingDictionary(); + } + + internal InternalEvalCustomDataSourceConfigResource(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties, IDictionary schema) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Schema = schema ?? new ChangeTrackingDictionary(); + } + + public IDictionary Schema { get; } + } +} diff --git a/src/Generated/Models/InternalEvalDataSourceConfigParams.Serialization.cs b/src/Generated/Models/InternalEvalDataSourceConfigParams.Serialization.cs new file mode 100644 index 000000000..f2293d80c --- /dev/null +++ b/src/Generated/Models/InternalEvalDataSourceConfigParams.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + [PersistableModelProxy(typeof(InternalUnknownEvalDataSourceConfigParams))] + internal abstract partial class InternalEvalDataSourceConfigParams : IJsonModel + { + internal InternalEvalDataSourceConfigParams() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigParams)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalDataSourceConfigParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalDataSourceConfigParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalDataSourceConfigParams(document.RootElement, options); + } + + internal static InternalEvalDataSourceConfigParams DeserializeInternalEvalDataSourceConfigParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "custom": + return InternalEvalCustomDataSourceConfigParams.DeserializeInternalEvalCustomDataSourceConfigParams(element, options); + case "logs": + return InternalEvalLogsDataSourceConfigParams.DeserializeInternalEvalLogsDataSourceConfigParams(element, options); + case "stored_completions": + return InternalEvalStoredCompletionsDataSourceConfigParams.DeserializeInternalEvalStoredCompletionsDataSourceConfigParams(element, options); + } + } + return InternalUnknownEvalDataSourceConfigParams.DeserializeInternalUnknownEvalDataSourceConfigParams(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalDataSourceConfigParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalDataSourceConfigParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalDataSourceConfigParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalDataSourceConfigParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalDataSourceConfigParams.cs b/src/Generated/Models/InternalEvalDataSourceConfigParams.cs new file mode 100644 index 000000000..9029adb9c --- /dev/null +++ b/src/Generated/Models/InternalEvalDataSourceConfigParams.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal abstract partial class InternalEvalDataSourceConfigParams + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalEvalDataSourceConfigParams(InternalEvalDataSourceConfigType kind) + { + Kind = kind; + } + + internal InternalEvalDataSourceConfigParams(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalEvalDataSourceConfigType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalDataSourceConfigResource.Serialization.cs b/src/Generated/Models/InternalEvalDataSourceConfigResource.Serialization.cs new file mode 100644 index 000000000..13fe428d1 --- /dev/null +++ b/src/Generated/Models/InternalEvalDataSourceConfigResource.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + [PersistableModelProxy(typeof(InternalUnknownEvalDataSourceConfigResource))] + internal abstract partial class InternalEvalDataSourceConfigResource : IJsonModel + { + internal InternalEvalDataSourceConfigResource() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigResource)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalDataSourceConfigResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalDataSourceConfigResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalDataSourceConfigResource(document.RootElement, options); + } + + internal static InternalEvalDataSourceConfigResource DeserializeInternalEvalDataSourceConfigResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "custom": + return InternalEvalCustomDataSourceConfigResource.DeserializeInternalEvalCustomDataSourceConfigResource(element, options); + case "stored_completions": + return InternalEvalStoredCompletionsDataSourceConfigResource.DeserializeInternalEvalStoredCompletionsDataSourceConfigResource(element, options); + case "logs": + return InternalEvalLogsDataSourceConfigResource.DeserializeInternalEvalLogsDataSourceConfigResource(element, options); + } + } + return InternalUnknownEvalDataSourceConfigResource.DeserializeInternalUnknownEvalDataSourceConfigResource(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalDataSourceConfigResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalDataSourceConfigResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalDataSourceConfigResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalDataSourceConfigResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalDataSourceConfigResource.cs b/src/Generated/Models/InternalEvalDataSourceConfigResource.cs new file mode 100644 index 000000000..db9bde60b --- /dev/null +++ b/src/Generated/Models/InternalEvalDataSourceConfigResource.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal abstract partial class InternalEvalDataSourceConfigResource + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalEvalDataSourceConfigResource(InternalEvalDataSourceConfigType kind) + { + Kind = kind; + } + + internal InternalEvalDataSourceConfigResource(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalEvalDataSourceConfigType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalDataSourceConfigType.cs b/src/Generated/Models/InternalEvalDataSourceConfigType.cs new file mode 100644 index 000000000..858e53240 --- /dev/null +++ b/src/Generated/Models/InternalEvalDataSourceConfigType.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalEvalDataSourceConfigType : IEquatable + { + private readonly string _value; + private const string CustomValue = "custom"; + private const string LogsValue = "logs"; + private const string StoredCompletionsValue = "stored_completions"; + + public InternalEvalDataSourceConfigType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalEvalDataSourceConfigType Custom { get; } = new InternalEvalDataSourceConfigType(CustomValue); + + internal static InternalEvalDataSourceConfigType Logs { get; } = new InternalEvalDataSourceConfigType(LogsValue); + + internal static InternalEvalDataSourceConfigType StoredCompletions { get; } = new InternalEvalDataSourceConfigType(StoredCompletionsValue); + + public static bool operator ==(InternalEvalDataSourceConfigType left, InternalEvalDataSourceConfigType right) => left.Equals(right); + + public static bool operator !=(InternalEvalDataSourceConfigType left, InternalEvalDataSourceConfigType right) => !left.Equals(right); + + public static implicit operator InternalEvalDataSourceConfigType(string value) => new InternalEvalDataSourceConfigType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalEvalDataSourceConfigType other && Equals(other); + + public bool Equals(InternalEvalDataSourceConfigType 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/InternalEvalGraderLabelModelParams.Serialization.cs b/src/Generated/Models/InternalEvalGraderLabelModelParams.Serialization.cs new file mode 100644 index 000000000..e253136e4 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderLabelModelParams.Serialization.cs @@ -0,0 +1,244 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderLabelModelParams : IJsonModel + { + internal InternalEvalGraderLabelModelParams() : this(InternalGraderType.LabelModel, null, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStartArray(); + foreach (BinaryData item in Input) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item); +#else + using (JsonDocument document = JsonDocument.Parse(item)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("labels") != true) + { + writer.WritePropertyName("labels"u8); + writer.WriteStartArray(); + foreach (string item in Labels) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("passing_labels") != true) + { + writer.WritePropertyName("passing_labels"u8); + writer.WriteStartArray(); + foreach (string item in PassingLabels) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + } + + InternalEvalGraderLabelModelParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderLabelModelParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderLabelModelParams(document.RootElement, options); + } + + internal static InternalEvalGraderLabelModelParams DeserializeInternalEvalGraderLabelModelParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string model = default; + IList input = default; + IList labels = default; + IList passingLabels = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(BinaryData.FromString(item.GetRawText())); + } + } + input = array; + continue; + } + if (prop.NameEquals("labels"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + labels = array; + continue; + } + if (prop.NameEquals("passing_labels"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + passingLabels = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderLabelModelParams( + kind, + additionalBinaryDataProperties, + name, + model, + input, + labels, + passingLabels); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderLabelModelParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderLabelModelParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderLabelModelParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderLabelModelParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderLabelModelParams.cs b/src/Generated/Models/InternalEvalGraderLabelModelParams.cs new file mode 100644 index 000000000..d73f90622 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderLabelModelParams.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderLabelModelParams : InternalEvalGraderParams + { + public InternalEvalGraderLabelModelParams(string name, string model, IEnumerable input, IEnumerable labels, IEnumerable passingLabels) : base(InternalGraderType.LabelModel) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(model, nameof(model)); + Argument.AssertNotNull(input, nameof(input)); + Argument.AssertNotNull(labels, nameof(labels)); + Argument.AssertNotNull(passingLabels, nameof(passingLabels)); + + Name = name; + Model = model; + Input = input.ToList(); + Labels = labels.ToList(); + PassingLabels = passingLabels.ToList(); + } + + internal InternalEvalGraderLabelModelParams(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string model, IList input, IList labels, IList passingLabels) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + Model = model; + Input = input ?? new ChangeTrackingList(); + Labels = labels ?? new ChangeTrackingList(); + PassingLabels = passingLabels ?? new ChangeTrackingList(); + } + + public string Name { get; } + + public string Model { get; } + + public IList Input { get; } + + public IList Labels { get; } + + public IList PassingLabels { get; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderLabelModelParamsInput.Serialization.cs b/src/Generated/Models/InternalEvalGraderLabelModelParamsInput.Serialization.cs new file mode 100644 index 000000000..c407b99f4 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderLabelModelParamsInput.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderLabelModelParamsInput : IJsonModel + { + internal InternalEvalGraderLabelModelParamsInput() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelParamsInput)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role); + } + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStringValue(Content); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalGraderLabelModelParamsInput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalGraderLabelModelParamsInput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelParamsInput)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderLabelModelParamsInput(document.RootElement, options); + } + + internal static InternalEvalGraderLabelModelParamsInput DeserializeInternalEvalGraderLabelModelParamsInput(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string role = default; + string content = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("role"u8)) + { + role = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("content"u8)) + { + content = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderLabelModelParamsInput(role, content, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderLabelModelParamsInput)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderLabelModelParamsInput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalGraderLabelModelParamsInput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderLabelModelParamsInput(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelParamsInput)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderLabelModelParamsInput.cs b/src/Generated/Models/InternalEvalGraderLabelModelParamsInput.cs new file mode 100644 index 000000000..bfe3a5298 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderLabelModelParamsInput.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderLabelModelParamsInput + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalGraderLabelModelParamsInput(string role, string content) + { + Argument.AssertNotNull(role, nameof(role)); + Argument.AssertNotNull(content, nameof(content)); + + Role = role; + Content = content; + } + + internal InternalEvalGraderLabelModelParamsInput(string role, string content, IDictionary additionalBinaryDataProperties) + { + Role = role; + Content = content; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Role { get; } + + public string Content { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalGraderLabelModelResource.Serialization.cs b/src/Generated/Models/InternalEvalGraderLabelModelResource.Serialization.cs new file mode 100644 index 000000000..33c90e58d --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderLabelModelResource.Serialization.cs @@ -0,0 +1,225 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderLabelModelResource : IJsonModel + { + internal InternalEvalGraderLabelModelResource() : this(InternalGraderType.LabelModel, null, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStartArray(); + foreach (InternalEvalItem item in Input) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("labels") != true) + { + writer.WritePropertyName("labels"u8); + writer.WriteStartArray(); + foreach (string item in Labels) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("passing_labels") != true) + { + writer.WritePropertyName("passing_labels"u8); + writer.WriteStartArray(); + foreach (string item in PassingLabels) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + } + + InternalEvalGraderLabelModelResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderLabelModelResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderLabelModelResource(document.RootElement, options); + } + + internal static InternalEvalGraderLabelModelResource DeserializeInternalEvalGraderLabelModelResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string model = default; + IList input = default; + IList labels = default; + IList passingLabels = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalItem.DeserializeInternalEvalItem(item, options)); + } + input = array; + continue; + } + if (prop.NameEquals("labels"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + labels = array; + continue; + } + if (prop.NameEquals("passing_labels"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + passingLabels = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderLabelModelResource( + kind, + additionalBinaryDataProperties, + name, + model, + input, + labels, + passingLabels); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderLabelModelResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderLabelModelResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderLabelModelResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderLabelModelResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderLabelModelResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderLabelModelResource.cs b/src/Generated/Models/InternalEvalGraderLabelModelResource.cs new file mode 100644 index 000000000..cef952fd4 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderLabelModelResource.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderLabelModelResource : InternalEvalGraderResource + { + internal InternalEvalGraderLabelModelResource(string name, string model, IEnumerable input, IEnumerable labels, IEnumerable passingLabels) : base(InternalGraderType.LabelModel) + { + Name = name; + Model = model; + Input = input.ToList(); + Labels = labels.ToList(); + PassingLabels = passingLabels.ToList(); + } + + internal InternalEvalGraderLabelModelResource(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string model, IList input, IList labels, IList passingLabels) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + Model = model; + Input = input ?? new ChangeTrackingList(); + Labels = labels ?? new ChangeTrackingList(); + PassingLabels = passingLabels ?? new ChangeTrackingList(); + } + + public string Name { get; } + + public string Model { get; } + + internal IList Input { get; } + + public IList Labels { get; } + + public IList PassingLabels { get; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderParams.Serialization.cs b/src/Generated/Models/InternalEvalGraderParams.Serialization.cs new file mode 100644 index 000000000..0cb03200d --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderParams.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + [PersistableModelProxy(typeof(InternalUnknownEvalGraderParams))] + internal abstract partial class InternalEvalGraderParams : IJsonModel + { + internal InternalEvalGraderParams() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderParams)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalGraderParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalGraderParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderParams(document.RootElement, options); + } + + internal static InternalEvalGraderParams DeserializeInternalEvalGraderParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "label_model": + return InternalEvalGraderLabelModelParams.DeserializeInternalEvalGraderLabelModelParams(element, options); + case "string_check": + return InternalEvalGraderStringCheckParams.DeserializeInternalEvalGraderStringCheckParams(element, options); + case "text_similarity": + return InternalEvalGraderTextSimilarityParams.DeserializeInternalEvalGraderTextSimilarityParams(element, options); + case "python": + return InternalEvalGraderPythonParams.DeserializeInternalEvalGraderPythonParams(element, options); + case "score_model": + return InternalEvalGraderScoreModelParams.DeserializeInternalEvalGraderScoreModelParams(element, options); + } + } + return InternalUnknownEvalGraderParams.DeserializeInternalUnknownEvalGraderParams(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalGraderParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderParams.cs b/src/Generated/Models/InternalEvalGraderParams.cs new file mode 100644 index 000000000..782394818 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderParams.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal abstract partial class InternalEvalGraderParams + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalEvalGraderParams(InternalGraderType kind) + { + Kind = kind; + } + + internal InternalEvalGraderParams(InternalGraderType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalGraderType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalGraderPythonParams.Serialization.cs b/src/Generated/Models/InternalEvalGraderPythonParams.Serialization.cs new file mode 100644 index 000000000..48bbc4818 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderPythonParams.Serialization.cs @@ -0,0 +1,163 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderPythonParams : IJsonModel + { + internal InternalEvalGraderPythonParams() : this(InternalGraderType.Python, null, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderPythonParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("source") != true) + { + writer.WritePropertyName("source"u8); + writer.WriteStringValue(Source); + } + if (Optional.IsDefined(ImageTag) && _additionalBinaryDataProperties?.ContainsKey("image_tag") != true) + { + writer.WritePropertyName("image_tag"u8); + writer.WriteStringValue(ImageTag); + } + if (Optional.IsDefined(PassThreshold) && _additionalBinaryDataProperties?.ContainsKey("pass_threshold") != true) + { + writer.WritePropertyName("pass_threshold"u8); + writer.WriteNumberValue(PassThreshold.Value); + } + } + + InternalEvalGraderPythonParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderPythonParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderPythonParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderPythonParams(document.RootElement, options); + } + + internal static InternalEvalGraderPythonParams DeserializeInternalEvalGraderPythonParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string source = default; + string imageTag = default; + float? passThreshold = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("source"u8)) + { + source = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("image_tag"u8)) + { + imageTag = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("pass_threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + passThreshold = prop.Value.GetSingle(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderPythonParams( + kind, + additionalBinaryDataProperties, + name, + source, + imageTag, + passThreshold); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderPythonParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderPythonParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderPythonParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderPythonParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderPythonParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderPythonParams.cs b/src/Generated/Models/InternalEvalGraderPythonParams.cs new file mode 100644 index 000000000..9af0de091 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderPythonParams.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderPythonParams : InternalEvalGraderParams + { + public InternalEvalGraderPythonParams(string name, string source) : base(InternalGraderType.Python) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(source, nameof(source)); + + Name = name; + Source = source; + } + + internal InternalEvalGraderPythonParams(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string source, string imageTag, float? passThreshold) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Source = source; + ImageTag = imageTag; + PassThreshold = passThreshold; + } + + public string Name { get; } + + public string Source { get; } + + public string ImageTag { get; set; } + + public float? PassThreshold { get; set; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderPythonResource.Serialization.cs b/src/Generated/Models/InternalEvalGraderPythonResource.Serialization.cs new file mode 100644 index 000000000..5e65941a8 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderPythonResource.Serialization.cs @@ -0,0 +1,163 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderPythonResource : IJsonModel + { + internal InternalEvalGraderPythonResource() : this(InternalGraderType.Python, null, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderPythonResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("source") != true) + { + writer.WritePropertyName("source"u8); + writer.WriteStringValue(Source); + } + if (Optional.IsDefined(ImageTag) && _additionalBinaryDataProperties?.ContainsKey("image_tag") != true) + { + writer.WritePropertyName("image_tag"u8); + writer.WriteStringValue(ImageTag); + } + if (Optional.IsDefined(PassThreshold) && _additionalBinaryDataProperties?.ContainsKey("pass_threshold") != true) + { + writer.WritePropertyName("pass_threshold"u8); + writer.WriteNumberValue(PassThreshold.Value); + } + } + + InternalEvalGraderPythonResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderPythonResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderPythonResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderPythonResource(document.RootElement, options); + } + + internal static InternalEvalGraderPythonResource DeserializeInternalEvalGraderPythonResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string source = default; + string imageTag = default; + float? passThreshold = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("source"u8)) + { + source = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("image_tag"u8)) + { + imageTag = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("pass_threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + passThreshold = prop.Value.GetSingle(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderPythonResource( + kind, + additionalBinaryDataProperties, + name, + source, + imageTag, + passThreshold); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderPythonResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderPythonResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderPythonResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderPythonResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderPythonResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderPythonResource.cs b/src/Generated/Models/InternalEvalGraderPythonResource.cs new file mode 100644 index 000000000..da519df81 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderPythonResource.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderPythonResource : InternalEvalGraderResource + { + internal InternalEvalGraderPythonResource(string name, string source) : base(InternalGraderType.Python) + { + Name = name; + Source = source; + } + + internal InternalEvalGraderPythonResource(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string source, string imageTag, float? passThreshold) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Source = source; + ImageTag = imageTag; + PassThreshold = passThreshold; + } + + public string Name { get; } + + public string Source { get; } + + public string ImageTag { get; } + + public float? PassThreshold { get; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderResource.Serialization.cs b/src/Generated/Models/InternalEvalGraderResource.Serialization.cs new file mode 100644 index 000000000..d6f62e324 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderResource.Serialization.cs @@ -0,0 +1,134 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + [PersistableModelProxy(typeof(InternalUnknownEvalGraderResource))] + internal abstract partial class InternalEvalGraderResource : IJsonModel + { + internal InternalEvalGraderResource() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderResource)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalGraderResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalGraderResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderResource(document.RootElement, options); + } + + internal static InternalEvalGraderResource DeserializeInternalEvalGraderResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "label_model": + return InternalEvalGraderLabelModelResource.DeserializeInternalEvalGraderLabelModelResource(element, options); + case "text_similarity": + return InternalEvalGraderTextSimilarityResource.DeserializeInternalEvalGraderTextSimilarityResource(element, options); + case "python": + return InternalEvalGraderPythonResource.DeserializeInternalEvalGraderPythonResource(element, options); + case "score_model": + return InternalEvalGraderScoreModelResource.DeserializeInternalEvalGraderScoreModelResource(element, options); + } + } + return InternalUnknownEvalGraderResource.DeserializeInternalUnknownEvalGraderResource(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalGraderResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderResource.cs b/src/Generated/Models/InternalEvalGraderResource.cs new file mode 100644 index 000000000..82c26d0a2 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderResource.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal abstract partial class InternalEvalGraderResource + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalEvalGraderResource(InternalGraderType kind) + { + Kind = kind; + } + + internal InternalEvalGraderResource(InternalGraderType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalGraderType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalGraderScoreModelParams.Serialization.cs b/src/Generated/Models/InternalEvalGraderScoreModelParams.Serialization.cs new file mode 100644 index 000000000..cedc9adf8 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderScoreModelParams.Serialization.cs @@ -0,0 +1,222 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderScoreModelParams : IJsonModel + { + internal InternalEvalGraderScoreModelParams() : this(InternalGraderType.ScoreModel, null, null, null, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderScoreModelParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (Optional.IsDefined(SamplingParams) && _additionalBinaryDataProperties?.ContainsKey("sampling_params") != true) + { + writer.WritePropertyName("sampling_params"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(SamplingParams); +#else + using (JsonDocument document = JsonDocument.Parse(SamplingParams)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStartArray(); + foreach (InternalEvalItem item in Input) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsCollectionDefined(Range) && _additionalBinaryDataProperties?.ContainsKey("range") != true) + { + writer.WritePropertyName("range"u8); + writer.WriteStartArray(); + foreach (float item in Range) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(PassThreshold) && _additionalBinaryDataProperties?.ContainsKey("pass_threshold") != true) + { + writer.WritePropertyName("pass_threshold"u8); + writer.WriteNumberValue(PassThreshold.Value); + } + } + + InternalEvalGraderScoreModelParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderScoreModelParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderScoreModelParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderScoreModelParams(document.RootElement, options); + } + + internal static InternalEvalGraderScoreModelParams DeserializeInternalEvalGraderScoreModelParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string model = default; + BinaryData samplingParams = default; + IList input = default; + IList range = default; + float? passThreshold = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("sampling_params"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + samplingParams = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("input"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalItem.DeserializeInternalEvalItem(item, options)); + } + input = array; + continue; + } + if (prop.NameEquals("range"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetSingle()); + } + range = array; + continue; + } + if (prop.NameEquals("pass_threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + passThreshold = prop.Value.GetSingle(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderScoreModelParams( + kind, + additionalBinaryDataProperties, + name, + model, + samplingParams, + input, + range ?? new ChangeTrackingList(), + passThreshold); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderScoreModelParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderScoreModelParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderScoreModelParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderScoreModelParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderScoreModelParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderScoreModelParams.cs b/src/Generated/Models/InternalEvalGraderScoreModelParams.cs new file mode 100644 index 000000000..069b05e53 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderScoreModelParams.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderScoreModelParams : InternalEvalGraderParams + { + internal InternalEvalGraderScoreModelParams(string name, string model, IEnumerable input) : base(InternalGraderType.ScoreModel) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(model, nameof(model)); + Argument.AssertNotNull(input, nameof(input)); + + Name = name; + Model = model; + Input = input.ToList(); + Range = new ChangeTrackingList(); + } + + internal InternalEvalGraderScoreModelParams(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string model, BinaryData samplingParams, IList input, IList range, float? passThreshold) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + Model = model; + SamplingParams = samplingParams; + Input = input ?? new ChangeTrackingList(); + Range = range ?? new ChangeTrackingList(); + PassThreshold = passThreshold; + } + + public string Name { get; } + + public string Model { get; } + + public BinaryData SamplingParams { get; set; } + + internal IList Input { get; } + + public IList Range { get; } + + public float? PassThreshold { get; set; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderScoreModelResource.Serialization.cs b/src/Generated/Models/InternalEvalGraderScoreModelResource.Serialization.cs new file mode 100644 index 000000000..e3217e6b4 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderScoreModelResource.Serialization.cs @@ -0,0 +1,222 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderScoreModelResource : IJsonModel + { + internal InternalEvalGraderScoreModelResource() : this(InternalGraderType.ScoreModel, null, null, null, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderScoreModelResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (Optional.IsDefined(SamplingParams) && _additionalBinaryDataProperties?.ContainsKey("sampling_params") != true) + { + writer.WritePropertyName("sampling_params"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(SamplingParams); +#else + using (JsonDocument document = JsonDocument.Parse(SamplingParams)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStartArray(); + foreach (InternalEvalItem item in Input) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsCollectionDefined(Range) && _additionalBinaryDataProperties?.ContainsKey("range") != true) + { + writer.WritePropertyName("range"u8); + writer.WriteStartArray(); + foreach (float item in Range) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(PassThreshold) && _additionalBinaryDataProperties?.ContainsKey("pass_threshold") != true) + { + writer.WritePropertyName("pass_threshold"u8); + writer.WriteNumberValue(PassThreshold.Value); + } + } + + InternalEvalGraderScoreModelResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderScoreModelResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderScoreModelResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderScoreModelResource(document.RootElement, options); + } + + internal static InternalEvalGraderScoreModelResource DeserializeInternalEvalGraderScoreModelResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string model = default; + BinaryData samplingParams = default; + IList input = default; + IList range = default; + float? passThreshold = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("sampling_params"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + samplingParams = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("input"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalItem.DeserializeInternalEvalItem(item, options)); + } + input = array; + continue; + } + if (prop.NameEquals("range"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetSingle()); + } + range = array; + continue; + } + if (prop.NameEquals("pass_threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + passThreshold = prop.Value.GetSingle(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderScoreModelResource( + kind, + additionalBinaryDataProperties, + name, + model, + samplingParams, + input, + range ?? new ChangeTrackingList(), + passThreshold); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderScoreModelResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderScoreModelResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderScoreModelResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderScoreModelResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderScoreModelResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderScoreModelResource.cs b/src/Generated/Models/InternalEvalGraderScoreModelResource.cs new file mode 100644 index 000000000..3f80299ec --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderScoreModelResource.cs @@ -0,0 +1,46 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderScoreModelResource : InternalEvalGraderResource + { + internal InternalEvalGraderScoreModelResource(string name, string model, IEnumerable input) : base(InternalGraderType.ScoreModel) + { + Name = name; + Model = model; + Input = input.ToList(); + Range = new ChangeTrackingList(); + } + + internal InternalEvalGraderScoreModelResource(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string model, BinaryData samplingParams, IList input, IList range, float? passThreshold) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + Model = model; + SamplingParams = samplingParams; + Input = input ?? new ChangeTrackingList(); + Range = range ?? new ChangeTrackingList(); + PassThreshold = passThreshold; + } + + public string Name { get; } + + public string Model { get; } + + public BinaryData SamplingParams { get; } + + internal IList Input { get; } + + public IList Range { get; } + + public float? PassThreshold { get; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderStringCheckParams.Serialization.cs b/src/Generated/Models/InternalEvalGraderStringCheckParams.Serialization.cs new file mode 100644 index 000000000..216b48db6 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderStringCheckParams.Serialization.cs @@ -0,0 +1,159 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderStringCheckParams : IJsonModel + { + internal InternalEvalGraderStringCheckParams() : this(InternalGraderType.StringCheck, null, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderStringCheckParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStringValue(Input); + } + if (_additionalBinaryDataProperties?.ContainsKey("reference") != true) + { + writer.WritePropertyName("reference"u8); + writer.WriteStringValue(Reference); + } + if (_additionalBinaryDataProperties?.ContainsKey("operation") != true) + { + writer.WritePropertyName("operation"u8); + writer.WriteStringValue(Operation.ToString()); + } + } + + InternalEvalGraderStringCheckParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderStringCheckParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderStringCheckParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderStringCheckParams(document.RootElement, options); + } + + internal static InternalEvalGraderStringCheckParams DeserializeInternalEvalGraderStringCheckParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string input = default; + string reference = default; + InternalEvalGraderStringCheckParamsOperation operation = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input"u8)) + { + input = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("reference"u8)) + { + reference = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("operation"u8)) + { + operation = new InternalEvalGraderStringCheckParamsOperation(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderStringCheckParams( + kind, + additionalBinaryDataProperties, + name, + input, + reference, + operation); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderStringCheckParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderStringCheckParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderStringCheckParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderStringCheckParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderStringCheckParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderStringCheckParams.cs b/src/Generated/Models/InternalEvalGraderStringCheckParams.cs new file mode 100644 index 000000000..c205da9e3 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderStringCheckParams.cs @@ -0,0 +1,42 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderStringCheckParams : InternalEvalGraderParams + { + internal InternalEvalGraderStringCheckParams(string name, string input, string reference, InternalEvalGraderStringCheckParamsOperation operation) : base(InternalGraderType.StringCheck) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(input, nameof(input)); + Argument.AssertNotNull(reference, nameof(reference)); + + Name = name; + Input = input; + Reference = reference; + Operation = operation; + } + + internal InternalEvalGraderStringCheckParams(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string input, string reference, InternalEvalGraderStringCheckParamsOperation operation) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Input = input; + Reference = reference; + Operation = operation; + } + + public string Name { get; } + + public string Input { get; } + + public string Reference { get; } + + internal InternalEvalGraderStringCheckParamsOperation Operation { get; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderStringCheckParamsOperation.cs b/src/Generated/Models/InternalEvalGraderStringCheckParamsOperation.cs new file mode 100644 index 000000000..3d3f3b715 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderStringCheckParamsOperation.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalEvalGraderStringCheckParamsOperation : IEquatable + { + private readonly string _value; + private const string EqValue = "eq"; + private const string NeValue = "ne"; + private const string LikeValue = "like"; + private const string IlikeValue = "ilike"; + + public InternalEvalGraderStringCheckParamsOperation(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalEvalGraderStringCheckParamsOperation Eq { get; } = new InternalEvalGraderStringCheckParamsOperation(EqValue); + + internal static InternalEvalGraderStringCheckParamsOperation Ne { get; } = new InternalEvalGraderStringCheckParamsOperation(NeValue); + + internal static InternalEvalGraderStringCheckParamsOperation Like { get; } = new InternalEvalGraderStringCheckParamsOperation(LikeValue); + + internal static InternalEvalGraderStringCheckParamsOperation Ilike { get; } = new InternalEvalGraderStringCheckParamsOperation(IlikeValue); + + public static bool operator ==(InternalEvalGraderStringCheckParamsOperation left, InternalEvalGraderStringCheckParamsOperation right) => left.Equals(right); + + public static bool operator !=(InternalEvalGraderStringCheckParamsOperation left, InternalEvalGraderStringCheckParamsOperation right) => !left.Equals(right); + + public static implicit operator InternalEvalGraderStringCheckParamsOperation(string value) => new InternalEvalGraderStringCheckParamsOperation(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalEvalGraderStringCheckParamsOperation other && Equals(other); + + public bool Equals(InternalEvalGraderStringCheckParamsOperation 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/InternalEvalGraderTextSimilarityParams.Serialization.cs b/src/Generated/Models/InternalEvalGraderTextSimilarityParams.Serialization.cs new file mode 100644 index 000000000..c9b336d87 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderTextSimilarityParams.Serialization.cs @@ -0,0 +1,171 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderTextSimilarityParams : IJsonModel + { + internal InternalEvalGraderTextSimilarityParams() : this(InternalGraderType.TextSimilarity, null, null, null, null, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderTextSimilarityParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStringValue(Input); + } + if (_additionalBinaryDataProperties?.ContainsKey("reference") != true) + { + writer.WritePropertyName("reference"u8); + writer.WriteStringValue(Reference); + } + if (_additionalBinaryDataProperties?.ContainsKey("evaluation_metric") != true) + { + writer.WritePropertyName("evaluation_metric"u8); + writer.WriteStringValue(EvaluationMetric.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("pass_threshold") != true) + { + writer.WritePropertyName("pass_threshold"u8); + writer.WriteNumberValue(PassThreshold); + } + } + + InternalEvalGraderTextSimilarityParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderTextSimilarityParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderTextSimilarityParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderTextSimilarityParams(document.RootElement, options); + } + + internal static InternalEvalGraderTextSimilarityParams DeserializeInternalEvalGraderTextSimilarityParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string input = default; + string reference = default; + InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric = default; + float passThreshold = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input"u8)) + { + input = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("reference"u8)) + { + reference = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("evaluation_metric"u8)) + { + evaluationMetric = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("pass_threshold"u8)) + { + passThreshold = prop.Value.GetSingle(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderTextSimilarityParams( + kind, + additionalBinaryDataProperties, + name, + input, + reference, + evaluationMetric, + passThreshold); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderTextSimilarityParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderTextSimilarityParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderTextSimilarityParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderTextSimilarityParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderTextSimilarityParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderTextSimilarityParams.cs b/src/Generated/Models/InternalEvalGraderTextSimilarityParams.cs new file mode 100644 index 000000000..71b0ca306 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderTextSimilarityParams.cs @@ -0,0 +1,46 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderTextSimilarityParams : InternalEvalGraderParams + { + internal InternalEvalGraderTextSimilarityParams(string name, string input, string reference, InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric, float passThreshold) : base(InternalGraderType.TextSimilarity) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(input, nameof(input)); + Argument.AssertNotNull(reference, nameof(reference)); + + Name = name; + Input = input; + Reference = reference; + EvaluationMetric = evaluationMetric; + PassThreshold = passThreshold; + } + + internal InternalEvalGraderTextSimilarityParams(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string input, string reference, InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric, float passThreshold) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Input = input; + Reference = reference; + EvaluationMetric = evaluationMetric; + PassThreshold = passThreshold; + } + + public string Name { get; } + + public string Input { get; } + + public string Reference { get; } + + internal InternalEvalGraderTextSimilarityResourceEvaluationMetric EvaluationMetric { get; } + + public float PassThreshold { get; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderTextSimilarityResource.Serialization.cs b/src/Generated/Models/InternalEvalGraderTextSimilarityResource.Serialization.cs new file mode 100644 index 000000000..ffbc618a2 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderTextSimilarityResource.Serialization.cs @@ -0,0 +1,171 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderTextSimilarityResource : IJsonModel + { + internal InternalEvalGraderTextSimilarityResource() : this(InternalGraderType.TextSimilarity, null, null, null, null, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderTextSimilarityResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStringValue(Input); + } + if (_additionalBinaryDataProperties?.ContainsKey("reference") != true) + { + writer.WritePropertyName("reference"u8); + writer.WriteStringValue(Reference); + } + if (_additionalBinaryDataProperties?.ContainsKey("evaluation_metric") != true) + { + writer.WritePropertyName("evaluation_metric"u8); + writer.WriteStringValue(EvaluationMetric.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("pass_threshold") != true) + { + writer.WritePropertyName("pass_threshold"u8); + writer.WriteNumberValue(PassThreshold); + } + } + + InternalEvalGraderTextSimilarityResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalGraderTextSimilarityResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderTextSimilarityResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderTextSimilarityResource(document.RootElement, options); + } + + internal static InternalEvalGraderTextSimilarityResource DeserializeInternalEvalGraderTextSimilarityResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string input = default; + string reference = default; + InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric = default; + float passThreshold = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input"u8)) + { + input = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("reference"u8)) + { + reference = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("evaluation_metric"u8)) + { + evaluationMetric = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("pass_threshold"u8)) + { + passThreshold = prop.Value.GetSingle(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalGraderTextSimilarityResource( + kind, + additionalBinaryDataProperties, + name, + input, + reference, + evaluationMetric, + passThreshold); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderTextSimilarityResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderTextSimilarityResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalGraderTextSimilarityResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderTextSimilarityResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderTextSimilarityResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalGraderTextSimilarityResource.cs b/src/Generated/Models/InternalEvalGraderTextSimilarityResource.cs new file mode 100644 index 000000000..32cba108d --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderTextSimilarityResource.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalGraderTextSimilarityResource : InternalEvalGraderResource + { + internal InternalEvalGraderTextSimilarityResource(string name, string input, string reference, InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric, float passThreshold) : base(InternalGraderType.TextSimilarity) + { + Name = name; + Input = input; + Reference = reference; + EvaluationMetric = evaluationMetric; + PassThreshold = passThreshold; + } + + internal InternalEvalGraderTextSimilarityResource(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string input, string reference, InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric, float passThreshold) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Input = input; + Reference = reference; + EvaluationMetric = evaluationMetric; + PassThreshold = passThreshold; + } + + public string Name { get; } + + public string Input { get; } + + public string Reference { get; } + + internal InternalEvalGraderTextSimilarityResourceEvaluationMetric EvaluationMetric { get; } + + public float PassThreshold { get; } + } +} diff --git a/src/Generated/Models/InternalEvalGraderTextSimilarityResourceEvaluationMetric.cs b/src/Generated/Models/InternalEvalGraderTextSimilarityResourceEvaluationMetric.cs new file mode 100644 index 000000000..4a7fbc169 --- /dev/null +++ b/src/Generated/Models/InternalEvalGraderTextSimilarityResourceEvaluationMetric.cs @@ -0,0 +1,68 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Graders +{ + internal readonly partial struct InternalEvalGraderTextSimilarityResourceEvaluationMetric : IEquatable + { + private readonly string _value; + private const string FuzzyMatchValue = "fuzzy_match"; + private const string BleuValue = "bleu"; + private const string GleuValue = "gleu"; + private const string MeteorValue = "meteor"; + private const string Rouge1Value = "rouge_1"; + private const string Rouge2Value = "rouge_2"; + private const string Rouge3Value = "rouge_3"; + private const string Rouge4Value = "rouge_4"; + private const string Rouge5Value = "rouge_5"; + private const string RougeLValue = "rouge_l"; + + public InternalEvalGraderTextSimilarityResourceEvaluationMetric(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric FuzzyMatch { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(FuzzyMatchValue); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric Bleu { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(BleuValue); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric Gleu { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(GleuValue); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric Meteor { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(MeteorValue); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric Rouge1 { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(Rouge1Value); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric Rouge2 { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(Rouge2Value); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric Rouge3 { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(Rouge3Value); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric Rouge4 { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(Rouge4Value); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric Rouge5 { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(Rouge5Value); + + internal static InternalEvalGraderTextSimilarityResourceEvaluationMetric RougeL { get; } = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(RougeLValue); + + public static bool operator ==(InternalEvalGraderTextSimilarityResourceEvaluationMetric left, InternalEvalGraderTextSimilarityResourceEvaluationMetric right) => left.Equals(right); + + public static bool operator !=(InternalEvalGraderTextSimilarityResourceEvaluationMetric left, InternalEvalGraderTextSimilarityResourceEvaluationMetric right) => !left.Equals(right); + + public static implicit operator InternalEvalGraderTextSimilarityResourceEvaluationMetric(string value) => new InternalEvalGraderTextSimilarityResourceEvaluationMetric(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalEvalGraderTextSimilarityResourceEvaluationMetric other && Equals(other); + + public bool Equals(InternalEvalGraderTextSimilarityResourceEvaluationMetric 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/InternalEvalItem.Serialization.cs b/src/Generated/Models/InternalEvalItem.Serialization.cs new file mode 100644 index 000000000..333db4a77 --- /dev/null +++ b/src/Generated/Models/InternalEvalItem.Serialization.cs @@ -0,0 +1,161 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalItem : IJsonModel + { + internal InternalEvalItem() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItem)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Content); +#else + using (JsonDocument document = JsonDocument.Parse(Content)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalItem(document.RootElement, options); + } + + internal static InternalEvalItem DeserializeInternalEvalItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalItemRole role = default; + BinaryData content = default; + string kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("role"u8)) + { + role = new InternalEvalItemRole(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("content"u8)) + { + content = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalItem(role, content, kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalItem)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalItem)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalItem.cs b/src/Generated/Models/InternalEvalItem.cs new file mode 100644 index 000000000..35f445276 --- /dev/null +++ b/src/Generated/Models/InternalEvalItem.cs @@ -0,0 +1,43 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalItem + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalItem(InternalEvalItemRole role, BinaryData content) + { + Argument.AssertNotNull(content, nameof(content)); + + Role = role; + Content = content; + } + + internal InternalEvalItem(InternalEvalItemRole role, BinaryData content, string kind, IDictionary additionalBinaryDataProperties) + { + Role = role; + Content = content; + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalEvalItemRole Role { get; set; } + + public BinaryData Content { get; set; } + + public string Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalItemContent.Serialization.cs b/src/Generated/Models/InternalEvalItemContent.Serialization.cs new file mode 100644 index 000000000..5a410415e --- /dev/null +++ b/src/Generated/Models/InternalEvalItemContent.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + [PersistableModelProxy(typeof(InternalUnknownEvalItemContent))] + internal abstract partial class InternalEvalItemContent : IJsonModel + { + internal InternalEvalItemContent() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItemContent)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalItemContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalItemContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItemContent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalItemContent(document.RootElement, options); + } + + internal static InternalEvalItemContent DeserializeInternalEvalItemContent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "input_text": + return InternalEvalItemContentInputText.DeserializeInternalEvalItemContentInputText(element, options); + case "output_text": + return InternalEvalItemContentOutputText.DeserializeInternalEvalItemContentOutputText(element, options); + } + } + return InternalUnknownEvalItemContent.DeserializeInternalUnknownEvalItemContent(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalItemContent)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalItemContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalItemContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalItemContent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalItemContent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalItemContent.cs b/src/Generated/Models/InternalEvalItemContent.cs new file mode 100644 index 000000000..cb0424f0e --- /dev/null +++ b/src/Generated/Models/InternalEvalItemContent.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal abstract partial class InternalEvalItemContent + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalEvalItemContent(InternalEvalItemContentType kind) + { + Kind = kind; + } + + internal InternalEvalItemContent(InternalEvalItemContentType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalEvalItemContentType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalItemContentInputText.Serialization.cs b/src/Generated/Models/InternalEvalItemContentInputText.Serialization.cs new file mode 100644 index 000000000..186786412 --- /dev/null +++ b/src/Generated/Models/InternalEvalItemContentInputText.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalItemContentInputText : IJsonModel + { + internal InternalEvalItemContentInputText() : this(InternalEvalItemContentType.InputText, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItemContentInputText)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + } + + InternalEvalItemContentInputText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalItemContentInputText)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalItemContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItemContentInputText)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalItemContentInputText(document.RootElement, options); + } + + internal static InternalEvalItemContentInputText DeserializeInternalEvalItemContentInputText(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalItemContentType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string text = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalItemContentInputText(kind, additionalBinaryDataProperties, text); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalItemContentInputText)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalItemContentInputText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalItemContentInputText)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalItemContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalItemContentInputText(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalItemContentInputText)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalItemContentInputText.cs b/src/Generated/Models/InternalEvalItemContentInputText.cs new file mode 100644 index 000000000..84648e9a3 --- /dev/null +++ b/src/Generated/Models/InternalEvalItemContentInputText.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalItemContentInputText : InternalEvalItemContent + { + public InternalEvalItemContentInputText(string text) : base(InternalEvalItemContentType.InputText) + { + Argument.AssertNotNull(text, nameof(text)); + + Text = text; + } + + internal InternalEvalItemContentInputText(InternalEvalItemContentType kind, IDictionary additionalBinaryDataProperties, string text) : base(kind, additionalBinaryDataProperties) + { + Text = text; + } + + public string Text { get; set; } + } +} diff --git a/src/Generated/Models/InternalEvalItemContentOutputText.Serialization.cs b/src/Generated/Models/InternalEvalItemContentOutputText.Serialization.cs new file mode 100644 index 000000000..385ea3d71 --- /dev/null +++ b/src/Generated/Models/InternalEvalItemContentOutputText.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalItemContentOutputText : IJsonModel + { + internal InternalEvalItemContentOutputText() : this(InternalEvalItemContentType.OutputText, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItemContentOutputText)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + } + + InternalEvalItemContentOutputText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalItemContentOutputText)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalItemContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItemContentOutputText)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalItemContentOutputText(document.RootElement, options); + } + + internal static InternalEvalItemContentOutputText DeserializeInternalEvalItemContentOutputText(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalItemContentType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string text = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalItemContentOutputText(kind, additionalBinaryDataProperties, text); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalItemContentOutputText)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalItemContentOutputText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalItemContentOutputText)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalItemContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalItemContentOutputText(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalItemContentOutputText)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalItemContentOutputText.cs b/src/Generated/Models/InternalEvalItemContentOutputText.cs new file mode 100644 index 000000000..ea36a70d0 --- /dev/null +++ b/src/Generated/Models/InternalEvalItemContentOutputText.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalItemContentOutputText : InternalEvalItemContent + { + public InternalEvalItemContentOutputText(string text) : base(InternalEvalItemContentType.OutputText) + { + Argument.AssertNotNull(text, nameof(text)); + + Text = text; + } + + internal InternalEvalItemContentOutputText(InternalEvalItemContentType kind, IDictionary additionalBinaryDataProperties, string text) : base(kind, additionalBinaryDataProperties) + { + Text = text; + } + + public string Text { get; set; } + } +} diff --git a/src/Generated/Models/InternalEvalItemContentType.cs b/src/Generated/Models/InternalEvalItemContentType.cs new file mode 100644 index 000000000..cce4e5854 --- /dev/null +++ b/src/Generated/Models/InternalEvalItemContentType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalEvalItemContentType : IEquatable + { + private readonly string _value; + private const string InputTextValue = "input_text"; + private const string OutputTextValue = "output_text"; + + public InternalEvalItemContentType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalEvalItemContentType InputText { get; } = new InternalEvalItemContentType(InputTextValue); + + internal static InternalEvalItemContentType OutputText { get; } = new InternalEvalItemContentType(OutputTextValue); + + public static bool operator ==(InternalEvalItemContentType left, InternalEvalItemContentType right) => left.Equals(right); + + public static bool operator !=(InternalEvalItemContentType left, InternalEvalItemContentType right) => !left.Equals(right); + + public static implicit operator InternalEvalItemContentType(string value) => new InternalEvalItemContentType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalEvalItemContentType other && Equals(other); + + public bool Equals(InternalEvalItemContentType 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/InternalEvalItemRole.cs b/src/Generated/Models/InternalEvalItemRole.cs new file mode 100644 index 000000000..d722f0a28 --- /dev/null +++ b/src/Generated/Models/InternalEvalItemRole.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalEvalItemRole : IEquatable + { + private readonly string _value; + private const string UserValue = "user"; + private const string AssistantValue = "assistant"; + private const string SystemValue = "system"; + private const string DeveloperValue = "developer"; + + public InternalEvalItemRole(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalEvalItemRole User { get; } = new InternalEvalItemRole(UserValue); + + internal static InternalEvalItemRole Assistant { get; } = new InternalEvalItemRole(AssistantValue); + + internal static InternalEvalItemRole System { get; } = new InternalEvalItemRole(SystemValue); + + internal static InternalEvalItemRole Developer { get; } = new InternalEvalItemRole(DeveloperValue); + + public static bool operator ==(InternalEvalItemRole left, InternalEvalItemRole right) => left.Equals(right); + + public static bool operator !=(InternalEvalItemRole left, InternalEvalItemRole right) => !left.Equals(right); + + public static implicit operator InternalEvalItemRole(string value) => new InternalEvalItemRole(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalEvalItemRole other && Equals(other); + + public bool Equals(InternalEvalItemRole 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/InternalEvalJsonlRunDataSourceParams.Serialization.cs b/src/Generated/Models/InternalEvalJsonlRunDataSourceParams.Serialization.cs new file mode 100644 index 000000000..c299ce50a --- /dev/null +++ b/src/Generated/Models/InternalEvalJsonlRunDataSourceParams.Serialization.cs @@ -0,0 +1,126 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalJsonlRunDataSourceParams : IJsonModel + { + internal InternalEvalJsonlRunDataSourceParams() : this(InternalEvalRunDataSourceType.Jsonl, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalJsonlRunDataSourceParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("source") != true) + { + writer.WritePropertyName("source"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Source); +#else + using (JsonDocument document = JsonDocument.Parse(Source)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalEvalJsonlRunDataSourceParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalJsonlRunDataSourceParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataSourceParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalJsonlRunDataSourceParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalJsonlRunDataSourceParams(document.RootElement, options); + } + + internal static InternalEvalJsonlRunDataSourceParams DeserializeInternalEvalJsonlRunDataSourceParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + BinaryData source = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataSourceType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("source"u8)) + { + source = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalJsonlRunDataSourceParams(kind, additionalBinaryDataProperties, source); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalJsonlRunDataSourceParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalJsonlRunDataSourceParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalJsonlRunDataSourceParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataSourceParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalJsonlRunDataSourceParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalJsonlRunDataSourceParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalJsonlRunDataSourceParams.cs b/src/Generated/Models/InternalEvalJsonlRunDataSourceParams.cs new file mode 100644 index 000000000..99755c38f --- /dev/null +++ b/src/Generated/Models/InternalEvalJsonlRunDataSourceParams.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalJsonlRunDataSourceParams : InternalEvalRunDataSourceParams + { + public InternalEvalJsonlRunDataSourceParams(BinaryData source) : base(InternalEvalRunDataSourceType.Jsonl) + { + Argument.AssertNotNull(source, nameof(source)); + + Source = source; + } + + internal InternalEvalJsonlRunDataSourceParams(InternalEvalRunDataSourceType kind, IDictionary additionalBinaryDataProperties, BinaryData source) : base(kind, additionalBinaryDataProperties) + { + Source = source; + } + + public BinaryData Source { get; } + } +} diff --git a/src/Generated/Models/InternalEvalList.Serialization.cs b/src/Generated/Models/InternalEvalList.Serialization.cs new file mode 100644 index 000000000..add9c2e1a --- /dev/null +++ b/src/Generated/Models/InternalEvalList.Serialization.cs @@ -0,0 +1,192 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalList : IJsonModel + { + internal InternalEvalList() : this(null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalList)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalEval item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalList IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalList JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalList)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalList(document.RootElement, options); + } + + internal static InternalEvalList DeserializeInternalEvalList(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + string firstId = default; + string lastId = default; + bool hasMore = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEval.DeserializeInternalEval(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("first_id"u8)) + { + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + lastId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalList( + @object, + data, + firstId, + lastId, + hasMore, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalList)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalList IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalList PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalList(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalList)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalList.cs b/src/Generated/Models/InternalEvalList.cs new file mode 100644 index 000000000..bfef39834 --- /dev/null +++ b/src/Generated/Models/InternalEvalList.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalList + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalList(IEnumerable data, string firstId, string lastId, bool hasMore) + { + Data = data.ToList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + } + + internal InternalEvalList(string @object, IList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "list"; + + internal IList Data { get; } + + public string FirstId { get; } + + public string LastId { get; } + + public bool HasMore { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalLogsDataSourceConfigParams.Serialization.cs b/src/Generated/Models/InternalEvalLogsDataSourceConfigParams.Serialization.cs new file mode 100644 index 000000000..9687927cf --- /dev/null +++ b/src/Generated/Models/InternalEvalLogsDataSourceConfigParams.Serialization.cs @@ -0,0 +1,142 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalLogsDataSourceConfigParams : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalLogsDataSourceConfigParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + } + + InternalEvalLogsDataSourceConfigParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalLogsDataSourceConfigParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalLogsDataSourceConfigParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalLogsDataSourceConfigParams(document.RootElement, options); + } + + internal static InternalEvalLogsDataSourceConfigParams DeserializeInternalEvalLogsDataSourceConfigParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalDataSourceConfigType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IDictionary metadata = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalDataSourceConfigType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalLogsDataSourceConfigParams(kind, additionalBinaryDataProperties, metadata ?? new ChangeTrackingDictionary()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalLogsDataSourceConfigParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalLogsDataSourceConfigParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalLogsDataSourceConfigParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalLogsDataSourceConfigParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalLogsDataSourceConfigParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalLogsDataSourceConfigParams.cs b/src/Generated/Models/InternalEvalLogsDataSourceConfigParams.cs new file mode 100644 index 000000000..8b423c358 --- /dev/null +++ b/src/Generated/Models/InternalEvalLogsDataSourceConfigParams.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalLogsDataSourceConfigParams : InternalEvalDataSourceConfigParams + { + public InternalEvalLogsDataSourceConfigParams() : this(InternalEvalDataSourceConfigType.Logs, null, null) + { + } + + internal InternalEvalLogsDataSourceConfigParams(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties, IDictionary metadata) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + } + + public IDictionary Metadata { get; } + } +} diff --git a/src/Generated/Models/InternalEvalLogsDataSourceConfigResource.Serialization.cs b/src/Generated/Models/InternalEvalLogsDataSourceConfigResource.Serialization.cs new file mode 100644 index 000000000..8076e7c2b --- /dev/null +++ b/src/Generated/Models/InternalEvalLogsDataSourceConfigResource.Serialization.cs @@ -0,0 +1,195 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalLogsDataSourceConfigResource : IJsonModel + { + internal InternalEvalLogsDataSourceConfigResource() : this(InternalEvalDataSourceConfigType.Logs, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalLogsDataSourceConfigResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + if (Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("schema") != true) + { + writer.WritePropertyName("schema"u8); + writer.WriteStartObject(); + foreach (var item in Schema) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + } + + InternalEvalLogsDataSourceConfigResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalLogsDataSourceConfigResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalLogsDataSourceConfigResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalLogsDataSourceConfigResource(document.RootElement, options); + } + + internal static InternalEvalLogsDataSourceConfigResource DeserializeInternalEvalLogsDataSourceConfigResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalDataSourceConfigType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IDictionary metadata = default; + IDictionary schema = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalDataSourceConfigType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + metadata = new ChangeTrackingDictionary(); + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + if (prop.NameEquals("schema"u8)) + { + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + schema = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalLogsDataSourceConfigResource(kind, additionalBinaryDataProperties, metadata, schema); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalLogsDataSourceConfigResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalLogsDataSourceConfigResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalLogsDataSourceConfigResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalLogsDataSourceConfigResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalLogsDataSourceConfigResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalLogsDataSourceConfigResource.cs b/src/Generated/Models/InternalEvalLogsDataSourceConfigResource.cs new file mode 100644 index 000000000..7d1ee95ea --- /dev/null +++ b/src/Generated/Models/InternalEvalLogsDataSourceConfigResource.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalLogsDataSourceConfigResource : InternalEvalDataSourceConfigResource + { + internal InternalEvalLogsDataSourceConfigResource(IDictionary metadata, IDictionary schema) : base(InternalEvalDataSourceConfigType.Logs) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Schema = schema ?? new ChangeTrackingDictionary(); + } + + internal InternalEvalLogsDataSourceConfigResource(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties, IDictionary metadata, IDictionary schema) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Schema = schema ?? new ChangeTrackingDictionary(); + } + + public IDictionary Metadata { get; } + + public IDictionary Schema { get; } + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParams.Serialization.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParams.Serialization.cs new file mode 100644 index 000000000..c17308f47 --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParams.Serialization.cs @@ -0,0 +1,180 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParams : IJsonModel + { + internal InternalEvalResponsesRunDataSourceParams() : this(InternalEvalRunDataSourceType.Responses, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(InputMessages) && _additionalBinaryDataProperties?.ContainsKey("input_messages") != true) + { + writer.WritePropertyName("input_messages"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(InputMessages); +#else + using (JsonDocument document = JsonDocument.Parse(InputMessages)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(SamplingParams) && _additionalBinaryDataProperties?.ContainsKey("sampling_params") != true) + { + writer.WritePropertyName("sampling_params"u8); + writer.WriteObjectValue(SamplingParams, options); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("source") != true) + { + writer.WritePropertyName("source"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Source); +#else + using (JsonDocument document = JsonDocument.Parse(Source)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalEvalResponsesRunDataSourceParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalResponsesRunDataSourceParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataSourceParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalResponsesRunDataSourceParams(document.RootElement, options); + } + + internal static InternalEvalResponsesRunDataSourceParams DeserializeInternalEvalResponsesRunDataSourceParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + BinaryData inputMessages = default; + InternalEvalResponsesRunDataSourceParamsSamplingParams samplingParams = default; + string model = default; + BinaryData source = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataSourceType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input_messages"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputMessages = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("sampling_params"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + samplingParams = InternalEvalResponsesRunDataSourceParamsSamplingParams.DeserializeInternalEvalResponsesRunDataSourceParamsSamplingParams(prop.Value, options); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("source"u8)) + { + source = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalResponsesRunDataSourceParams( + kind, + additionalBinaryDataProperties, + inputMessages, + samplingParams, + model, + source); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalResponsesRunDataSourceParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalResponsesRunDataSourceParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalResponsesRunDataSourceParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataSourceParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalResponsesRunDataSourceParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParams.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParams.cs new file mode 100644 index 000000000..0a215720c --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParams.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParams : InternalEvalRunDataSourceParams + { + public InternalEvalResponsesRunDataSourceParams(BinaryData source) : base(InternalEvalRunDataSourceType.Responses) + { + Argument.AssertNotNull(source, nameof(source)); + + Source = source; + } + + internal InternalEvalResponsesRunDataSourceParams(InternalEvalRunDataSourceType kind, IDictionary additionalBinaryDataProperties, BinaryData inputMessages, InternalEvalResponsesRunDataSourceParamsSamplingParams samplingParams, string model, BinaryData source) : base(kind, additionalBinaryDataProperties) + { + InputMessages = inputMessages; + SamplingParams = samplingParams; + Model = model; + Source = source; + } + + public BinaryData InputMessages { get; set; } + + internal InternalEvalResponsesRunDataSourceParamsSamplingParams SamplingParams { get; set; } + + public string Model { get; set; } + + public BinaryData Source { get; } + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages1.Serialization.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages1.Serialization.cs new file mode 100644 index 000000000..d4bfc37f2 --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages1.Serialization.cs @@ -0,0 +1,172 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsInputMessages1 : IJsonModel + { + internal InternalEvalResponsesRunDataSourceParamsInputMessages1() : this(null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessages1)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("template") != true) + { + writer.WritePropertyName("template"u8); + writer.WriteStartArray(); + foreach (BinaryData item in Template) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item); +#else + using (JsonDocument document = JsonDocument.Parse(item)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalResponsesRunDataSourceParamsInputMessages1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsInputMessages1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessages1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalResponsesRunDataSourceParamsInputMessages1(document.RootElement, options); + } + + internal static InternalEvalResponsesRunDataSourceParamsInputMessages1 DeserializeInternalEvalResponsesRunDataSourceParamsInputMessages1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + IList template = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("template"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(BinaryData.FromString(item.GetRawText())); + } + } + template = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalResponsesRunDataSourceParamsInputMessages1(kind, template, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalResponsesRunDataSourceParamsInputMessages1)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalResponsesRunDataSourceParamsInputMessages1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsInputMessages1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalResponsesRunDataSourceParamsInputMessages1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessages1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages1.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages1.cs new file mode 100644 index 000000000..81815dae1 --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages1.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsInputMessages1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalResponsesRunDataSourceParamsInputMessages1(IEnumerable template) + { + Argument.AssertNotNull(template, nameof(template)); + + Template = template.ToList(); + } + + internal InternalEvalResponsesRunDataSourceParamsInputMessages1(string kind, IList template, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Kind = kind; + Template = template ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "template"; + + public IList Template { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages2.Serialization.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages2.Serialization.cs new file mode 100644 index 000000000..ce1c91647 --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages2.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsInputMessages2 : IJsonModel + { + internal InternalEvalResponsesRunDataSourceParamsInputMessages2() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessages2)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_reference") != true) + { + writer.WritePropertyName("item_reference"u8); + writer.WriteStringValue(ItemReference); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalResponsesRunDataSourceParamsInputMessages2 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsInputMessages2 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessages2)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalResponsesRunDataSourceParamsInputMessages2(document.RootElement, options); + } + + internal static InternalEvalResponsesRunDataSourceParamsInputMessages2 DeserializeInternalEvalResponsesRunDataSourceParamsInputMessages2(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + string itemReference = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_reference"u8)) + { + itemReference = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalResponsesRunDataSourceParamsInputMessages2(kind, itemReference, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalResponsesRunDataSourceParamsInputMessages2)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalResponsesRunDataSourceParamsInputMessages2 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsInputMessages2 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalResponsesRunDataSourceParamsInputMessages2(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessages2)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages2.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages2.cs new file mode 100644 index 000000000..b62c3288e --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessages2.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsInputMessages2 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalResponsesRunDataSourceParamsInputMessages2(string itemReference) + { + Argument.AssertNotNull(itemReference, nameof(itemReference)); + + ItemReference = itemReference; + } + + internal InternalEvalResponsesRunDataSourceParamsInputMessages2(string kind, string itemReference, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + ItemReference = itemReference; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "item_reference"; + + public string ItemReference { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1.Serialization.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1.Serialization.cs new file mode 100644 index 000000000..ef8b8c513 --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1 : IJsonModel + { + internal InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role); + } + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStringValue(Content); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1(document.RootElement, options); + } + + internal static InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1 DeserializeInternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string role = default; + string content = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("role"u8)) + { + role = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("content"u8)) + { + content = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1(role, content, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1.cs new file mode 100644 index 000000000..abc03d3c6 --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1(string role, string content) + { + Argument.AssertNotNull(role, nameof(role)); + Argument.AssertNotNull(content, nameof(content)); + + Role = role; + Content = content; + } + + internal InternalEvalResponsesRunDataSourceParamsInputMessagesTemplate1(string role, string content, IDictionary additionalBinaryDataProperties) + { + Role = role; + Content = content; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Role { get; } + + public string Content { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParams.Serialization.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParams.Serialization.cs new file mode 100644 index 000000000..32d0cf95c --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParams.Serialization.cs @@ -0,0 +1,225 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Responses; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsSamplingParams : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsSamplingParams)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) + { + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); + } + if (Optional.IsDefined(MaxCompletionTokens) && _additionalBinaryDataProperties?.ContainsKey("max_completion_tokens") != true) + { + writer.WritePropertyName("max_completion_tokens"u8); + writer.WriteNumberValue(MaxCompletionTokens.Value); + } + if (Optional.IsDefined(TopP) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) + { + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP.Value); + } + if (Optional.IsDefined(Seed) && _additionalBinaryDataProperties?.ContainsKey("seed") != true) + { + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed.Value); + } + if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (ResponseTool item in Tools) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(Text) && _additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteObjectValue(Text, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalResponsesRunDataSourceParamsSamplingParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsSamplingParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsSamplingParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalResponsesRunDataSourceParamsSamplingParams(document.RootElement, options); + } + + internal static InternalEvalResponsesRunDataSourceParamsSamplingParams DeserializeInternalEvalResponsesRunDataSourceParamsSamplingParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + float? temperature = default; + int? maxCompletionTokens = default; + float? topP = default; + int? seed = default; + IList tools = default; + InternalEvalResponsesRunDataSourceParamsSamplingParamsText text = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("temperature"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + temperature = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("max_completion_tokens"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + maxCompletionTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("top_p"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + topP = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("seed"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + seed = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("tools"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseTool.DeserializeResponseTool(item, options)); + } + tools = array; + continue; + } + if (prop.NameEquals("text"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + text = InternalEvalResponsesRunDataSourceParamsSamplingParamsText.DeserializeInternalEvalResponsesRunDataSourceParamsSamplingParamsText(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalResponsesRunDataSourceParamsSamplingParams( + temperature, + maxCompletionTokens, + topP, + seed, + tools ?? new ChangeTrackingList(), + text, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalResponsesRunDataSourceParamsSamplingParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalResponsesRunDataSourceParamsSamplingParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsSamplingParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalResponsesRunDataSourceParamsSamplingParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsSamplingParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParams.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParams.cs new file mode 100644 index 000000000..f4b477fcc --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParams.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Responses; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsSamplingParams + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalResponsesRunDataSourceParamsSamplingParams() : this(default, default, default, default, null, null, null) + { + } + + internal InternalEvalResponsesRunDataSourceParamsSamplingParams(float? temperature, int? maxCompletionTokens, float? topP, int? seed, IList tools, InternalEvalResponsesRunDataSourceParamsSamplingParamsText text, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Temperature = temperature; + MaxCompletionTokens = maxCompletionTokens; + TopP = topP; + Seed = seed; + Tools = tools ?? new ChangeTrackingList(); + Text = text; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public float? Temperature { get; set; } + + public int? MaxCompletionTokens { get; set; } + + public float? TopP { get; set; } + + public int? Seed { get; set; } + + public IList Tools { get; } + + internal InternalEvalResponsesRunDataSourceParamsSamplingParamsText Text { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParamsText.Serialization.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParamsText.Serialization.cs new file mode 100644 index 000000000..af596aff1 --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParamsText.Serialization.cs @@ -0,0 +1,133 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Responses; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsSamplingParamsText : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsSamplingParamsText)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Format) && _additionalBinaryDataProperties?.ContainsKey("format") != true) + { + writer.WritePropertyName("format"u8); + writer.WriteObjectValue(Format, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalResponsesRunDataSourceParamsSamplingParamsText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsSamplingParamsText JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsSamplingParamsText)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalResponsesRunDataSourceParamsSamplingParamsText(document.RootElement, options); + } + + internal static InternalEvalResponsesRunDataSourceParamsSamplingParamsText DeserializeInternalEvalResponsesRunDataSourceParamsSamplingParamsText(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseTextFormat format = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + format = ResponseTextFormat.DeserializeResponseTextFormat(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalResponsesRunDataSourceParamsSamplingParamsText(format, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalResponsesRunDataSourceParamsSamplingParamsText)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalResponsesRunDataSourceParamsSamplingParamsText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalResponsesRunDataSourceParamsSamplingParamsText PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalResponsesRunDataSourceParamsSamplingParamsText(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalResponsesRunDataSourceParamsSamplingParamsText)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParamsText.cs b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParamsText.cs new file mode 100644 index 000000000..88d5a5b0a --- /dev/null +++ b/src/Generated/Models/InternalEvalResponsesRunDataSourceParamsSamplingParamsText.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalResponsesRunDataSourceParamsSamplingParamsText + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalResponsesRunDataSourceParamsSamplingParamsText() + { + } + + internal InternalEvalResponsesRunDataSourceParamsSamplingParamsText(ResponseTextFormat format, IDictionary additionalBinaryDataProperties) + { + Format = format; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public ResponseTextFormat Format { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRun.Serialization.cs b/src/Generated/Models/InternalEvalRun.Serialization.cs new file mode 100644 index 000000000..dbaad9c05 --- /dev/null +++ b/src/Generated/Models/InternalEvalRun.Serialization.cs @@ -0,0 +1,345 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRun : IJsonModel + { + internal InternalEvalRun() : this(null, null, null, null, null, null, default, null, null, null, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRun)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("eval_id") != true) + { + writer.WritePropertyName("eval_id"u8); + writer.WriteStringValue(EvalId); + } + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("report_url") != true) + { + writer.WritePropertyName("report_url"u8); + writer.WriteStringValue(ReportUrl); + } + if (_additionalBinaryDataProperties?.ContainsKey("result_counts") != true) + { + writer.WritePropertyName("result_counts"u8); + writer.WriteObjectValue(ResultCounts, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("per_model_usage") != true) + { + writer.WritePropertyName("per_model_usage"u8); + writer.WriteStartArray(); + foreach (InternalEvalRunPerModelUsage item in PerModelUsage) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("per_testing_criteria_results") != true) + { + writer.WritePropertyName("per_testing_criteria_results"u8); + writer.WriteStartArray(); + foreach (InternalEvalRunPerTestingCriteriaResult item in PerTestingCriteriaResults) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("data_source") != true) + { + writer.WritePropertyName("data_source"u8); + writer.WriteObjectValue(DataSource, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + if (Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRun IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRun JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRun)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRun(document.RootElement, options); + } + + internal static InternalEvalRun DeserializeInternalEvalRun(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + string id = default; + string evalId = default; + string status = default; + string model = default; + string name = default; + DateTimeOffset createdAt = default; + string reportUrl = default; + InternalEvalRunResultCounts resultCounts = default; + IList perModelUsage = default; + IList perTestingCriteriaResults = default; + InternalEvalRunDataSourceResource dataSource = default; + IDictionary metadata = default; + InternalEvalApiError error = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("eval_id"u8)) + { + evalId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("status"u8)) + { + status = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("report_url"u8)) + { + reportUrl = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("result_counts"u8)) + { + resultCounts = InternalEvalRunResultCounts.DeserializeInternalEvalRunResultCounts(prop.Value, options); + continue; + } + if (prop.NameEquals("per_model_usage"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalRunPerModelUsage.DeserializeInternalEvalRunPerModelUsage(item, options)); + } + perModelUsage = array; + continue; + } + if (prop.NameEquals("per_testing_criteria_results"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalRunPerTestingCriteriaResult.DeserializeInternalEvalRunPerTestingCriteriaResult(item, options)); + } + perTestingCriteriaResults = array; + continue; + } + if (prop.NameEquals("data_source"u8)) + { + dataSource = InternalEvalRunDataSourceResource.DeserializeInternalEvalRunDataSourceResource(prop.Value, options); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + metadata = new ChangeTrackingDictionary(); + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + if (prop.NameEquals("error"u8)) + { + error = InternalEvalApiError.DeserializeInternalEvalApiError(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRun( + @object, + id, + evalId, + status, + model, + name, + createdAt, + reportUrl, + resultCounts, + perModelUsage, + perTestingCriteriaResults, + dataSource, + metadata, + error, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRun)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRun IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRun PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRun(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRun)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRun.cs b/src/Generated/Models/InternalEvalRun.cs new file mode 100644 index 000000000..4dae2acef --- /dev/null +++ b/src/Generated/Models/InternalEvalRun.cs @@ -0,0 +1,88 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRun + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRun(string id, string evalId, string status, string model, string name, DateTimeOffset createdAt, string reportUrl, InternalEvalRunResultCounts resultCounts, IEnumerable perModelUsage, IEnumerable perTestingCriteriaResults, InternalEvalRunDataSourceResource dataSource, IDictionary metadata, InternalEvalApiError error) + { + // Plugin customization: ensure initialization of collections + Id = id; + EvalId = evalId; + Status = status; + Model = model; + Name = name; + CreatedAt = createdAt; + ReportUrl = reportUrl; + ResultCounts = resultCounts; + PerModelUsage = perModelUsage.ToList(); + PerTestingCriteriaResults = perTestingCriteriaResults.ToList(); + DataSource = dataSource; + Metadata = metadata ?? new ChangeTrackingDictionary(); + Error = error; + } + + internal InternalEvalRun(string @object, string id, string evalId, string status, string model, string name, DateTimeOffset createdAt, string reportUrl, InternalEvalRunResultCounts resultCounts, IList perModelUsage, IList perTestingCriteriaResults, InternalEvalRunDataSourceResource dataSource, IDictionary metadata, InternalEvalApiError error, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Id = id; + EvalId = evalId; + Status = status; + Model = model; + Name = name; + CreatedAt = createdAt; + ReportUrl = reportUrl; + ResultCounts = resultCounts; + PerModelUsage = perModelUsage ?? new ChangeTrackingList(); + PerTestingCriteriaResults = perTestingCriteriaResults ?? new ChangeTrackingList(); + DataSource = dataSource; + Metadata = metadata ?? new ChangeTrackingDictionary(); + Error = error; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "eval.run"; + + public string Id { get; } + + public string EvalId { get; } + + public string Status { get; } + + public string Model { get; } + + public string Name { get; } + + public DateTimeOffset CreatedAt { get; } + + public string ReportUrl { get; } + + internal InternalEvalRunResultCounts ResultCounts { get; } + + internal IList PerModelUsage { get; } + + internal IList PerTestingCriteriaResults { get; } + + internal InternalEvalRunDataSourceResource DataSource { get; } + + public IDictionary Metadata { get; } + + internal InternalEvalApiError Error { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunDataContentSource.Serialization.cs b/src/Generated/Models/InternalEvalRunDataContentSource.Serialization.cs new file mode 100644 index 000000000..7b1c7f0de --- /dev/null +++ b/src/Generated/Models/InternalEvalRunDataContentSource.Serialization.cs @@ -0,0 +1,134 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + [PersistableModelProxy(typeof(InternalUnknownEvalRunDataContentSource))] + internal abstract partial class InternalEvalRunDataContentSource : IJsonModel + { + internal InternalEvalRunDataContentSource() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataContentSource)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunDataContentSource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunDataContentSource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataContentSource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunDataContentSource(document.RootElement, options); + } + + internal static InternalEvalRunDataContentSource DeserializeInternalEvalRunDataContentSource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "file_content": + return InternalEvalRunFileContentDataContentSource.DeserializeInternalEvalRunFileContentDataContentSource(element, options); + case "file_id": + return InternalEvalRunFileIdDataContentSource.DeserializeInternalEvalRunFileIdDataContentSource(element, options); + case "stored_completions": + return InternalEvalRunStoredCompletionsDataContentSource.DeserializeInternalEvalRunStoredCompletionsDataContentSource(element, options); + case "responses": + return InternalEvalRunResponsesDataContentSource.DeserializeInternalEvalRunResponsesDataContentSource(element, options); + } + } + return InternalUnknownEvalRunDataContentSource.DeserializeInternalUnknownEvalRunDataContentSource(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunDataContentSource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunDataContentSource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunDataContentSource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunDataContentSource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunDataContentSource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunDataContentSource.cs b/src/Generated/Models/InternalEvalRunDataContentSource.cs new file mode 100644 index 000000000..5c2f8db79 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunDataContentSource.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal abstract partial class InternalEvalRunDataContentSource + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalEvalRunDataContentSource(InternalEvalRunDataContentSourceType kind) + { + Kind = kind; + } + + internal InternalEvalRunDataContentSource(InternalEvalRunDataContentSourceType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalEvalRunDataContentSourceType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunDataContentSourceType.cs b/src/Generated/Models/InternalEvalRunDataContentSourceType.cs new file mode 100644 index 000000000..124c43501 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunDataContentSourceType.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalEvalRunDataContentSourceType : IEquatable + { + private readonly string _value; + private const string FileIdValue = "file_id"; + private const string FileContentValue = "file_content"; + private const string StoredCompletionsValue = "stored_completions"; + private const string ResponsesValue = "responses"; + + public InternalEvalRunDataContentSourceType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalEvalRunDataContentSourceType FileId { get; } = new InternalEvalRunDataContentSourceType(FileIdValue); + + internal static InternalEvalRunDataContentSourceType FileContent { get; } = new InternalEvalRunDataContentSourceType(FileContentValue); + + internal static InternalEvalRunDataContentSourceType StoredCompletions { get; } = new InternalEvalRunDataContentSourceType(StoredCompletionsValue); + + internal static InternalEvalRunDataContentSourceType Responses { get; } = new InternalEvalRunDataContentSourceType(ResponsesValue); + + public static bool operator ==(InternalEvalRunDataContentSourceType left, InternalEvalRunDataContentSourceType right) => left.Equals(right); + + public static bool operator !=(InternalEvalRunDataContentSourceType left, InternalEvalRunDataContentSourceType right) => !left.Equals(right); + + public static implicit operator InternalEvalRunDataContentSourceType(string value) => new InternalEvalRunDataContentSourceType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalEvalRunDataContentSourceType other && Equals(other); + + public bool Equals(InternalEvalRunDataContentSourceType 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/InternalEvalRunDataSourceParams.Serialization.cs b/src/Generated/Models/InternalEvalRunDataSourceParams.Serialization.cs new file mode 100644 index 000000000..d8760327d --- /dev/null +++ b/src/Generated/Models/InternalEvalRunDataSourceParams.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + [PersistableModelProxy(typeof(InternalUnknownEvalRunDataSourceParams))] + internal abstract partial class InternalEvalRunDataSourceParams : IJsonModel + { + internal InternalEvalRunDataSourceParams() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceParams)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunDataSourceParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunDataSourceParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunDataSourceParams(document.RootElement, options); + } + + internal static InternalEvalRunDataSourceParams DeserializeInternalEvalRunDataSourceParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "jsonl": + return InternalEvalJsonlRunDataSourceParams.DeserializeInternalEvalJsonlRunDataSourceParams(element, options); + case "completions": + return InternalEvalCompletionsRunDataSourceParams.DeserializeInternalEvalCompletionsRunDataSourceParams(element, options); + case "responses": + return InternalEvalResponsesRunDataSourceParams.DeserializeInternalEvalResponsesRunDataSourceParams(element, options); + } + } + return InternalUnknownEvalRunDataSourceParams.DeserializeInternalUnknownEvalRunDataSourceParams(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunDataSourceParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunDataSourceParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunDataSourceParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunDataSourceParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunDataSourceParams.cs b/src/Generated/Models/InternalEvalRunDataSourceParams.cs new file mode 100644 index 000000000..294161803 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunDataSourceParams.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal abstract partial class InternalEvalRunDataSourceParams + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalEvalRunDataSourceParams(InternalEvalRunDataSourceType kind) + { + Kind = kind; + } + + internal InternalEvalRunDataSourceParams(InternalEvalRunDataSourceType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalEvalRunDataSourceType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunDataSourceResource.Serialization.cs b/src/Generated/Models/InternalEvalRunDataSourceResource.Serialization.cs new file mode 100644 index 000000000..aaec2a67d --- /dev/null +++ b/src/Generated/Models/InternalEvalRunDataSourceResource.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunDataSourceResource : IJsonModel + { + internal InternalEvalRunDataSourceResource() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceResource)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunDataSourceResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunDataSourceResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunDataSourceResource(document.RootElement, options); + } + + internal static InternalEvalRunDataSourceResource DeserializeInternalEvalRunDataSourceResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataSourceType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunDataSourceResource(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunDataSourceResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunDataSourceResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunDataSourceResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunDataSourceResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunDataSourceResource.cs b/src/Generated/Models/InternalEvalRunDataSourceResource.cs new file mode 100644 index 000000000..c295b4f2f --- /dev/null +++ b/src/Generated/Models/InternalEvalRunDataSourceResource.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunDataSourceResource + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunDataSourceResource(InternalEvalRunDataSourceType kind) + { + Kind = kind; + } + + internal InternalEvalRunDataSourceResource(InternalEvalRunDataSourceType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalEvalRunDataSourceType Kind { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunDataSourceType.cs b/src/Generated/Models/InternalEvalRunDataSourceType.cs new file mode 100644 index 000000000..5da9ab1a5 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunDataSourceType.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalEvalRunDataSourceType : IEquatable + { + private readonly string _value; + private const string JsonlValue = "jsonl"; + private const string CompletionsValue = "completions"; + private const string ResponsesValue = "responses"; + + public InternalEvalRunDataSourceType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalEvalRunDataSourceType Jsonl { get; } = new InternalEvalRunDataSourceType(JsonlValue); + + internal static InternalEvalRunDataSourceType Completions { get; } = new InternalEvalRunDataSourceType(CompletionsValue); + + internal static InternalEvalRunDataSourceType Responses { get; } = new InternalEvalRunDataSourceType(ResponsesValue); + + public static bool operator ==(InternalEvalRunDataSourceType left, InternalEvalRunDataSourceType right) => left.Equals(right); + + public static bool operator !=(InternalEvalRunDataSourceType left, InternalEvalRunDataSourceType right) => !left.Equals(right); + + public static implicit operator InternalEvalRunDataSourceType(string value) => new InternalEvalRunDataSourceType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalEvalRunDataSourceType other && Equals(other); + + public bool Equals(InternalEvalRunDataSourceType 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/InternalEvalRunFileContentDataContentSource.Serialization.cs b/src/Generated/Models/InternalEvalRunFileContentDataContentSource.Serialization.cs new file mode 100644 index 000000000..8484da391 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunFileContentDataContentSource.Serialization.cs @@ -0,0 +1,129 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunFileContentDataContentSource : IJsonModel + { + internal InternalEvalRunFileContentDataContentSource() : this(InternalEvalRunDataContentSourceType.FileContent, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunFileContentDataContentSource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (InternalEvalRunFileContentDataContentSourceContent item in Content) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalEvalRunFileContentDataContentSource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalRunFileContentDataContentSource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunFileContentDataContentSource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunFileContentDataContentSource(document.RootElement, options); + } + + internal static InternalEvalRunFileContentDataContentSource DeserializeInternalEvalRunFileContentDataContentSource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataContentSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IList content = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataContentSourceType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("content"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalRunFileContentDataContentSourceContent.DeserializeInternalEvalRunFileContentDataContentSourceContent(item, options)); + } + content = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunFileContentDataContentSource(kind, additionalBinaryDataProperties, content); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunFileContentDataContentSource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunFileContentDataContentSource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalRunFileContentDataContentSource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunFileContentDataContentSource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunFileContentDataContentSource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunFileContentDataContentSource.cs b/src/Generated/Models/InternalEvalRunFileContentDataContentSource.cs new file mode 100644 index 000000000..cfcd590a6 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunFileContentDataContentSource.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunFileContentDataContentSource : InternalEvalRunDataContentSource + { + internal InternalEvalRunFileContentDataContentSource(IEnumerable content) : base(InternalEvalRunDataContentSourceType.FileContent) + { + Argument.AssertNotNull(content, nameof(content)); + + Content = content.ToList(); + } + + internal InternalEvalRunFileContentDataContentSource(InternalEvalRunDataContentSourceType kind, IDictionary additionalBinaryDataProperties, IList content) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); + } + + internal IList Content { get; } + } +} diff --git a/src/Generated/Models/InternalEvalRunFileContentDataContentSourceContent.Serialization.cs b/src/Generated/Models/InternalEvalRunFileContentDataContentSourceContent.Serialization.cs new file mode 100644 index 000000000..f9fdef49e --- /dev/null +++ b/src/Generated/Models/InternalEvalRunFileContentDataContentSourceContent.Serialization.cs @@ -0,0 +1,207 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunFileContentDataContentSourceContent : IJsonModel + { + internal InternalEvalRunFileContentDataContentSourceContent() : this(null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunFileContentDataContentSourceContent)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("item") != true) + { + writer.WritePropertyName("item"u8); + writer.WriteStartObject(); + foreach (var item in Item) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + if (Optional.IsCollectionDefined(Sample) && _additionalBinaryDataProperties?.ContainsKey("sample") != true) + { + writer.WritePropertyName("sample"u8); + writer.WriteStartObject(); + foreach (var item in Sample) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunFileContentDataContentSourceContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunFileContentDataContentSourceContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunFileContentDataContentSourceContent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunFileContentDataContentSourceContent(document.RootElement, options); + } + + internal static InternalEvalRunFileContentDataContentSourceContent DeserializeInternalEvalRunFileContentDataContentSourceContent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IDictionary item = default; + IDictionary sample = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("item"u8)) + { + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + item = dictionary; + continue; + } + if (prop.NameEquals("sample"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + sample = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunFileContentDataContentSourceContent(item, sample ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunFileContentDataContentSourceContent)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunFileContentDataContentSourceContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunFileContentDataContentSourceContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunFileContentDataContentSourceContent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunFileContentDataContentSourceContent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunFileContentDataContentSourceContent.cs b/src/Generated/Models/InternalEvalRunFileContentDataContentSourceContent.cs new file mode 100644 index 000000000..6b16af21f --- /dev/null +++ b/src/Generated/Models/InternalEvalRunFileContentDataContentSourceContent.cs @@ -0,0 +1,42 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunFileContentDataContentSourceContent + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalEvalRunFileContentDataContentSourceContent(IDictionary item) + { + // Plugin customization: ensure initialization of collections + Argument.AssertNotNull(item, nameof(item)); + + Item = item ?? new ChangeTrackingDictionary(); + Sample = new ChangeTrackingDictionary(); + } + + internal InternalEvalRunFileContentDataContentSourceContent(IDictionary item, IDictionary sample, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Item = item ?? new ChangeTrackingDictionary(); + Sample = sample ?? new ChangeTrackingDictionary(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IDictionary Item { get; } + + public IDictionary Sample { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunFileIdDataContentSource.Serialization.cs b/src/Generated/Models/InternalEvalRunFileIdDataContentSource.Serialization.cs new file mode 100644 index 000000000..14f216f37 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunFileIdDataContentSource.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunFileIdDataContentSource : IJsonModel + { + internal InternalEvalRunFileIdDataContentSource() : this(InternalEvalRunDataContentSourceType.FileId, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunFileIdDataContentSource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + } + + InternalEvalRunFileIdDataContentSource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalRunFileIdDataContentSource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunFileIdDataContentSource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunFileIdDataContentSource(document.RootElement, options); + } + + internal static InternalEvalRunFileIdDataContentSource DeserializeInternalEvalRunFileIdDataContentSource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataContentSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string id = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataContentSourceType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunFileIdDataContentSource(kind, additionalBinaryDataProperties, id); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunFileIdDataContentSource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunFileIdDataContentSource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalRunFileIdDataContentSource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunFileIdDataContentSource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunFileIdDataContentSource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunFileIdDataContentSource.cs b/src/Generated/Models/InternalEvalRunFileIdDataContentSource.cs new file mode 100644 index 000000000..65eddc2af --- /dev/null +++ b/src/Generated/Models/InternalEvalRunFileIdDataContentSource.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunFileIdDataContentSource : InternalEvalRunDataContentSource + { + public InternalEvalRunFileIdDataContentSource(string id) : base(InternalEvalRunDataContentSourceType.FileId) + { + Argument.AssertNotNull(id, nameof(id)); + + Id = id; + } + + internal InternalEvalRunFileIdDataContentSource(InternalEvalRunDataContentSourceType kind, IDictionary additionalBinaryDataProperties, string id) : base(kind, additionalBinaryDataProperties) + { + Id = id; + } + + public string Id { get; } + } +} diff --git a/src/Generated/Models/InternalEvalRunList.Serialization.cs b/src/Generated/Models/InternalEvalRunList.Serialization.cs new file mode 100644 index 000000000..f30490806 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunList.Serialization.cs @@ -0,0 +1,192 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunList : IJsonModel + { + internal InternalEvalRunList() : this(null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunList)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalEvalRun item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunList IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunList JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunList)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunList(document.RootElement, options); + } + + internal static InternalEvalRunList DeserializeInternalEvalRunList(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + string firstId = default; + string lastId = default; + bool hasMore = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalRun.DeserializeInternalEvalRun(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("first_id"u8)) + { + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + lastId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunList( + @object, + data, + firstId, + lastId, + hasMore, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunList)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunList IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunList PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunList(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunList)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunList.cs b/src/Generated/Models/InternalEvalRunList.cs new file mode 100644 index 000000000..2f8bfc977 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunList.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunList + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunList(IEnumerable data, string firstId, string lastId, bool hasMore) + { + Data = data.ToList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + } + + internal InternalEvalRunList(string @object, IList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "list"; + + internal IList Data { get; } + + public string FirstId { get; } + + public string LastId { get; } + + public bool HasMore { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItem.Serialization.cs b/src/Generated/Models/InternalEvalRunOutputItem.Serialization.cs new file mode 100644 index 000000000..186fe20e2 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItem.Serialization.cs @@ -0,0 +1,324 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItem : IJsonModel + { + internal InternalEvalRunOutputItem() : this(null, null, null, null, default, null, default, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItem)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("run_id") != true) + { + writer.WritePropertyName("run_id"u8); + writer.WriteStringValue(RunId); + } + if (_additionalBinaryDataProperties?.ContainsKey("eval_id") != true) + { + writer.WritePropertyName("eval_id"u8); + writer.WriteStringValue(EvalId); + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status); + } + if (_additionalBinaryDataProperties?.ContainsKey("datasource_item_id") != true) + { + writer.WritePropertyName("datasource_item_id"u8); + writer.WriteNumberValue(DatasourceItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("datasource_item") != true) + { + writer.WritePropertyName("datasource_item"u8); + writer.WriteStartObject(); + foreach (var item in DatasourceItem) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + if (_additionalBinaryDataProperties?.ContainsKey("results") != true) + { + writer.WritePropertyName("results"u8); + writer.WriteStartArray(); + foreach (IDictionary item in Results) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStartObject(); + foreach (var item0 in item) + { + writer.WritePropertyName(item0.Key); + if (item0.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item0.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item0.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("sample") != true) + { + writer.WritePropertyName("sample"u8); + writer.WriteObjectValue(Sample, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunOutputItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunOutputItem(document.RootElement, options); + } + + internal static InternalEvalRunOutputItem DeserializeInternalEvalRunOutputItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + string id = default; + string runId = default; + string evalId = default; + DateTimeOffset createdAt = default; + string status = default; + int datasourceItemId = default; + IDictionary datasourceItem = default; + IList> results = default; + InternalEvalRunOutputItemSample sample = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("run_id"u8)) + { + runId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("eval_id"u8)) + { + evalId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("status"u8)) + { + status = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("datasource_item_id"u8)) + { + datasourceItemId = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("datasource_item"u8)) + { + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + datasourceItem = dictionary; + continue; + } + if (prop.NameEquals("results"u8)) + { + List> array = new List>(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in item.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + array.Add(dictionary); + } + } + results = array; + continue; + } + if (prop.NameEquals("sample"u8)) + { + sample = InternalEvalRunOutputItemSample.DeserializeInternalEvalRunOutputItemSample(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunOutputItem( + @object, + id, + runId, + evalId, + createdAt, + status, + datasourceItemId, + datasourceItem, + results, + sample, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunOutputItem)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunOutputItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunOutputItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunOutputItem)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItem.cs b/src/Generated/Models/InternalEvalRunOutputItem.cs new file mode 100644 index 000000000..11400250a --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItem.cs @@ -0,0 +1,72 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItem + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunOutputItem(string id, string runId, string evalId, DateTimeOffset createdAt, string status, int datasourceItemId, IDictionary datasourceItem, IEnumerable> results, InternalEvalRunOutputItemSample sample) + { + // Plugin customization: ensure initialization of collections + Id = id; + RunId = runId; + EvalId = evalId; + CreatedAt = createdAt; + Status = status; + DatasourceItemId = datasourceItemId; + DatasourceItem = datasourceItem ?? new ChangeTrackingDictionary(); + Results = results.ToList(); + Sample = sample; + } + + internal InternalEvalRunOutputItem(string @object, string id, string runId, string evalId, DateTimeOffset createdAt, string status, int datasourceItemId, IDictionary datasourceItem, IList> results, InternalEvalRunOutputItemSample sample, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Id = id; + RunId = runId; + EvalId = evalId; + CreatedAt = createdAt; + Status = status; + DatasourceItemId = datasourceItemId; + DatasourceItem = datasourceItem ?? new ChangeTrackingDictionary(); + Results = results ?? new ChangeTrackingList>(); + Sample = sample; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "eval.run.output_item"; + + public string Id { get; } + + public string RunId { get; } + + public string EvalId { get; } + + public DateTimeOffset CreatedAt { get; } + + public string Status { get; } + + public int DatasourceItemId { get; } + + public IDictionary DatasourceItem { get; } + + public IList> Results { get; } + + internal InternalEvalRunOutputItemSample Sample { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemList.Serialization.cs b/src/Generated/Models/InternalEvalRunOutputItemList.Serialization.cs new file mode 100644 index 000000000..4786e003c --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemList.Serialization.cs @@ -0,0 +1,192 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemList : IJsonModel + { + internal InternalEvalRunOutputItemList() : this(null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemList)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalEvalRunOutputItem item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunOutputItemList IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemList JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemList)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunOutputItemList(document.RootElement, options); + } + + internal static InternalEvalRunOutputItemList DeserializeInternalEvalRunOutputItemList(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + string firstId = default; + string lastId = default; + bool hasMore = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalRunOutputItem.DeserializeInternalEvalRunOutputItem(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("first_id"u8)) + { + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + lastId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunOutputItemList( + @object, + data, + firstId, + lastId, + hasMore, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunOutputItemList)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunOutputItemList IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemList PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunOutputItemList(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemList)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemList.cs b/src/Generated/Models/InternalEvalRunOutputItemList.cs new file mode 100644 index 000000000..2581a7310 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemList.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemList + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunOutputItemList(IEnumerable data, string firstId, string lastId, bool hasMore) + { + Data = data.ToList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + } + + internal InternalEvalRunOutputItemList(string @object, IList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "list"; + + internal IList Data { get; } + + public string FirstId { get; } + + public string LastId { get; } + + public bool HasMore { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemSample.Serialization.cs b/src/Generated/Models/InternalEvalRunOutputItemSample.Serialization.cs new file mode 100644 index 000000000..060c0ef60 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemSample.Serialization.cs @@ -0,0 +1,262 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemSample : IJsonModel + { + internal InternalEvalRunOutputItemSample() : this(null, null, null, null, null, null, default, default, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSample)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStartArray(); + foreach (InternalEvalRunOutputItemSampleInput item in Input) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteStartArray(); + foreach (InternalEvalRunOutputItemSampleOutput item in Output) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("finish_reason") != true) + { + writer.WritePropertyName("finish_reason"u8); + writer.WriteStringValue(FinishReason); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("usage") != true) + { + writer.WritePropertyName("usage"u8); + writer.WriteObjectValue(Usage, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("temperature") != true) + { + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature); + } + if (_additionalBinaryDataProperties?.ContainsKey("max_completion_tokens") != true) + { + writer.WritePropertyName("max_completion_tokens"u8); + writer.WriteNumberValue(MaxCompletionTokens); + } + if (_additionalBinaryDataProperties?.ContainsKey("top_p") != true) + { + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP); + } + if (_additionalBinaryDataProperties?.ContainsKey("seed") != true) + { + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunOutputItemSample IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemSample JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSample)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunOutputItemSample(document.RootElement, options); + } + + internal static InternalEvalRunOutputItemSample DeserializeInternalEvalRunOutputItemSample(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IList input = default; + IList output = default; + string finishReason = default; + string model = default; + InternalEvalRunOutputItemSampleUsage usage = default; + InternalEvalApiError error = default; + float temperature = default; + int maxCompletionTokens = default; + float topP = default; + int seed = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("input"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalRunOutputItemSampleInput.DeserializeInternalEvalRunOutputItemSampleInput(item, options)); + } + input = array; + continue; + } + if (prop.NameEquals("output"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalRunOutputItemSampleOutput.DeserializeInternalEvalRunOutputItemSampleOutput(item, options)); + } + output = array; + continue; + } + if (prop.NameEquals("finish_reason"u8)) + { + finishReason = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("usage"u8)) + { + usage = InternalEvalRunOutputItemSampleUsage.DeserializeInternalEvalRunOutputItemSampleUsage(prop.Value, options); + continue; + } + if (prop.NameEquals("error"u8)) + { + error = InternalEvalApiError.DeserializeInternalEvalApiError(prop.Value, options); + continue; + } + if (prop.NameEquals("temperature"u8)) + { + temperature = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("max_completion_tokens"u8)) + { + maxCompletionTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("top_p"u8)) + { + topP = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("seed"u8)) + { + seed = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunOutputItemSample( + input, + output, + finishReason, + model, + usage, + error, + temperature, + maxCompletionTokens, + topP, + seed, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunOutputItemSample)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunOutputItemSample IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemSample PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunOutputItemSample(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSample)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemSample.cs b/src/Generated/Models/InternalEvalRunOutputItemSample.cs new file mode 100644 index 000000000..c25a2be40 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemSample.cs @@ -0,0 +1,72 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemSample + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunOutputItemSample(IEnumerable input, IEnumerable output, string finishReason, string model, InternalEvalRunOutputItemSampleUsage usage, InternalEvalApiError error, float temperature, int maxCompletionTokens, float topP, int seed) + { + Input = input.ToList(); + Output = output.ToList(); + FinishReason = finishReason; + Model = model; + Usage = usage; + Error = error; + Temperature = temperature; + MaxCompletionTokens = maxCompletionTokens; + TopP = topP; + Seed = seed; + } + + internal InternalEvalRunOutputItemSample(IList input, IList output, string finishReason, string model, InternalEvalRunOutputItemSampleUsage usage, InternalEvalApiError error, float temperature, int maxCompletionTokens, float topP, int seed, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Input = input ?? new ChangeTrackingList(); + Output = output ?? new ChangeTrackingList(); + FinishReason = finishReason; + Model = model; + Usage = usage; + Error = error; + Temperature = temperature; + MaxCompletionTokens = maxCompletionTokens; + TopP = topP; + Seed = seed; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IList Input { get; } + + internal IList Output { get; } + + public string FinishReason { get; } + + public string Model { get; } + + internal InternalEvalRunOutputItemSampleUsage Usage { get; } + + internal InternalEvalApiError Error { get; } + + public float Temperature { get; } + + public int MaxCompletionTokens { get; } + + public float TopP { get; } + + public int Seed { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemSampleInput.Serialization.cs b/src/Generated/Models/InternalEvalRunOutputItemSampleInput.Serialization.cs new file mode 100644 index 000000000..771ef4a5d --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemSampleInput.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemSampleInput : IJsonModel + { + internal InternalEvalRunOutputItemSampleInput() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleInput)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role); + } + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStringValue(Content); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunOutputItemSampleInput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemSampleInput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleInput)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunOutputItemSampleInput(document.RootElement, options); + } + + internal static InternalEvalRunOutputItemSampleInput DeserializeInternalEvalRunOutputItemSampleInput(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string role = default; + string content = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("role"u8)) + { + role = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("content"u8)) + { + content = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunOutputItemSampleInput(role, content, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunOutputItemSampleInput)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunOutputItemSampleInput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemSampleInput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunOutputItemSampleInput(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleInput)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemSampleInput.cs b/src/Generated/Models/InternalEvalRunOutputItemSampleInput.cs new file mode 100644 index 000000000..f4bce8713 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemSampleInput.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemSampleInput + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunOutputItemSampleInput(string role, string content) + { + Role = role; + Content = content; + } + + internal InternalEvalRunOutputItemSampleInput(string role, string content, IDictionary additionalBinaryDataProperties) + { + Role = role; + Content = content; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Role { get; } + + public string Content { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemSampleOutput.Serialization.cs b/src/Generated/Models/InternalEvalRunOutputItemSampleOutput.Serialization.cs new file mode 100644 index 000000000..386d5d2b7 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemSampleOutput.Serialization.cs @@ -0,0 +1,139 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemSampleOutput : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleOutput)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Role) && _additionalBinaryDataProperties?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role); + } + if (Optional.IsDefined(Content) && _additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStringValue(Content); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunOutputItemSampleOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemSampleOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleOutput)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunOutputItemSampleOutput(document.RootElement, options); + } + + internal static InternalEvalRunOutputItemSampleOutput DeserializeInternalEvalRunOutputItemSampleOutput(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string role = default; + string content = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("role"u8)) + { + role = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("content"u8)) + { + content = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunOutputItemSampleOutput(role, content, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunOutputItemSampleOutput)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunOutputItemSampleOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemSampleOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunOutputItemSampleOutput(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleOutput)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemSampleOutput.cs b/src/Generated/Models/InternalEvalRunOutputItemSampleOutput.cs new file mode 100644 index 000000000..e31e649f6 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemSampleOutput.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemSampleOutput + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunOutputItemSampleOutput() + { + } + + internal InternalEvalRunOutputItemSampleOutput(string role, string content, IDictionary additionalBinaryDataProperties) + { + Role = role; + Content = content; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Role { get; } + + public string Content { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemSampleUsage.Serialization.cs b/src/Generated/Models/InternalEvalRunOutputItemSampleUsage.Serialization.cs new file mode 100644 index 000000000..a39410a00 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemSampleUsage.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemSampleUsage : IJsonModel + { + internal InternalEvalRunOutputItemSampleUsage() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleUsage)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("total_tokens") != true) + { + writer.WritePropertyName("total_tokens"u8); + writer.WriteNumberValue(TotalTokens); + } + if (_additionalBinaryDataProperties?.ContainsKey("completion_tokens") != true) + { + writer.WritePropertyName("completion_tokens"u8); + writer.WriteNumberValue(CompletionTokens); + } + if (_additionalBinaryDataProperties?.ContainsKey("prompt_tokens") != true) + { + writer.WritePropertyName("prompt_tokens"u8); + writer.WriteNumberValue(PromptTokens); + } + if (_additionalBinaryDataProperties?.ContainsKey("cached_tokens") != true) + { + writer.WritePropertyName("cached_tokens"u8); + writer.WriteNumberValue(CachedTokens); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunOutputItemSampleUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemSampleUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleUsage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunOutputItemSampleUsage(document.RootElement, options); + } + + internal static InternalEvalRunOutputItemSampleUsage DeserializeInternalEvalRunOutputItemSampleUsage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int totalTokens = default; + int completionTokens = default; + int promptTokens = default; + int cachedTokens = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("total_tokens"u8)) + { + totalTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("completion_tokens"u8)) + { + completionTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("prompt_tokens"u8)) + { + promptTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("cached_tokens"u8)) + { + cachedTokens = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunOutputItemSampleUsage(totalTokens, completionTokens, promptTokens, cachedTokens, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunOutputItemSampleUsage)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunOutputItemSampleUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunOutputItemSampleUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunOutputItemSampleUsage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunOutputItemSampleUsage)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunOutputItemSampleUsage.cs b/src/Generated/Models/InternalEvalRunOutputItemSampleUsage.cs new file mode 100644 index 000000000..05b3e722e --- /dev/null +++ b/src/Generated/Models/InternalEvalRunOutputItemSampleUsage.cs @@ -0,0 +1,45 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunOutputItemSampleUsage + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunOutputItemSampleUsage(int totalTokens, int completionTokens, int promptTokens, int cachedTokens) + { + TotalTokens = totalTokens; + CompletionTokens = completionTokens; + PromptTokens = promptTokens; + CachedTokens = cachedTokens; + } + + internal InternalEvalRunOutputItemSampleUsage(int totalTokens, int completionTokens, int promptTokens, int cachedTokens, IDictionary additionalBinaryDataProperties) + { + TotalTokens = totalTokens; + CompletionTokens = completionTokens; + PromptTokens = promptTokens; + CachedTokens = cachedTokens; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public int TotalTokens { get; } + + public int CompletionTokens { get; } + + public int PromptTokens { get; } + + public int CachedTokens { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunPerModelUsage.Serialization.cs b/src/Generated/Models/InternalEvalRunPerModelUsage.Serialization.cs new file mode 100644 index 000000000..717dba759 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunPerModelUsage.Serialization.cs @@ -0,0 +1,194 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunPerModelUsage : IJsonModel + { + internal InternalEvalRunPerModelUsage() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunPerModelUsage)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("model_name") != true) + { + writer.WritePropertyName("model_name"u8); + writer.WriteStringValue(ModelName); + } + if (_additionalBinaryDataProperties?.ContainsKey("invocation_count") != true) + { + writer.WritePropertyName("invocation_count"u8); + writer.WriteNumberValue(InvocationCount); + } + if (_additionalBinaryDataProperties?.ContainsKey("prompt_tokens") != true) + { + writer.WritePropertyName("prompt_tokens"u8); + writer.WriteNumberValue(PromptTokens); + } + if (_additionalBinaryDataProperties?.ContainsKey("completion_tokens") != true) + { + writer.WritePropertyName("completion_tokens"u8); + writer.WriteNumberValue(CompletionTokens); + } + if (_additionalBinaryDataProperties?.ContainsKey("total_tokens") != true) + { + writer.WritePropertyName("total_tokens"u8); + writer.WriteNumberValue(TotalTokens); + } + if (_additionalBinaryDataProperties?.ContainsKey("cached_tokens") != true) + { + writer.WritePropertyName("cached_tokens"u8); + writer.WriteNumberValue(CachedTokens); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunPerModelUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunPerModelUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunPerModelUsage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunPerModelUsage(document.RootElement, options); + } + + internal static InternalEvalRunPerModelUsage DeserializeInternalEvalRunPerModelUsage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string modelName = default; + int invocationCount = default; + int promptTokens = default; + int completionTokens = default; + int totalTokens = default; + int cachedTokens = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("model_name"u8)) + { + modelName = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("invocation_count"u8)) + { + invocationCount = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("prompt_tokens"u8)) + { + promptTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("completion_tokens"u8)) + { + completionTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("total_tokens"u8)) + { + totalTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("cached_tokens"u8)) + { + cachedTokens = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunPerModelUsage( + modelName, + invocationCount, + promptTokens, + completionTokens, + totalTokens, + cachedTokens, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunPerModelUsage)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunPerModelUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunPerModelUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunPerModelUsage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunPerModelUsage)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunPerModelUsage.cs b/src/Generated/Models/InternalEvalRunPerModelUsage.cs new file mode 100644 index 000000000..309a83606 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunPerModelUsage.cs @@ -0,0 +1,53 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunPerModelUsage + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunPerModelUsage(string modelName, int invocationCount, int promptTokens, int completionTokens, int totalTokens, int cachedTokens) + { + ModelName = modelName; + InvocationCount = invocationCount; + PromptTokens = promptTokens; + CompletionTokens = completionTokens; + TotalTokens = totalTokens; + CachedTokens = cachedTokens; + } + + internal InternalEvalRunPerModelUsage(string modelName, int invocationCount, int promptTokens, int completionTokens, int totalTokens, int cachedTokens, IDictionary additionalBinaryDataProperties) + { + ModelName = modelName; + InvocationCount = invocationCount; + PromptTokens = promptTokens; + CompletionTokens = completionTokens; + TotalTokens = totalTokens; + CachedTokens = cachedTokens; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string ModelName { get; } + + public int InvocationCount { get; } + + public int PromptTokens { get; } + + public int CompletionTokens { get; } + + public int TotalTokens { get; } + + public int CachedTokens { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunPerTestingCriteriaResult.Serialization.cs b/src/Generated/Models/InternalEvalRunPerTestingCriteriaResult.Serialization.cs new file mode 100644 index 000000000..a051d6d59 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunPerTestingCriteriaResult.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunPerTestingCriteriaResult : IJsonModel + { + internal InternalEvalRunPerTestingCriteriaResult() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunPerTestingCriteriaResult)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("testing_criteria") != true) + { + writer.WritePropertyName("testing_criteria"u8); + writer.WriteStringValue(TestingCriteria); + } + if (_additionalBinaryDataProperties?.ContainsKey("passed") != true) + { + writer.WritePropertyName("passed"u8); + writer.WriteNumberValue(Passed); + } + if (_additionalBinaryDataProperties?.ContainsKey("failed") != true) + { + writer.WritePropertyName("failed"u8); + writer.WriteNumberValue(Failed); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunPerTestingCriteriaResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunPerTestingCriteriaResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunPerTestingCriteriaResult)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunPerTestingCriteriaResult(document.RootElement, options); + } + + internal static InternalEvalRunPerTestingCriteriaResult DeserializeInternalEvalRunPerTestingCriteriaResult(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string testingCriteria = default; + int passed = default; + int failed = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("testing_criteria"u8)) + { + testingCriteria = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("passed"u8)) + { + passed = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("failed"u8)) + { + failed = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunPerTestingCriteriaResult(testingCriteria, passed, failed, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunPerTestingCriteriaResult)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunPerTestingCriteriaResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunPerTestingCriteriaResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunPerTestingCriteriaResult(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunPerTestingCriteriaResult)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunPerTestingCriteriaResult.cs b/src/Generated/Models/InternalEvalRunPerTestingCriteriaResult.cs new file mode 100644 index 000000000..b7a290d10 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunPerTestingCriteriaResult.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunPerTestingCriteriaResult + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunPerTestingCriteriaResult(string testingCriteria, int passed, int failed) + { + TestingCriteria = testingCriteria; + Passed = passed; + Failed = failed; + } + + internal InternalEvalRunPerTestingCriteriaResult(string testingCriteria, int passed, int failed, IDictionary additionalBinaryDataProperties) + { + TestingCriteria = testingCriteria; + Passed = passed; + Failed = failed; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string TestingCriteria { get; } + + public int Passed { get; } + + public int Failed { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunResponsesDataContentSource.Serialization.cs b/src/Generated/Models/InternalEvalRunResponsesDataContentSource.Serialization.cs new file mode 100644 index 000000000..98e65d489 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunResponsesDataContentSource.Serialization.cs @@ -0,0 +1,341 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Chat; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunResponsesDataContentSource : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunResponsesDataContentSource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (Optional.IsDefined(InstructionsSearch) && _additionalBinaryDataProperties?.ContainsKey("instructions_search") != true) + { + writer.WritePropertyName("instructions_search"u8); + writer.WriteStringValue(InstructionsSearch); + } + if (Optional.IsDefined(CreatedAfter) && _additionalBinaryDataProperties?.ContainsKey("created_after") != true) + { + writer.WritePropertyName("created_after"u8); + writer.WriteNumberValue(CreatedAfter.Value); + } + if (Optional.IsDefined(CreatedBefore) && _additionalBinaryDataProperties?.ContainsKey("created_before") != true) + { + writer.WritePropertyName("created_before"u8); + writer.WriteNumberValue(CreatedBefore.Value); + } + if (Optional.IsDefined(ReasoningEffort) && _additionalBinaryDataProperties?.ContainsKey("reasoning_effort") != true) + { + writer.WritePropertyName("reasoning_effort"u8); + writer.WriteStringValue(ReasoningEffort.Value.ToString()); + } + if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) + { + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); + } + if (Optional.IsDefined(TopP) && _additionalBinaryDataProperties?.ContainsKey("top_p") != true) + { + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP.Value); + } + if (Optional.IsCollectionDefined(Users) && _additionalBinaryDataProperties?.ContainsKey("users") != true) + { + writer.WritePropertyName("users"u8); + writer.WriteStartArray(); + foreach (string item in Users) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (string item in Tools) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + } + + InternalEvalRunResponsesDataContentSource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalRunResponsesDataContentSource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunResponsesDataContentSource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunResponsesDataContentSource(document.RootElement, options); + } + + internal static InternalEvalRunResponsesDataContentSource DeserializeInternalEvalRunResponsesDataContentSource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataContentSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IDictionary metadata = default; + string model = default; + string instructionsSearch = default; + int? createdAfter = default; + int? createdBefore = default; + ChatReasoningEffortLevel? reasoningEffort = default; + float? temperature = default; + float? topP = default; + IList users = default; + IList tools = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataContentSourceType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + if (prop.NameEquals("model"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + model = null; + continue; + } + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("instructions_search"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + instructionsSearch = null; + continue; + } + instructionsSearch = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_after"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + createdAfter = null; + continue; + } + createdAfter = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("created_before"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + createdBefore = null; + continue; + } + createdBefore = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("reasoning_effort"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reasoningEffort = null; + continue; + } + reasoningEffort = new ChatReasoningEffortLevel(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("temperature"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + temperature = null; + continue; + } + temperature = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("top_p"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + topP = null; + continue; + } + topP = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("users"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + users = array; + continue; + } + if (prop.NameEquals("tools"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + tools = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunResponsesDataContentSource( + kind, + additionalBinaryDataProperties, + metadata ?? new ChangeTrackingDictionary(), + model, + instructionsSearch, + createdAfter, + createdBefore, + reasoningEffort, + temperature, + topP, + users ?? new ChangeTrackingList(), + tools ?? new ChangeTrackingList()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunResponsesDataContentSource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunResponsesDataContentSource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalRunResponsesDataContentSource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunResponsesDataContentSource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunResponsesDataContentSource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunResponsesDataContentSource.cs b/src/Generated/Models/InternalEvalRunResponsesDataContentSource.cs new file mode 100644 index 000000000..3221933a9 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunResponsesDataContentSource.cs @@ -0,0 +1,53 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Chat; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunResponsesDataContentSource : InternalEvalRunDataContentSource + { + public InternalEvalRunResponsesDataContentSource() : this(InternalEvalRunDataContentSourceType.Responses, null, null, null, null, default, default, default, default, default, null, null) + { + } + + internal InternalEvalRunResponsesDataContentSource(InternalEvalRunDataContentSourceType kind, IDictionary additionalBinaryDataProperties, IDictionary metadata, string model, string instructionsSearch, int? createdAfter, int? createdBefore, ChatReasoningEffortLevel? reasoningEffort, float? temperature, float? topP, IList users, IList tools) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Model = model; + InstructionsSearch = instructionsSearch; + CreatedAfter = createdAfter; + CreatedBefore = createdBefore; + ReasoningEffort = reasoningEffort; + Temperature = temperature; + TopP = topP; + Users = users ?? new ChangeTrackingList(); + Tools = tools ?? new ChangeTrackingList(); + } + + public IDictionary Metadata { get; } + + public string Model { get; set; } + + public string InstructionsSearch { get; set; } + + public int? CreatedAfter { get; set; } + + public int? CreatedBefore { get; set; } + + public ChatReasoningEffortLevel? ReasoningEffort { get; set; } + + public float? Temperature { get; set; } + + public float? TopP { get; set; } + + public IList Users { get; set; } + + public IList Tools { get; set; } + } +} diff --git a/src/Generated/Models/InternalEvalRunResultCounts.Serialization.cs b/src/Generated/Models/InternalEvalRunResultCounts.Serialization.cs new file mode 100644 index 000000000..ed4d4d4ec --- /dev/null +++ b/src/Generated/Models/InternalEvalRunResultCounts.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunResultCounts : IJsonModel + { + internal InternalEvalRunResultCounts() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunResultCounts)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("total") != true) + { + writer.WritePropertyName("total"u8); + writer.WriteNumberValue(Total); + } + if (_additionalBinaryDataProperties?.ContainsKey("errored") != true) + { + writer.WritePropertyName("errored"u8); + writer.WriteNumberValue(Errored); + } + if (_additionalBinaryDataProperties?.ContainsKey("failed") != true) + { + writer.WritePropertyName("failed"u8); + writer.WriteNumberValue(Failed); + } + if (_additionalBinaryDataProperties?.ContainsKey("passed") != true) + { + writer.WritePropertyName("passed"u8); + writer.WriteNumberValue(Passed); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalEvalRunResultCounts IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunResultCounts JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunResultCounts)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunResultCounts(document.RootElement, options); + } + + internal static InternalEvalRunResultCounts DeserializeInternalEvalRunResultCounts(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int total = default; + int errored = default; + int failed = default; + int passed = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("total"u8)) + { + total = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("errored"u8)) + { + errored = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("failed"u8)) + { + failed = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("passed"u8)) + { + passed = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunResultCounts(total, errored, failed, passed, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunResultCounts)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunResultCounts IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalEvalRunResultCounts PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunResultCounts(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunResultCounts)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunResultCounts.cs b/src/Generated/Models/InternalEvalRunResultCounts.cs new file mode 100644 index 000000000..ca0c87173 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunResultCounts.cs @@ -0,0 +1,45 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunResultCounts + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalEvalRunResultCounts(int total, int errored, int failed, int passed) + { + Total = total; + Errored = errored; + Failed = failed; + Passed = passed; + } + + internal InternalEvalRunResultCounts(int total, int errored, int failed, int passed, IDictionary additionalBinaryDataProperties) + { + Total = total; + Errored = errored; + Failed = failed; + Passed = passed; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public int Total { get; } + + public int Errored { get; } + + public int Failed { get; } + + public int Passed { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalEvalRunStoredCompletionsDataContentSource.Serialization.cs b/src/Generated/Models/InternalEvalRunStoredCompletionsDataContentSource.Serialization.cs new file mode 100644 index 000000000..81b8ec22f --- /dev/null +++ b/src/Generated/Models/InternalEvalRunStoredCompletionsDataContentSource.Serialization.cs @@ -0,0 +1,225 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunStoredCompletionsDataContentSource : IJsonModel + { + internal InternalEvalRunStoredCompletionsDataContentSource() : this(InternalEvalRunDataContentSourceType.StoredCompletions, null, null, null, default, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunStoredCompletionsDataContentSource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + if (Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"u8); + } + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (Optional.IsDefined(CreatedAfter) && _additionalBinaryDataProperties?.ContainsKey("created_after") != true) + { + writer.WritePropertyName("created_after"u8); + writer.WriteNumberValue(CreatedAfter.Value); + } + if (Optional.IsDefined(CreatedBefore) && _additionalBinaryDataProperties?.ContainsKey("created_before") != true) + { + writer.WritePropertyName("created_before"u8); + writer.WriteNumberValue(CreatedBefore.Value); + } + if (Optional.IsDefined(Limit) && _additionalBinaryDataProperties?.ContainsKey("limit") != true) + { + writer.WritePropertyName("limit"u8); + writer.WriteNumberValue(Limit.Value); + } + } + + InternalEvalRunStoredCompletionsDataContentSource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalRunStoredCompletionsDataContentSource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunStoredCompletionsDataContentSource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunStoredCompletionsDataContentSource(document.RootElement, options); + } + + internal static InternalEvalRunStoredCompletionsDataContentSource DeserializeInternalEvalRunStoredCompletionsDataContentSource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataContentSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IDictionary metadata = default; + string model = default; + int? createdAfter = default; + int? createdBefore = default; + int? limit = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataContentSourceType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + metadata = new ChangeTrackingDictionary(); + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + if (prop.NameEquals("model"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + model = null; + continue; + } + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_after"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + createdAfter = null; + continue; + } + createdAfter = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("created_before"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + createdBefore = null; + continue; + } + createdBefore = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("limit"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + limit = null; + continue; + } + limit = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalRunStoredCompletionsDataContentSource( + kind, + additionalBinaryDataProperties, + metadata, + model, + createdAfter, + createdBefore, + limit); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunStoredCompletionsDataContentSource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunStoredCompletionsDataContentSource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalRunStoredCompletionsDataContentSource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunStoredCompletionsDataContentSource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunStoredCompletionsDataContentSource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalRunStoredCompletionsDataContentSource.cs b/src/Generated/Models/InternalEvalRunStoredCompletionsDataContentSource.cs new file mode 100644 index 000000000..bd8b66f78 --- /dev/null +++ b/src/Generated/Models/InternalEvalRunStoredCompletionsDataContentSource.cs @@ -0,0 +1,39 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalRunStoredCompletionsDataContentSource : InternalEvalRunDataContentSource + { + public InternalEvalRunStoredCompletionsDataContentSource(IDictionary metadata) : base(InternalEvalRunDataContentSourceType.StoredCompletions) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + } + + internal InternalEvalRunStoredCompletionsDataContentSource(InternalEvalRunDataContentSourceType kind, IDictionary additionalBinaryDataProperties, IDictionary metadata, string model, int? createdAfter, int? createdBefore, int? limit) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Model = model; + CreatedAfter = createdAfter; + CreatedBefore = createdBefore; + Limit = limit; + } + + public IDictionary Metadata { get; } + + public string Model { get; set; } + + public int? CreatedAfter { get; set; } + + public int? CreatedBefore { get; set; } + + public int? Limit { get; set; } + } +} diff --git a/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigParams.Serialization.cs b/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigParams.Serialization.cs new file mode 100644 index 000000000..ef03c0035 --- /dev/null +++ b/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigParams.Serialization.cs @@ -0,0 +1,149 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalStoredCompletionsDataSourceConfigParams : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalStoredCompletionsDataSourceConfigParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + } + + InternalEvalStoredCompletionsDataSourceConfigParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalStoredCompletionsDataSourceConfigParams)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalStoredCompletionsDataSourceConfigParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalStoredCompletionsDataSourceConfigParams(document.RootElement, options); + } + + internal static InternalEvalStoredCompletionsDataSourceConfigParams DeserializeInternalEvalStoredCompletionsDataSourceConfigParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalDataSourceConfigType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IDictionary metadata = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalDataSourceConfigType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + metadata = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalStoredCompletionsDataSourceConfigParams(kind, additionalBinaryDataProperties, metadata ?? new ChangeTrackingDictionary()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalStoredCompletionsDataSourceConfigParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalStoredCompletionsDataSourceConfigParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalStoredCompletionsDataSourceConfigParams)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalStoredCompletionsDataSourceConfigParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalStoredCompletionsDataSourceConfigParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigParams.cs b/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigParams.cs new file mode 100644 index 000000000..e44a3a625 --- /dev/null +++ b/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigParams.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalStoredCompletionsDataSourceConfigParams : InternalEvalDataSourceConfigParams + { + public InternalEvalStoredCompletionsDataSourceConfigParams() : this(InternalEvalDataSourceConfigType.StoredCompletions, null, null) + { + } + + internal InternalEvalStoredCompletionsDataSourceConfigParams(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties, IDictionary metadata) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + } + + public IDictionary Metadata { get; } + } +} diff --git a/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigResource.Serialization.cs b/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigResource.Serialization.cs new file mode 100644 index 000000000..e95c29834 --- /dev/null +++ b/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigResource.Serialization.cs @@ -0,0 +1,195 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalStoredCompletionsDataSourceConfigResource : IJsonModel + { + internal InternalEvalStoredCompletionsDataSourceConfigResource() : this(InternalEvalDataSourceConfigType.StoredCompletions, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalStoredCompletionsDataSourceConfigResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + if (Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("schema") != true) + { + writer.WritePropertyName("schema"u8); + writer.WriteStartObject(); + foreach (var item in Schema) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + } + + InternalEvalStoredCompletionsDataSourceConfigResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalEvalStoredCompletionsDataSourceConfigResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalStoredCompletionsDataSourceConfigResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalStoredCompletionsDataSourceConfigResource(document.RootElement, options); + } + + internal static InternalEvalStoredCompletionsDataSourceConfigResource DeserializeInternalEvalStoredCompletionsDataSourceConfigResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalDataSourceConfigType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IDictionary metadata = default; + IDictionary schema = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalDataSourceConfigType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + metadata = new ChangeTrackingDictionary(); + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + if (prop.NameEquals("schema"u8)) + { + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + schema = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalEvalStoredCompletionsDataSourceConfigResource(kind, additionalBinaryDataProperties, metadata, schema); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalStoredCompletionsDataSourceConfigResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalStoredCompletionsDataSourceConfigResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalEvalStoredCompletionsDataSourceConfigResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalStoredCompletionsDataSourceConfigResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalStoredCompletionsDataSourceConfigResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigResource.cs b/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigResource.cs new file mode 100644 index 000000000..65f6f0c80 --- /dev/null +++ b/src/Generated/Models/InternalEvalStoredCompletionsDataSourceConfigResource.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalEvalStoredCompletionsDataSourceConfigResource : InternalEvalDataSourceConfigResource + { + internal InternalEvalStoredCompletionsDataSourceConfigResource(IDictionary metadata, IDictionary schema) : base(InternalEvalDataSourceConfigType.StoredCompletions) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Schema = schema ?? new ChangeTrackingDictionary(); + } + + internal InternalEvalStoredCompletionsDataSourceConfigResource(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties, IDictionary metadata, IDictionary schema) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Schema = schema ?? new ChangeTrackingDictionary(); + } + + public IDictionary Metadata { get; } + + public IDictionary Schema { get; } + } +} diff --git a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs deleted file mode 100644 index 22233c52c..000000000 --- a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.Serialization.cs +++ /dev/null @@ -1,141 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.VectorStores -{ - [PersistableModelProxy(typeof(InternalUnknownFileChunkingStrategyRequestParamProxy))] - internal abstract partial class InternalFileChunkingStrategyRequestParam : IJsonModel - { - internal InternalFileChunkingStrategyRequestParam() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFileChunkingStrategyRequestParam)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalFileChunkingStrategyRequestParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalFileChunkingStrategyRequestParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFileChunkingStrategyRequestParam)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalFileChunkingStrategyRequestParam(document.RootElement, options); - } - - internal static InternalFileChunkingStrategyRequestParam DeserializeInternalFileChunkingStrategyRequestParam(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - if (element.TryGetProperty("type"u8, out JsonElement discriminator)) - { - switch (discriminator.GetString()) - { - case "auto": - return InternalAutoChunkingStrategyRequestParam.DeserializeInternalAutoChunkingStrategyRequestParam(element, options); - case "static": - return InternalStaticChunkingStrategyRequestParam.DeserializeInternalStaticChunkingStrategyRequestParam(element, options); - } - } - return InternalUnknownFileChunkingStrategyRequestParamProxy.DeserializeInternalUnknownFileChunkingStrategyRequestParamProxy(element, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalFileChunkingStrategyRequestParam)} does not support writing '{options.Format}' format."); - } - } - - InternalFileChunkingStrategyRequestParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalFileChunkingStrategyRequestParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalFileChunkingStrategyRequestParam(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalFileChunkingStrategyRequestParam)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFileChunkingStrategyRequestParam internalFileChunkingStrategyRequestParam) - { - if (internalFileChunkingStrategyRequestParam == null) - { - return null; - } - return BinaryContent.Create(internalFileChunkingStrategyRequestParam, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFileChunkingStrategyRequestParam(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFileChunkingStrategyRequestParam(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.cs b/src/Generated/Models/InternalFileChunkingStrategyRequestParam.cs deleted file mode 100644 index 1dc6d0ab5..000000000 --- a/src/Generated/Models/InternalFileChunkingStrategyRequestParam.cs +++ /dev/null @@ -1,33 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.VectorStores -{ - internal abstract partial class InternalFileChunkingStrategyRequestParam - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected InternalFileChunkingStrategyRequestParam(string @type) - { - Type = @type; - } - - internal InternalFileChunkingStrategyRequestParam(string @type, IDictionary additionalBinaryDataProperties) - { - Type = @type; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - internal string Type { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalFileSearchTool.Serialization.cs b/src/Generated/Models/InternalFileSearchTool.Serialization.cs new file mode 100644 index 000000000..fb6d3fd6f --- /dev/null +++ b/src/Generated/Models/InternalFileSearchTool.Serialization.cs @@ -0,0 +1,200 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFileSearchTool : IJsonModel + { + internal InternalFileSearchTool() : this(InternalToolType.FileSearch, null, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFileSearchTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("vector_store_ids") != true) + { + writer.WritePropertyName("vector_store_ids"u8); + writer.WriteStartArray(); + foreach (string item in VectorStoreIds) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(MaxNumResults) && _additionalBinaryDataProperties?.ContainsKey("max_num_results") != true) + { + writer.WritePropertyName("max_num_results"u8); + writer.WriteNumberValue(MaxNumResults.Value); + } + if (Optional.IsDefined(RankingOptions) && _additionalBinaryDataProperties?.ContainsKey("ranking_options") != true) + { + writer.WritePropertyName("ranking_options"u8); + writer.WriteObjectValue(RankingOptions, options); + } + if (Optional.IsDefined(Filters) && _additionalBinaryDataProperties?.ContainsKey("filters") != true) + { + writer.WritePropertyName("filters"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Filters); +#else + using (JsonDocument document = JsonDocument.Parse(Filters)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalFileSearchTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalFileSearchTool)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFileSearchTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFileSearchTool(document.RootElement, options); + } + + internal static InternalFileSearchTool DeserializeInternalFileSearchTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IList vectorStoreIds = default; + int? maxNumResults = default; + FileSearchToolRankingOptions rankingOptions = default; + BinaryData filters = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("vector_store_ids"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + vectorStoreIds = array; + continue; + } + if (prop.NameEquals("max_num_results"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + maxNumResults = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("ranking_options"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + rankingOptions = FileSearchToolRankingOptions.DeserializeFileSearchToolRankingOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("filters"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + filters = null; + continue; + } + filters = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFileSearchTool( + kind, + additionalBinaryDataProperties, + vectorStoreIds, + maxNumResults, + rankingOptions, + filters); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFileSearchTool)} does not support writing '{options.Format}' format."); + } + } + + InternalFileSearchTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalFileSearchTool)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFileSearchTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFileSearchTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFileSearchTool.cs b/src/Generated/Models/InternalFileSearchTool.cs new file mode 100644 index 000000000..8822a0155 --- /dev/null +++ b/src/Generated/Models/InternalFileSearchTool.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFileSearchTool : ResponseTool + { + public InternalFileSearchTool(IEnumerable vectorStoreIds) : base(InternalToolType.FileSearch) + { + Argument.AssertNotNull(vectorStoreIds, nameof(vectorStoreIds)); + + VectorStoreIds = vectorStoreIds.ToList(); + } + + internal InternalFileSearchTool(InternalToolType kind, IDictionary additionalBinaryDataProperties, IList vectorStoreIds, int? maxNumResults, FileSearchToolRankingOptions rankingOptions, BinaryData filters) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + VectorStoreIds = vectorStoreIds ?? new ChangeTrackingList(); + MaxNumResults = maxNumResults; + RankingOptions = rankingOptions; + Filters = filters; + } + + public IList VectorStoreIds { get; } + + public int? MaxNumResults { get; set; } + + public FileSearchToolRankingOptions RankingOptions { get; set; } + + public BinaryData Filters { get; set; } + } +} diff --git a/src/Generated/Models/InternalFileSearchToolCallItemParam.Serialization.cs b/src/Generated/Models/InternalFileSearchToolCallItemParam.Serialization.cs new file mode 100644 index 000000000..00a89276f --- /dev/null +++ b/src/Generated/Models/InternalFileSearchToolCallItemParam.Serialization.cs @@ -0,0 +1,166 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFileSearchToolCallItemParam : IJsonModel + { + internal InternalFileSearchToolCallItemParam() : this(InternalItemType.FileSearchCall, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFileSearchToolCallItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("queries") != true) + { + writer.WritePropertyName("queries"u8); + writer.WriteStartArray(); + foreach (string item in Queries) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (Optional.IsCollectionDefined(Results) && _additionalBinaryDataProperties?.ContainsKey("results") != true) + { + writer.WritePropertyName("results"u8); + writer.WriteStartArray(); + foreach (FileSearchCallResult item in Results) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalFileSearchToolCallItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalFileSearchToolCallItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFileSearchToolCallItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFileSearchToolCallItemParam(document.RootElement, options); + } + + internal static InternalFileSearchToolCallItemParam DeserializeInternalFileSearchToolCallItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IList queries = default; + IList results = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("queries"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + queries = array; + continue; + } + if (prop.NameEquals("results"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(FileSearchCallResult.DeserializeFileSearchCallResult(item, options)); + } + results = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFileSearchToolCallItemParam(kind, additionalBinaryDataProperties, queries, results ?? new ChangeTrackingList()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFileSearchToolCallItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalFileSearchToolCallItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalFileSearchToolCallItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFileSearchToolCallItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFileSearchToolCallItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFileSearchToolCallItemParam.cs b/src/Generated/Models/InternalFileSearchToolCallItemParam.cs new file mode 100644 index 000000000..d4268f507 --- /dev/null +++ b/src/Generated/Models/InternalFileSearchToolCallItemParam.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFileSearchToolCallItemParam : InternalItemParam + { + public InternalFileSearchToolCallItemParam(IEnumerable queries) : base(InternalItemType.FileSearchCall) + { + Argument.AssertNotNull(queries, nameof(queries)); + + Queries = queries.ToList(); + Results = new ChangeTrackingList(); + } + + internal InternalFileSearchToolCallItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, IList queries, IList results) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Queries = queries ?? new ChangeTrackingList(); + Results = results ?? new ChangeTrackingList(); + } + + public IList Queries { get; } + + public IList Results { get; set; } + } +} diff --git a/src/Generated/Models/InternalFileUploadOptions.Serialization.cs b/src/Generated/Models/InternalFileUploadOptions.Serialization.cs index bc3e03a85..c4cbeaff3 100644 --- a/src/Generated/Models/InternalFileUploadOptions.Serialization.cs +++ b/src/Generated/Models/InternalFileUploadOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Text.Json; using OpenAI; @@ -21,6 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -45,6 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("purpose"u8); writer.WriteStringValue(Purpose.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -68,6 +70,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalFileUploadOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalFileUploadOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static InternalFileUploadOptions DeserializeInternalFileUploadOptions(J purpose = new FileUploadPurpose(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalFileUploadOptions(@file, purpose, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static InternalFileUploadOptions DeserializeInternalFileUploadOptions(J BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalFileUploadOptions)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalFileUploadOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalFileUploadOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalFileUploadOptions PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFileUploadOptions internalFileUploadOptions) - { - if (internalFileUploadOptions == null) - { - return null; - } - return BinaryContent.Create(internalFileUploadOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFileUploadOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFileUploadOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs deleted file mode 100644 index 72fdcb1f9..000000000 --- a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.Serialization.cs +++ /dev/null @@ -1,263 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; -using OpenAI.Chat; - -namespace OpenAI.FineTuning -{ - internal partial class InternalFineTuneChatCompletionRequestAssistantMessage : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFineTuneChatCompletionRequestAssistantMessage)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(Weight) && _additionalBinaryDataProperties?.ContainsKey("weight") != true) - { - writer.WritePropertyName("weight"u8); - writer.WriteStringValue(Weight.Value.ToString()); - } - if (Optional.IsDefined(Refusal) && _additionalBinaryDataProperties?.ContainsKey("refusal") != true) - { - writer.WritePropertyName("refusal"u8); - writer.WriteStringValue(Refusal); - } - if (_additionalBinaryDataProperties?.ContainsKey("role") != true) - { - writer.WritePropertyName("role"u8); - writer.WriteStringValue(Role.ToString()); - } - if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) - { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - } - if (Optional.IsDefined(Audio) && _additionalBinaryDataProperties?.ContainsKey("audio") != true) - { - writer.WritePropertyName("audio"u8); - writer.WriteObjectValue(Audio, options); - } - if (Optional.IsCollectionDefined(ToolCalls) && _additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) - { - writer.WritePropertyName("tool_calls"u8); - writer.WriteStartArray(); - foreach (ChatToolCall item in ToolCalls) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(FunctionCall) && _additionalBinaryDataProperties?.ContainsKey("function_call") != true) - { - writer.WritePropertyName("function_call"u8); - writer.WriteObjectValue(FunctionCall, options); - } - if (Optional.IsDefined(Content) && Content.IsInnerCollectionDefined() && _additionalBinaryDataProperties?.ContainsKey("content") != true) - { - writer.WritePropertyName("content"u8); - writer.WriteObjectValue(Content, options); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalFineTuneChatCompletionRequestAssistantMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalFineTuneChatCompletionRequestAssistantMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFineTuneChatCompletionRequestAssistantMessage)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalFineTuneChatCompletionRequestAssistantMessage(document.RootElement, options); - } - - internal static InternalFineTuneChatCompletionRequestAssistantMessage DeserializeInternalFineTuneChatCompletionRequestAssistantMessage(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalFineTuneChatCompletionRequestAssistantMessageWeight? weight = default; - string refusal = default; - InternalFineTuneChatCompletionRequestAssistantMessageRole role = default; - string name = default; - ChatOutputAudioReference audio = default; - IList toolCalls = default; - ChatFunctionCall functionCall = default; - ChatMessageContent content = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("weight"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - weight = new InternalFineTuneChatCompletionRequestAssistantMessageWeight(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("refusal"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - refusal = null; - continue; - } - refusal = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("role"u8)) - { - role = new InternalFineTuneChatCompletionRequestAssistantMessageRole(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("name"u8)) - { - name = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("audio"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - audio = null; - continue; - } - audio = ChatOutputAudioReference.DeserializeChatOutputAudioReference(prop.Value, options); - continue; - } - if (prop.NameEquals("tool_calls"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(ChatToolCall.DeserializeChatToolCall(item, options)); - } - toolCalls = array; - continue; - } - if (prop.NameEquals("function_call"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - functionCall = null; - continue; - } - functionCall = ChatFunctionCall.DeserializeChatFunctionCall(prop.Value, options); - continue; - } - if (prop.NameEquals("content"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - content = null; - continue; - } - content = ChatMessageContent.DeserializeChatMessageContent(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalFineTuneChatCompletionRequestAssistantMessage( - weight, - refusal, - role, - name, - audio, - toolCalls ?? new ChangeTrackingList(), - functionCall, - content, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalFineTuneChatCompletionRequestAssistantMessage)} does not support writing '{options.Format}' format."); - } - } - - InternalFineTuneChatCompletionRequestAssistantMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalFineTuneChatCompletionRequestAssistantMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalFineTuneChatCompletionRequestAssistantMessage(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalFineTuneChatCompletionRequestAssistantMessage)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFineTuneChatCompletionRequestAssistantMessage internalFineTuneChatCompletionRequestAssistantMessage) - { - if (internalFineTuneChatCompletionRequestAssistantMessage == null) - { - return null; - } - return BinaryContent.Create(internalFineTuneChatCompletionRequestAssistantMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFineTuneChatCompletionRequestAssistantMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFineTuneChatCompletionRequestAssistantMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.cs b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.cs deleted file mode 100644 index 7d2fc5f4e..000000000 --- a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessage.cs +++ /dev/null @@ -1,55 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; -using OpenAI.Chat; - -namespace OpenAI.FineTuning -{ - internal partial class InternalFineTuneChatCompletionRequestAssistantMessage - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalFineTuneChatCompletionRequestAssistantMessage() - { - ToolCalls = new ChangeTrackingList(); - } - - internal InternalFineTuneChatCompletionRequestAssistantMessage(InternalFineTuneChatCompletionRequestAssistantMessageWeight? weight, string refusal, InternalFineTuneChatCompletionRequestAssistantMessageRole role, string name, ChatOutputAudioReference audio, IList toolCalls, ChatFunctionCall functionCall, ChatMessageContent content, IDictionary additionalBinaryDataProperties) - { - Weight = weight; - Refusal = refusal; - Role = role; - Name = name; - Audio = audio; - ToolCalls = toolCalls; - FunctionCall = functionCall; - // Plugin customization: ensure initialization of collection - Content = content ?? new ChatMessageContent(); - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalFineTuneChatCompletionRequestAssistantMessageWeight? Weight { get; set; } - - public string Refusal { get; set; } - - public InternalFineTuneChatCompletionRequestAssistantMessageRole Role { get; } = "assistant"; - - public string Name { get; set; } - - public ChatOutputAudioReference Audio { get; set; } - - public IList ToolCalls { get; } - - public ChatFunctionCall FunctionCall { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageRole.cs b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageRole.cs deleted file mode 100644 index c5ed673aa..000000000 --- a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageRole.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalFineTuneChatCompletionRequestAssistantMessageRole : IEquatable - { - private readonly string _value; - private const string AssistantValue = "assistant"; - - public InternalFineTuneChatCompletionRequestAssistantMessageRole(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalFineTuneChatCompletionRequestAssistantMessageRole Assistant { get; } = new InternalFineTuneChatCompletionRequestAssistantMessageRole(AssistantValue); - - public static bool operator ==(InternalFineTuneChatCompletionRequestAssistantMessageRole left, InternalFineTuneChatCompletionRequestAssistantMessageRole right) => left.Equals(right); - - public static bool operator !=(InternalFineTuneChatCompletionRequestAssistantMessageRole left, InternalFineTuneChatCompletionRequestAssistantMessageRole right) => !left.Equals(right); - - public static implicit operator InternalFineTuneChatCompletionRequestAssistantMessageRole(string value) => new InternalFineTuneChatCompletionRequestAssistantMessageRole(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalFineTuneChatCompletionRequestAssistantMessageRole other && Equals(other); - - public bool Equals(InternalFineTuneChatCompletionRequestAssistantMessageRole 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/InternalFineTuneChatCompletionRequestAssistantMessageWeight.cs b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageWeight.cs index a4ebe16fa..aa6ddd5cc 100644 --- a/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageWeight.cs +++ b/src/Generated/Models/InternalFineTuneChatCompletionRequestAssistantMessageWeight.cs @@ -21,9 +21,9 @@ public InternalFineTuneChatCompletionRequestAssistantMessageWeight(string value) _value = value; } - public static InternalFineTuneChatCompletionRequestAssistantMessageWeight _0 { get; } = new InternalFineTuneChatCompletionRequestAssistantMessageWeight(_0Value); + internal static InternalFineTuneChatCompletionRequestAssistantMessageWeight _0 { get; } = new InternalFineTuneChatCompletionRequestAssistantMessageWeight(_0Value); - public static InternalFineTuneChatCompletionRequestAssistantMessageWeight _1 { get; } = new InternalFineTuneChatCompletionRequestAssistantMessageWeight(_1Value); + internal static InternalFineTuneChatCompletionRequestAssistantMessageWeight _1 { get; } = new InternalFineTuneChatCompletionRequestAssistantMessageWeight(_1Value); public static bool operator ==(InternalFineTuneChatCompletionRequestAssistantMessageWeight left, InternalFineTuneChatCompletionRequestAssistantMessageWeight right) => left.Equals(right); diff --git a/src/Generated/Models/InternalFineTuneMethodType.cs b/src/Generated/Models/InternalFineTuneMethodType.cs new file mode 100644 index 000000000..10aa2fdf4 --- /dev/null +++ b/src/Generated/Models/InternalFineTuneMethodType.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalFineTuneMethodType : IEquatable + { + private readonly string _value; + private const string SupervisedValue = "supervised"; + private const string DpoValue = "dpo"; + private const string ReinforcementValue = "reinforcement"; + + public InternalFineTuneMethodType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalFineTuneMethodType Supervised { get; } = new InternalFineTuneMethodType(SupervisedValue); + + internal static InternalFineTuneMethodType Dpo { get; } = new InternalFineTuneMethodType(DpoValue); + + internal static InternalFineTuneMethodType Reinforcement { get; } = new InternalFineTuneMethodType(ReinforcementValue); + + public static bool operator ==(InternalFineTuneMethodType left, InternalFineTuneMethodType right) => left.Equals(right); + + public static bool operator !=(InternalFineTuneMethodType left, InternalFineTuneMethodType right) => !left.Equals(right); + + public static implicit operator InternalFineTuneMethodType(string value) => new InternalFineTuneMethodType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalFineTuneMethodType other && Equals(other); + + public bool Equals(InternalFineTuneMethodType 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/InternalFineTuneReinforcementHyperparameters.Serialization.cs b/src/Generated/Models/InternalFineTuneReinforcementHyperparameters.Serialization.cs new file mode 100644 index 000000000..6ddef2122 --- /dev/null +++ b/src/Generated/Models/InternalFineTuneReinforcementHyperparameters.Serialization.cs @@ -0,0 +1,273 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.FineTuning; + +namespace OpenAI.Graders +{ + internal partial class InternalFineTuneReinforcementHyperparameters : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuneReinforcementHyperparameters)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(BatchSize) && _additionalBinaryDataProperties?.ContainsKey("batch_size") != true) + { + writer.WritePropertyName("batch_size"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(BatchSize); +#else + using (JsonDocument document = JsonDocument.Parse(BatchSize)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(LearningRateMultiplier) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) + { + writer.WritePropertyName("learning_rate_multiplier"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(LearningRateMultiplier); +#else + using (JsonDocument document = JsonDocument.Parse(LearningRateMultiplier)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(NEpochs) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) + { + writer.WritePropertyName("n_epochs"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(NEpochs); +#else + using (JsonDocument document = JsonDocument.Parse(NEpochs)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(ReasoningEffort) && _additionalBinaryDataProperties?.ContainsKey("reasoning_effort") != true) + { + writer.WritePropertyName("reasoning_effort"u8); + writer.WriteStringValue(ReasoningEffort.Value.ToString()); + } + if (Optional.IsDefined(ComputeMultiplier) && _additionalBinaryDataProperties?.ContainsKey("compute_multiplier") != true) + { + writer.WritePropertyName("compute_multiplier"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(ComputeMultiplier); +#else + using (JsonDocument document = JsonDocument.Parse(ComputeMultiplier)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(EvalInterval) && _additionalBinaryDataProperties?.ContainsKey("eval_interval") != true) + { + writer.WritePropertyName("eval_interval"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(EvalInterval); +#else + using (JsonDocument document = JsonDocument.Parse(EvalInterval)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(EvalSamples) && _additionalBinaryDataProperties?.ContainsKey("eval_samples") != true) + { + writer.WritePropertyName("eval_samples"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(EvalSamples); +#else + using (JsonDocument document = JsonDocument.Parse(EvalSamples)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalFineTuneReinforcementHyperparameters IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuneReinforcementHyperparameters JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuneReinforcementHyperparameters)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFineTuneReinforcementHyperparameters(document.RootElement, options); + } + + internal static InternalFineTuneReinforcementHyperparameters DeserializeInternalFineTuneReinforcementHyperparameters(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData batchSize = default; + BinaryData learningRateMultiplier = default; + BinaryData nEpochs = default; + InternalFineTuneReinforcementHyperparametersReasoningEffort? reasoningEffort = default; + BinaryData computeMultiplier = default; + BinaryData evalInterval = default; + BinaryData evalSamples = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("batch_size"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + batchSize = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("learning_rate_multiplier"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("n_epochs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + nEpochs = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("reasoning_effort"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + reasoningEffort = new InternalFineTuneReinforcementHyperparametersReasoningEffort(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("compute_multiplier"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + computeMultiplier = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("eval_interval"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + evalInterval = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("eval_samples"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + evalSamples = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFineTuneReinforcementHyperparameters( + batchSize, + learningRateMultiplier, + nEpochs, + reasoningEffort, + computeMultiplier, + evalInterval, + evalSamples, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFineTuneReinforcementHyperparameters)} does not support writing '{options.Format}' format."); + } + } + + InternalFineTuneReinforcementHyperparameters IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuneReinforcementHyperparameters PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFineTuneReinforcementHyperparameters(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFineTuneReinforcementHyperparameters)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFineTuneReinforcementHyperparameters.cs b/src/Generated/Models/InternalFineTuneReinforcementHyperparameters.cs new file mode 100644 index 000000000..33960dffe --- /dev/null +++ b/src/Generated/Models/InternalFineTuneReinforcementHyperparameters.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.FineTuning; + +namespace OpenAI.Graders +{ + internal partial class InternalFineTuneReinforcementHyperparameters + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalFineTuneReinforcementHyperparameters() + { + } + + internal InternalFineTuneReinforcementHyperparameters(BinaryData batchSize, BinaryData learningRateMultiplier, BinaryData nEpochs, InternalFineTuneReinforcementHyperparametersReasoningEffort? reasoningEffort, BinaryData computeMultiplier, BinaryData evalInterval, BinaryData evalSamples, IDictionary additionalBinaryDataProperties) + { + BatchSize = batchSize; + LearningRateMultiplier = learningRateMultiplier; + NEpochs = nEpochs; + ReasoningEffort = reasoningEffort; + ComputeMultiplier = computeMultiplier; + EvalInterval = evalInterval; + EvalSamples = evalSamples; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public BinaryData BatchSize { get; set; } + + public BinaryData LearningRateMultiplier { get; set; } + + public BinaryData NEpochs { get; set; } + + internal InternalFineTuneReinforcementHyperparametersReasoningEffort? ReasoningEffort { get; set; } + + public BinaryData ComputeMultiplier { get; set; } + + public BinaryData EvalInterval { get; set; } + + public BinaryData EvalSamples { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalFineTuneReinforcementHyperparametersReasoningEffort.cs b/src/Generated/Models/InternalFineTuneReinforcementHyperparametersReasoningEffort.cs new file mode 100644 index 000000000..b9a75111e --- /dev/null +++ b/src/Generated/Models/InternalFineTuneReinforcementHyperparametersReasoningEffort.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalFineTuneReinforcementHyperparametersReasoningEffort : IEquatable + { + private readonly string _value; + private const string DefaultValue = "default"; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + + public InternalFineTuneReinforcementHyperparametersReasoningEffort(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalFineTuneReinforcementHyperparametersReasoningEffort Default { get; } = new InternalFineTuneReinforcementHyperparametersReasoningEffort(DefaultValue); + + internal static InternalFineTuneReinforcementHyperparametersReasoningEffort Low { get; } = new InternalFineTuneReinforcementHyperparametersReasoningEffort(LowValue); + + internal static InternalFineTuneReinforcementHyperparametersReasoningEffort Medium { get; } = new InternalFineTuneReinforcementHyperparametersReasoningEffort(MediumValue); + + internal static InternalFineTuneReinforcementHyperparametersReasoningEffort High { get; } = new InternalFineTuneReinforcementHyperparametersReasoningEffort(HighValue); + + public static bool operator ==(InternalFineTuneReinforcementHyperparametersReasoningEffort left, InternalFineTuneReinforcementHyperparametersReasoningEffort right) => left.Equals(right); + + public static bool operator !=(InternalFineTuneReinforcementHyperparametersReasoningEffort left, InternalFineTuneReinforcementHyperparametersReasoningEffort right) => !left.Equals(right); + + public static implicit operator InternalFineTuneReinforcementHyperparametersReasoningEffort(string value) => new InternalFineTuneReinforcementHyperparametersReasoningEffort(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalFineTuneReinforcementHyperparametersReasoningEffort other && Equals(other); + + public bool Equals(InternalFineTuneReinforcementHyperparametersReasoningEffort 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/InternalFineTuneReinforcementMethod.Serialization.cs b/src/Generated/Models/InternalFineTuneReinforcementMethod.Serialization.cs new file mode 100644 index 000000000..655c33ba4 --- /dev/null +++ b/src/Generated/Models/InternalFineTuneReinforcementMethod.Serialization.cs @@ -0,0 +1,155 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuneReinforcementMethod : IJsonModel + { + internal InternalFineTuneReinforcementMethod() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuneReinforcementMethod)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("grader") != true) + { + writer.WritePropertyName("grader"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Grader); +#else + using (JsonDocument document = JsonDocument.Parse(Grader)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(Hyperparameters) && _additionalBinaryDataProperties?.ContainsKey("hyperparameters") != true) + { + writer.WritePropertyName("hyperparameters"u8); + writer.WriteObjectValue(Hyperparameters, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalFineTuneReinforcementMethod IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuneReinforcementMethod JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuneReinforcementMethod)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFineTuneReinforcementMethod(document.RootElement, options); + } + + internal static InternalFineTuneReinforcementMethod DeserializeInternalFineTuneReinforcementMethod(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData grader = default; + InternalFineTuneReinforcementHyperparameters hyperparameters = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("grader"u8)) + { + grader = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("hyperparameters"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + hyperparameters = InternalFineTuneReinforcementHyperparameters.DeserializeInternalFineTuneReinforcementHyperparameters(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFineTuneReinforcementMethod(grader, hyperparameters, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFineTuneReinforcementMethod)} does not support writing '{options.Format}' format."); + } + } + + InternalFineTuneReinforcementMethod IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuneReinforcementMethod PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFineTuneReinforcementMethod(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFineTuneReinforcementMethod)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFineTuneReinforcementMethod.cs b/src/Generated/Models/InternalFineTuneReinforcementMethod.cs new file mode 100644 index 000000000..27b5e38eb --- /dev/null +++ b/src/Generated/Models/InternalFineTuneReinforcementMethod.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuneReinforcementMethod + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalFineTuneReinforcementMethod(BinaryData grader) + { + Argument.AssertNotNull(grader, nameof(grader)); + + Grader = grader; + } + + internal InternalFineTuneReinforcementMethod(BinaryData grader, InternalFineTuneReinforcementHyperparameters hyperparameters, IDictionary additionalBinaryDataProperties) + { + Grader = grader; + Hyperparameters = hyperparameters; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public BinaryData Grader { get; set; } + + internal InternalFineTuneReinforcementHyperparameters Hyperparameters { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.Serialization.cs b/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.Serialization.cs deleted file mode 100644 index a567cfa62..000000000 --- a/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.Serialization.cs +++ /dev/null @@ -1,193 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class InternalFineTuneSupervisedMethodHyperparameters : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFineTuneSupervisedMethodHyperparameters)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(BatchSize) && _additionalBinaryDataProperties?.ContainsKey("batch_size") != true) - { - writer.WritePropertyName("batch_size"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(BatchSize); -#else - using (JsonDocument document = JsonDocument.Parse(BatchSize)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (Optional.IsDefined(LearningRateMultiplier) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) - { - writer.WritePropertyName("learning_rate_multiplier"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(LearningRateMultiplier); -#else - using (JsonDocument document = JsonDocument.Parse(LearningRateMultiplier)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (Optional.IsDefined(NEpochs) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) - { - writer.WritePropertyName("n_epochs"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(NEpochs); -#else - using (JsonDocument document = JsonDocument.Parse(NEpochs)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalFineTuneSupervisedMethodHyperparameters IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalFineTuneSupervisedMethodHyperparameters JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFineTuneSupervisedMethodHyperparameters)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalFineTuneSupervisedMethodHyperparameters(document.RootElement, options); - } - - internal static InternalFineTuneSupervisedMethodHyperparameters DeserializeInternalFineTuneSupervisedMethodHyperparameters(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - BinaryData batchSize = default; - BinaryData learningRateMultiplier = default; - BinaryData nEpochs = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("batch_size"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - batchSize = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - if (prop.NameEquals("learning_rate_multiplier"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - if (prop.NameEquals("n_epochs"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - nEpochs = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalFineTuneSupervisedMethodHyperparameters(batchSize, learningRateMultiplier, nEpochs, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalFineTuneSupervisedMethodHyperparameters)} does not support writing '{options.Format}' format."); - } - } - - InternalFineTuneSupervisedMethodHyperparameters IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalFineTuneSupervisedMethodHyperparameters PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalFineTuneSupervisedMethodHyperparameters(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalFineTuneSupervisedMethodHyperparameters)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFineTuneSupervisedMethodHyperparameters internalFineTuneSupervisedMethodHyperparameters) - { - if (internalFineTuneSupervisedMethodHyperparameters == null) - { - return null; - } - return BinaryContent.Create(internalFineTuneSupervisedMethodHyperparameters, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFineTuneSupervisedMethodHyperparameters(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFineTuneSupervisedMethodHyperparameters(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.cs b/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.cs deleted file mode 100644 index ff74ddb36..000000000 --- a/src/Generated/Models/InternalFineTuneSupervisedMethodHyperparameters.cs +++ /dev/null @@ -1,38 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class InternalFineTuneSupervisedMethodHyperparameters - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalFineTuneSupervisedMethodHyperparameters() - { - } - - internal InternalFineTuneSupervisedMethodHyperparameters(BinaryData batchSize, BinaryData learningRateMultiplier, BinaryData nEpochs, IDictionary additionalBinaryDataProperties) - { - BatchSize = batchSize; - LearningRateMultiplier = learningRateMultiplier; - NEpochs = nEpochs; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public BinaryData BatchSize { get; set; } - - public BinaryData LearningRateMultiplier { get; set; } - - public BinaryData NEpochs { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalFineTuningCheckpointPermission.Serialization.cs b/src/Generated/Models/InternalFineTuningCheckpointPermission.Serialization.cs new file mode 100644 index 000000000..fafe704a8 --- /dev/null +++ b/src/Generated/Models/InternalFineTuningCheckpointPermission.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningCheckpointPermission : IJsonModel + { + internal InternalFineTuningCheckpointPermission() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningCheckpointPermission)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("project_id") != true) + { + writer.WritePropertyName("project_id"u8); + writer.WriteStringValue(ProjectId); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalFineTuningCheckpointPermission IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningCheckpointPermission JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningCheckpointPermission)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFineTuningCheckpointPermission(document.RootElement, options); + } + + internal static InternalFineTuningCheckpointPermission DeserializeInternalFineTuningCheckpointPermission(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string id = default; + DateTimeOffset createdAt = default; + string projectId = default; + string @object = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("project_id"u8)) + { + projectId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFineTuningCheckpointPermission(id, createdAt, projectId, @object, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFineTuningCheckpointPermission)} does not support writing '{options.Format}' format."); + } + } + + InternalFineTuningCheckpointPermission IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningCheckpointPermission PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFineTuningCheckpointPermission(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFineTuningCheckpointPermission)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFineTuningCheckpointPermission.cs b/src/Generated/Models/InternalFineTuningCheckpointPermission.cs new file mode 100644 index 000000000..a9081ad97 --- /dev/null +++ b/src/Generated/Models/InternalFineTuningCheckpointPermission.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningCheckpointPermission + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalFineTuningCheckpointPermission(string id, DateTimeOffset createdAt, string projectId) + { + Id = id; + CreatedAt = createdAt; + ProjectId = projectId; + } + + internal InternalFineTuningCheckpointPermission(string id, DateTimeOffset createdAt, string projectId, string @object, IDictionary additionalBinaryDataProperties) + { + Id = id; + CreatedAt = createdAt; + ProjectId = projectId; + Object = @object; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Id { get; } + + public DateTimeOffset CreatedAt { get; } + + public string ProjectId { get; } + + public string Object { get; } = "checkpoint.permission"; + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs b/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs index 024044fa6..e034f0c81 100644 --- a/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningIntegration.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalFineTuningIntegration IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalFineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -89,13 +92,14 @@ internal static InternalFineTuningIntegration DeserializeInternalFineTuningInteg BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalFineTuningIntegration)} does not support writing '{options.Format}' format."); } @@ -103,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalFineTuningIntegration IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalFineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -119,21 +124,5 @@ protected virtual InternalFineTuningIntegration PersistableModelCreateCore(Binar } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFineTuningIntegration internalFineTuningIntegration) - { - if (internalFineTuningIntegration == null) - { - return null; - } - return BinaryContent.Create(internalFineTuningIntegration, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFineTuningIntegration(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFineTuningIntegration(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalFineTuningIntegration.cs b/src/Generated/Models/InternalFineTuningIntegration.cs index 5da15f4af..b3d6f3972 100644 --- a/src/Generated/Models/InternalFineTuningIntegration.cs +++ b/src/Generated/Models/InternalFineTuningIntegration.cs @@ -11,18 +11,18 @@ internal abstract partial class InternalFineTuningIntegration { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalFineTuningIntegration(string @type) + private protected InternalFineTuningIntegration(InternalFineTuningIntegrationType kind) { - Type = @type; + Kind = kind; } - internal InternalFineTuningIntegration(string @type, IDictionary additionalBinaryDataProperties) + internal InternalFineTuningIntegration(InternalFineTuningIntegrationType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalFineTuningIntegrationType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalFineTuningIntegrationType.cs b/src/Generated/Models/InternalFineTuningIntegrationType.cs new file mode 100644 index 000000000..50bad24df --- /dev/null +++ b/src/Generated/Models/InternalFineTuningIntegrationType.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal readonly partial struct InternalFineTuningIntegrationType : IEquatable + { + private readonly string _value; + private const string WandbValue = "wandb"; + + public InternalFineTuningIntegrationType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalFineTuningIntegrationType Wandb { get; } = new InternalFineTuningIntegrationType(WandbValue); + + public static bool operator ==(InternalFineTuningIntegrationType left, InternalFineTuningIntegrationType right) => left.Equals(right); + + public static bool operator !=(InternalFineTuningIntegrationType left, InternalFineTuningIntegrationType right) => !left.Equals(right); + + public static implicit operator InternalFineTuningIntegrationType(string value) => new InternalFineTuningIntegrationType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalFineTuningIntegrationType other && Equals(other); + + public bool Equals(InternalFineTuningIntegrationType 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/InternalFineTuningIntegrationWandb.Serialization.cs b/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs index 147698d6c..91d210aca 100644 --- a/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs +++ b/src/Generated/Models/InternalFineTuningIntegrationWandb.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningIntegrationWandb : IJsonModel { - internal InternalFineTuningIntegrationWandb() + internal InternalFineTuningIntegrationWandb() : this(InternalFineTuningIntegrationType.Wandb, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalFineTuningIntegrationWandb IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalFineTuningIntegrationWandb)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalFineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,14 @@ internal static InternalFineTuningIntegrationWandb DeserializeInternalFineTuning { return null; } - string @type = "wandb"; + InternalFineTuningIntegrationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); FineTuningIntegrationWandbWandb wandb = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalFineTuningIntegrationType(prop.Value.GetString()); continue; } if (prop.NameEquals("wandb"u8)) @@ -73,20 +75,22 @@ internal static InternalFineTuningIntegrationWandb DeserializeInternalFineTuning wandb = FineTuningIntegrationWandbWandb.DeserializeFineTuningIntegrationWandbWandb(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalFineTuningIntegrationWandb(@type, additionalBinaryDataProperties, wandb); + return new InternalFineTuningIntegrationWandb(kind, additionalBinaryDataProperties, wandb); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalFineTuningIntegrationWandb)} does not support writing '{options.Format}' format."); } @@ -94,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalFineTuningIntegrationWandb IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalFineTuningIntegrationWandb)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalFineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +115,5 @@ protected override InternalFineTuningIntegration PersistableModelCreateCore(Bina } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFineTuningIntegrationWandb internalFineTuningIntegrationWandb) - { - if (internalFineTuningIntegrationWandb == null) - { - return null; - } - return BinaryContent.Create(internalFineTuningIntegrationWandb, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFineTuningIntegrationWandb(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFineTuningIntegrationWandb(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalFineTuningIntegrationWandb.cs b/src/Generated/Models/InternalFineTuningIntegrationWandb.cs index 1b1102d94..5a4b1e074 100644 --- a/src/Generated/Models/InternalFineTuningIntegrationWandb.cs +++ b/src/Generated/Models/InternalFineTuningIntegrationWandb.cs @@ -9,16 +9,16 @@ namespace OpenAI.FineTuning { internal partial class InternalFineTuningIntegrationWandb : InternalFineTuningIntegration { - internal InternalFineTuningIntegrationWandb(FineTuningIntegrationWandbWandb wandb) : base("wandb") + internal InternalFineTuningIntegrationWandb(FineTuningIntegrationWandbWandb wandb) : base(InternalFineTuningIntegrationType.Wandb) { Wandb = wandb; } - internal InternalFineTuningIntegrationWandb(string @type, IDictionary additionalBinaryDataProperties, FineTuningIntegrationWandbWandb wandb) : base(@type, additionalBinaryDataProperties) + internal InternalFineTuningIntegrationWandb(InternalFineTuningIntegrationType kind, IDictionary additionalBinaryDataProperties, FineTuningIntegrationWandbWandb wandb) : base(kind, additionalBinaryDataProperties) { Wandb = wandb; } - public FineTuningIntegrationWandbWandb Wandb { get; } + internal FineTuningIntegrationWandbWandb Wandb { get; } } } diff --git a/src/Generated/Models/InternalFineTuningJob.Serialization.cs b/src/Generated/Models/InternalFineTuningJob.Serialization.cs new file mode 100644 index 000000000..8b6a8c797 --- /dev/null +++ b/src/Generated/Models/InternalFineTuningJob.Serialization.cs @@ -0,0 +1,507 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningJob : IJsonModel + { + internal InternalFineTuningJob() : this(null, null, null, default, null, null, null, default, null, default, null, default, null, default, null, null, default, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningJob)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + if (Optional.IsCollectionDefined(Metadata)) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("metadata"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(JobId); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(BaseModel); + } + if (Optional.IsDefined(EstimatedFinishAt) && _additionalBinaryDataProperties?.ContainsKey("estimated_finish") != true) + { + writer.WritePropertyName("estimated_finish"u8); + writer.WriteNumberValue(EstimatedFinishAt.Value, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("validation_file") != true) + { + if (Optional.IsDefined(ValidationFileId)) + { + writer.WritePropertyName("validation_file"u8); + writer.WriteStringValue(ValidationFileId); + } + else + { + writer.WriteNull("validation_file"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("training_file") != true) + { + writer.WritePropertyName("training_file"u8); + writer.WriteStringValue(TrainingFileId); + } + if (_additionalBinaryDataProperties?.ContainsKey("result_files") != true) + { + writer.WritePropertyName("result_files"u8); + writer.WriteStartArray(); + foreach (string item in ResultFileIds) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(_object); + } + if (_additionalBinaryDataProperties?.ContainsKey("hyperparameters") != true) + { + writer.WritePropertyName("hyperparameters"u8); + writer.WriteObjectValue(Hyperparameters, options); + } + if (Optional.IsCollectionDefined(Integrations) && _additionalBinaryDataProperties?.ContainsKey("integrations") != true) + { + writer.WritePropertyName("integrations"u8); + writer.WriteStartArray(); + foreach (FineTuningIntegration item in Integrations) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("trained_tokens") != true) + { + if (Optional.IsDefined(BillableTrainedTokenCount)) + { + writer.WritePropertyName("trained_tokens"u8); + writer.WriteNumberValue(BillableTrainedTokenCount.Value); + } + else + { + writer.WriteNull("trained_tokens"u8); + } + } + if (Optional.IsDefined(UserProvidedSuffix) && _additionalBinaryDataProperties?.ContainsKey("user_provided_suffix") != true) + { + writer.WritePropertyName("user_provided_suffix"u8); + writer.WriteStringValue(UserProvidedSuffix); + } + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) + { + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("error") != true) + { + if (Optional.IsDefined(Error)) + { + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); + } + else + { + writer.WriteNull("error"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("fine_tuned_model") != true) + { + if (Optional.IsDefined(FineTunedModel)) + { + writer.WritePropertyName("fine_tuned_model"u8); + writer.WriteStringValue(FineTunedModel); + } + else + { + writer.WriteNull("fine_tuned_model"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("finished_at") != true) + { + if (Optional.IsDefined(FinishedAt)) + { + writer.WritePropertyName("finished_at"u8); + writer.WriteNumberValue(FinishedAt.Value, "U"); + } + else + { + writer.WriteNull("finished_at"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("organization_id") != true) + { + writer.WritePropertyName("organization_id"u8); + writer.WriteStringValue(OrganizationId); + } + if (_additionalBinaryDataProperties?.ContainsKey("seed") != true) + { + writer.WritePropertyName("seed"u8); + writer.WriteNumberValue(Seed); + } + if (Optional.IsDefined(Method) && _additionalBinaryDataProperties?.ContainsKey("method") != true) + { + writer.WritePropertyName("method"u8); + writer.WriteObjectValue(Method, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalFineTuningJob IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningJob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningJob)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFineTuningJob(document.RootElement, options); + } + + internal static InternalFineTuningJob DeserializeInternalFineTuningJob(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IDictionary metadata = default; + string jobId = default; + string baseModel = default; + DateTimeOffset? estimatedFinishAt = default; + string validationFileId = default; + string trainingFileId = default; + IReadOnlyList resultFileIds = default; + FineTuningStatus status = default; + string @object = default; + FineTuningHyperparameters hyperparameters = default; + IReadOnlyList integrations = default; + int? billableTrainedTokenCount = default; + string userProvidedSuffix = default; + DateTimeOffset createdAt = default; + FineTuningError error = default; + string fineTunedModel = default; + DateTimeOffset? finishedAt = default; + string organizationId = default; + int seed = default; + FineTuningTrainingMethod @method = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + metadata = new ChangeTrackingDictionary(); + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + if (prop.NameEquals("id"u8)) + { + jobId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + baseModel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("estimated_finish"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + estimatedFinishAt = null; + continue; + } + estimatedFinishAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("validation_file"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + validationFileId = null; + continue; + } + validationFileId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("training_file"u8)) + { + trainingFileId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("result_files"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + resultFileIds = array; + continue; + } + if (prop.NameEquals("status"u8)) + { + status = new FineTuningStatus(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("hyperparameters"u8)) + { + hyperparameters = FineTuningHyperparameters.DeserializeFineTuningHyperparameters(prop.Value, options); + continue; + } + if (prop.NameEquals("integrations"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(FineTuningIntegration.DeserializeFineTuningIntegration(item, options)); + } + integrations = array; + continue; + } + if (prop.NameEquals("trained_tokens"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + billableTrainedTokenCount = null; + continue; + } + billableTrainedTokenCount = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("user_provided_suffix"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + userProvidedSuffix = null; + continue; + } + userProvidedSuffix = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("error"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + error = null; + continue; + } + error = FineTuningError.DeserializeFineTuningError(prop.Value, options); + continue; + } + if (prop.NameEquals("fine_tuned_model"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + fineTunedModel = null; + continue; + } + fineTunedModel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("finished_at"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + finishedAt = null; + continue; + } + finishedAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("organization_id"u8)) + { + organizationId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("seed"u8)) + { + seed = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("method"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + @method = FineTuningTrainingMethod.DeserializeFineTuningTrainingMethod(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFineTuningJob( + metadata, + jobId, + baseModel, + estimatedFinishAt, + validationFileId, + trainingFileId, + resultFileIds, + status, + @object, + hyperparameters, + integrations ?? new ChangeTrackingList(), + billableTrainedTokenCount, + userProvidedSuffix, + createdAt, + error, + fineTunedModel, + finishedAt, + organizationId, + seed, + @method, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFineTuningJob)} does not support writing '{options.Format}' format."); + } + } + + InternalFineTuningJob IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningJob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFineTuningJob(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFineTuningJob)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFineTuningJob.cs b/src/Generated/Models/InternalFineTuningJob.cs new file mode 100644 index 000000000..ead7ec71b --- /dev/null +++ b/src/Generated/Models/InternalFineTuningJob.cs @@ -0,0 +1,71 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningJob + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalFineTuningJob(IDictionary metadata, string jobId, string baseModel, string validationFileId, string trainingFileId, IEnumerable resultFileIds, FineTuningStatus status, FineTuningHyperparameters hyperparameters, int? billableTrainedTokenCount, DateTimeOffset createdAt, FineTuningError error, string fineTunedModel, DateTimeOffset? finishedAt, string organizationId, int seed) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + JobId = jobId; + BaseModel = baseModel; + ValidationFileId = validationFileId; + TrainingFileId = trainingFileId; + ResultFileIds = resultFileIds.ToList(); + Status = status; + Hyperparameters = hyperparameters; + Integrations = new ChangeTrackingList(); + BillableTrainedTokenCount = billableTrainedTokenCount; + CreatedAt = createdAt; + Error = error; + FineTunedModel = fineTunedModel; + FinishedAt = finishedAt; + OrganizationId = organizationId; + Seed = seed; + } + + internal InternalFineTuningJob(IDictionary metadata, string jobId, string baseModel, DateTimeOffset? estimatedFinishAt, string validationFileId, string trainingFileId, IReadOnlyList resultFileIds, FineTuningStatus status, string @object, FineTuningHyperparameters hyperparameters, IReadOnlyList integrations, int? billableTrainedTokenCount, string userProvidedSuffix, DateTimeOffset createdAt, FineTuningError error, string fineTunedModel, DateTimeOffset? finishedAt, string organizationId, int seed, FineTuningTrainingMethod @method, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + JobId = jobId; + BaseModel = baseModel; + EstimatedFinishAt = estimatedFinishAt; + ValidationFileId = validationFileId; + TrainingFileId = trainingFileId; + ResultFileIds = resultFileIds ?? new ChangeTrackingList(); + Status = status; + _object = @object; + Hyperparameters = hyperparameters; + Integrations = integrations ?? new ChangeTrackingList(); + BillableTrainedTokenCount = billableTrainedTokenCount; + UserProvidedSuffix = userProvidedSuffix; + CreatedAt = createdAt; + Error = error; + FineTunedModel = fineTunedModel; + FinishedAt = finishedAt; + OrganizationId = organizationId; + Seed = seed; + Method = @method; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IDictionary Metadata { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs b/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs deleted file mode 100644 index 481499d76..000000000 --- a/src/Generated/Models/InternalFineTuningJobCheckpoint.Serialization.cs +++ /dev/null @@ -1,216 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class InternalFineTuningJobCheckpoint : IJsonModel - { - internal InternalFineTuningJobCheckpoint() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFineTuningJobCheckpoint)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("id") != true) - { - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - } - if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) - { - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - } - if (_additionalBinaryDataProperties?.ContainsKey("fine_tuned_model_checkpoint") != true) - { - writer.WritePropertyName("fine_tuned_model_checkpoint"u8); - writer.WriteStringValue(FineTunedModelCheckpoint); - } - if (_additionalBinaryDataProperties?.ContainsKey("step_number") != true) - { - writer.WritePropertyName("step_number"u8); - writer.WriteNumberValue(StepNumber); - } - if (_additionalBinaryDataProperties?.ContainsKey("metrics") != true) - { - writer.WritePropertyName("metrics"u8); - writer.WriteObjectValue(Metrics, options); - } - if (_additionalBinaryDataProperties?.ContainsKey("fine_tuning_job_id") != true) - { - writer.WritePropertyName("fine_tuning_job_id"u8); - writer.WriteStringValue(FineTuningJobId); - } - if (_additionalBinaryDataProperties?.ContainsKey("object") != true) - { - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalFineTuningJobCheckpoint IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalFineTuningJobCheckpoint JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFineTuningJobCheckpoint)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalFineTuningJobCheckpoint(document.RootElement, options); - } - - internal static InternalFineTuningJobCheckpoint DeserializeInternalFineTuningJobCheckpoint(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string id = default; - DateTimeOffset createdAt = default; - string fineTunedModelCheckpoint = default; - int stepNumber = default; - InternalFineTuningJobCheckpointMetrics metrics = default; - string fineTuningJobId = default; - InternalFineTuningJobCheckpointObject @object = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("id"u8)) - { - id = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("created_at"u8)) - { - createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); - continue; - } - if (prop.NameEquals("fine_tuned_model_checkpoint"u8)) - { - fineTunedModelCheckpoint = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("step_number"u8)) - { - stepNumber = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("metrics"u8)) - { - metrics = InternalFineTuningJobCheckpointMetrics.DeserializeInternalFineTuningJobCheckpointMetrics(prop.Value, options); - continue; - } - if (prop.NameEquals("fine_tuning_job_id"u8)) - { - fineTuningJobId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("object"u8)) - { - @object = new InternalFineTuningJobCheckpointObject(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalFineTuningJobCheckpoint( - id, - createdAt, - fineTunedModelCheckpoint, - stepNumber, - metrics, - fineTuningJobId, - @object, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalFineTuningJobCheckpoint)} does not support writing '{options.Format}' format."); - } - } - - InternalFineTuningJobCheckpoint IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalFineTuningJobCheckpoint PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalFineTuningJobCheckpoint(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalFineTuningJobCheckpoint)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFineTuningJobCheckpoint internalFineTuningJobCheckpoint) - { - if (internalFineTuningJobCheckpoint == null) - { - return null; - } - return BinaryContent.Create(internalFineTuningJobCheckpoint, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFineTuningJobCheckpoint(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFineTuningJobCheckpoint(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalFineTuningJobCheckpoint.cs b/src/Generated/Models/InternalFineTuningJobCheckpoint.cs deleted file mode 100644 index 77dab5018..000000000 --- a/src/Generated/Models/InternalFineTuningJobCheckpoint.cs +++ /dev/null @@ -1,56 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class InternalFineTuningJobCheckpoint - { - private protected IDictionary _additionalBinaryDataProperties; - - internal InternalFineTuningJobCheckpoint(string id, DateTimeOffset createdAt, string fineTunedModelCheckpoint, int stepNumber, InternalFineTuningJobCheckpointMetrics metrics, string fineTuningJobId) - { - Id = id; - CreatedAt = createdAt; - FineTunedModelCheckpoint = fineTunedModelCheckpoint; - StepNumber = stepNumber; - Metrics = metrics; - FineTuningJobId = fineTuningJobId; - } - - internal InternalFineTuningJobCheckpoint(string id, DateTimeOffset createdAt, string fineTunedModelCheckpoint, int stepNumber, InternalFineTuningJobCheckpointMetrics metrics, string fineTuningJobId, InternalFineTuningJobCheckpointObject @object, IDictionary additionalBinaryDataProperties) - { - Id = id; - CreatedAt = createdAt; - FineTunedModelCheckpoint = fineTunedModelCheckpoint; - StepNumber = stepNumber; - Metrics = metrics; - FineTuningJobId = fineTuningJobId; - Object = @object; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public string Id { get; } - - public DateTimeOffset CreatedAt { get; } - - public string FineTunedModelCheckpoint { get; } - - public int StepNumber { get; } - - public InternalFineTuningJobCheckpointMetrics Metrics { get; } - - public string FineTuningJobId { get; } - - public InternalFineTuningJobCheckpointObject Object { get; } = "fine_tuning.job.checkpoint"; - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs b/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs deleted file mode 100644 index ff181f203..000000000 --- a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.Serialization.cs +++ /dev/null @@ -1,240 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class InternalFineTuningJobCheckpointMetrics : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFineTuningJobCheckpointMetrics)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(Step) && _additionalBinaryDataProperties?.ContainsKey("step") != true) - { - writer.WritePropertyName("step"u8); - writer.WriteNumberValue(Step.Value); - } - if (Optional.IsDefined(TrainLoss) && _additionalBinaryDataProperties?.ContainsKey("train_loss") != true) - { - writer.WritePropertyName("train_loss"u8); - writer.WriteNumberValue(TrainLoss.Value); - } - if (Optional.IsDefined(TrainMeanTokenAccuracy) && _additionalBinaryDataProperties?.ContainsKey("train_mean_token_accuracy") != true) - { - writer.WritePropertyName("train_mean_token_accuracy"u8); - writer.WriteNumberValue(TrainMeanTokenAccuracy.Value); - } - if (Optional.IsDefined(ValidLoss) && _additionalBinaryDataProperties?.ContainsKey("valid_loss") != true) - { - writer.WritePropertyName("valid_loss"u8); - writer.WriteNumberValue(ValidLoss.Value); - } - if (Optional.IsDefined(ValidMeanTokenAccuracy) && _additionalBinaryDataProperties?.ContainsKey("valid_mean_token_accuracy") != true) - { - writer.WritePropertyName("valid_mean_token_accuracy"u8); - writer.WriteNumberValue(ValidMeanTokenAccuracy.Value); - } - if (Optional.IsDefined(FullValidLoss) && _additionalBinaryDataProperties?.ContainsKey("full_valid_loss") != true) - { - writer.WritePropertyName("full_valid_loss"u8); - writer.WriteNumberValue(FullValidLoss.Value); - } - if (Optional.IsDefined(FullValidMeanTokenAccuracy) && _additionalBinaryDataProperties?.ContainsKey("full_valid_mean_token_accuracy") != true) - { - writer.WritePropertyName("full_valid_mean_token_accuracy"u8); - writer.WriteNumberValue(FullValidMeanTokenAccuracy.Value); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalFineTuningJobCheckpointMetrics IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalFineTuningJobCheckpointMetrics JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFineTuningJobCheckpointMetrics)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalFineTuningJobCheckpointMetrics(document.RootElement, options); - } - - internal static InternalFineTuningJobCheckpointMetrics DeserializeInternalFineTuningJobCheckpointMetrics(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - float? step = default; - float? trainLoss = default; - float? trainMeanTokenAccuracy = default; - float? validLoss = default; - float? validMeanTokenAccuracy = default; - float? fullValidLoss = default; - float? fullValidMeanTokenAccuracy = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("step"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - step = prop.Value.GetSingle(); - continue; - } - if (prop.NameEquals("train_loss"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - trainLoss = prop.Value.GetSingle(); - continue; - } - if (prop.NameEquals("train_mean_token_accuracy"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - trainMeanTokenAccuracy = prop.Value.GetSingle(); - continue; - } - if (prop.NameEquals("valid_loss"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - validLoss = prop.Value.GetSingle(); - continue; - } - if (prop.NameEquals("valid_mean_token_accuracy"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - validMeanTokenAccuracy = prop.Value.GetSingle(); - continue; - } - if (prop.NameEquals("full_valid_loss"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - fullValidLoss = prop.Value.GetSingle(); - continue; - } - if (prop.NameEquals("full_valid_mean_token_accuracy"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - fullValidMeanTokenAccuracy = prop.Value.GetSingle(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalFineTuningJobCheckpointMetrics( - step, - trainLoss, - trainMeanTokenAccuracy, - validLoss, - validMeanTokenAccuracy, - fullValidLoss, - fullValidMeanTokenAccuracy, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalFineTuningJobCheckpointMetrics)} does not support writing '{options.Format}' format."); - } - } - - InternalFineTuningJobCheckpointMetrics IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalFineTuningJobCheckpointMetrics PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalFineTuningJobCheckpointMetrics(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalFineTuningJobCheckpointMetrics)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFineTuningJobCheckpointMetrics internalFineTuningJobCheckpointMetrics) - { - if (internalFineTuningJobCheckpointMetrics == null) - { - return null; - } - return BinaryContent.Create(internalFineTuningJobCheckpointMetrics, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFineTuningJobCheckpointMetrics(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFineTuningJobCheckpointMetrics(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.cs b/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.cs deleted file mode 100644 index a59f09b9e..000000000 --- a/src/Generated/Models/InternalFineTuningJobCheckpointMetrics.cs +++ /dev/null @@ -1,50 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class InternalFineTuningJobCheckpointMetrics - { - private protected IDictionary _additionalBinaryDataProperties; - - internal InternalFineTuningJobCheckpointMetrics() - { - } - - internal InternalFineTuningJobCheckpointMetrics(float? step, float? trainLoss, float? trainMeanTokenAccuracy, float? validLoss, float? validMeanTokenAccuracy, float? fullValidLoss, float? fullValidMeanTokenAccuracy, IDictionary additionalBinaryDataProperties) - { - Step = step; - TrainLoss = trainLoss; - TrainMeanTokenAccuracy = trainMeanTokenAccuracy; - ValidLoss = validLoss; - ValidMeanTokenAccuracy = validMeanTokenAccuracy; - FullValidLoss = fullValidLoss; - FullValidMeanTokenAccuracy = fullValidMeanTokenAccuracy; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public float? Step { get; } - - public float? TrainLoss { get; } - - public float? TrainMeanTokenAccuracy { get; } - - public float? ValidLoss { get; } - - public float? ValidMeanTokenAccuracy { get; } - - public float? FullValidLoss { get; } - - public float? FullValidMeanTokenAccuracy { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalFineTuningJobCheckpointObject.cs b/src/Generated/Models/InternalFineTuningJobCheckpointObject.cs deleted file mode 100644 index 8a9e3bf8c..000000000 --- a/src/Generated/Models/InternalFineTuningJobCheckpointObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalFineTuningJobCheckpointObject : IEquatable - { - private readonly string _value; - private const string FineTuningJobCheckpointValue = "fine_tuning.job.checkpoint"; - - public InternalFineTuningJobCheckpointObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalFineTuningJobCheckpointObject FineTuningJobCheckpoint { get; } = new InternalFineTuningJobCheckpointObject(FineTuningJobCheckpointValue); - - public static bool operator ==(InternalFineTuningJobCheckpointObject left, InternalFineTuningJobCheckpointObject right) => left.Equals(right); - - public static bool operator !=(InternalFineTuningJobCheckpointObject left, InternalFineTuningJobCheckpointObject right) => !left.Equals(right); - - public static implicit operator InternalFineTuningJobCheckpointObject(string value) => new InternalFineTuningJobCheckpointObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalFineTuningJobCheckpointObject other && Equals(other); - - public bool Equals(InternalFineTuningJobCheckpointObject 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/InternalFineTuningJobEventObject.cs b/src/Generated/Models/InternalFineTuningJobEventObject.cs deleted file mode 100644 index 1dec101d9..000000000 --- a/src/Generated/Models/InternalFineTuningJobEventObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalFineTuningJobEventObject : IEquatable - { - private readonly string _value; - private const string FineTuningJobEventValue = "fine_tuning.job.event"; - - public InternalFineTuningJobEventObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalFineTuningJobEventObject FineTuningJobEvent { get; } = new InternalFineTuningJobEventObject(FineTuningJobEventValue); - - public static bool operator ==(InternalFineTuningJobEventObject left, InternalFineTuningJobEventObject right) => left.Equals(right); - - public static bool operator !=(InternalFineTuningJobEventObject left, InternalFineTuningJobEventObject right) => !left.Equals(right); - - public static implicit operator InternalFineTuningJobEventObject(string value) => new InternalFineTuningJobEventObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalFineTuningJobEventObject other && Equals(other); - - public bool Equals(InternalFineTuningJobEventObject 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/InternalFineTuningJobEventType.cs b/src/Generated/Models/InternalFineTuningJobEventType.cs deleted file mode 100644 index eaa0fb90d..000000000 --- a/src/Generated/Models/InternalFineTuningJobEventType.cs +++ /dev/null @@ -1,44 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalFineTuningJobEventType : IEquatable - { - private readonly string _value; - private const string MessageValue = "message"; - private const string MetricsValue = "metrics"; - - public InternalFineTuningJobEventType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalFineTuningJobEventType Message { get; } = new InternalFineTuningJobEventType(MessageValue); - - public static InternalFineTuningJobEventType Metrics { get; } = new InternalFineTuningJobEventType(MetricsValue); - - public static bool operator ==(InternalFineTuningJobEventType left, InternalFineTuningJobEventType right) => left.Equals(right); - - public static bool operator !=(InternalFineTuningJobEventType left, InternalFineTuningJobEventType right) => !left.Equals(right); - - public static implicit operator InternalFineTuningJobEventType(string value) => new InternalFineTuningJobEventType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalFineTuningJobEventType other && Equals(other); - - public bool Equals(InternalFineTuningJobEventType 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/InternalFineTuningJobObject.cs b/src/Generated/Models/InternalFineTuningJobObject.cs deleted file mode 100644 index 1b11ef517..000000000 --- a/src/Generated/Models/InternalFineTuningJobObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalFineTuningJobObject : IEquatable - { - private readonly string _value; - private const string FineTuningJobValue = "fine_tuning.job"; - - public InternalFineTuningJobObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalFineTuningJobObject FineTuningJob { get; } = new InternalFineTuningJobObject(FineTuningJobValue); - - public static bool operator ==(InternalFineTuningJobObject left, InternalFineTuningJobObject right) => left.Equals(right); - - public static bool operator !=(InternalFineTuningJobObject left, InternalFineTuningJobObject right) => !left.Equals(right); - - public static implicit operator InternalFineTuningJobObject(string value) => new InternalFineTuningJobObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalFineTuningJobObject other && Equals(other); - - public bool Equals(InternalFineTuningJobObject 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/InternalFineTuningJobRequestMethodDpo.Serialization.cs b/src/Generated/Models/InternalFineTuningJobRequestMethodDpo.Serialization.cs new file mode 100644 index 000000000..7a9474445 --- /dev/null +++ b/src/Generated/Models/InternalFineTuningJobRequestMethodDpo.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningJobRequestMethodDpo : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningJobRequestMethodDpo)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Hyperparameters) && _additionalBinaryDataProperties?.ContainsKey("hyperparameters") != true) + { + writer.WritePropertyName("hyperparameters"u8); + writer.WriteObjectValue(Hyperparameters, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalFineTuningJobRequestMethodDpo IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningJobRequestMethodDpo JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningJobRequestMethodDpo)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFineTuningJobRequestMethodDpo(document.RootElement, options); + } + + internal static InternalFineTuningJobRequestMethodDpo DeserializeInternalFineTuningJobRequestMethodDpo(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + HyperparametersForDPO hyperparameters = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("hyperparameters"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + hyperparameters = HyperparametersForDPO.DeserializeHyperparametersForDPO(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFineTuningJobRequestMethodDpo(hyperparameters, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFineTuningJobRequestMethodDpo)} does not support writing '{options.Format}' format."); + } + } + + InternalFineTuningJobRequestMethodDpo IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningJobRequestMethodDpo PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFineTuningJobRequestMethodDpo(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFineTuningJobRequestMethodDpo)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFineTuningJobRequestMethodDpo.cs b/src/Generated/Models/InternalFineTuningJobRequestMethodDpo.cs new file mode 100644 index 000000000..b8d5761f4 --- /dev/null +++ b/src/Generated/Models/InternalFineTuningJobRequestMethodDpo.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningJobRequestMethodDpo + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalFineTuningJobRequestMethodDpo() + { + } + + internal InternalFineTuningJobRequestMethodDpo(HyperparametersForDPO hyperparameters, IDictionary additionalBinaryDataProperties) + { + Hyperparameters = hyperparameters; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public HyperparametersForDPO Hyperparameters { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalFineTuningJobRequestMethodSupervised.Serialization.cs b/src/Generated/Models/InternalFineTuningJobRequestMethodSupervised.Serialization.cs new file mode 100644 index 000000000..ec5db34eb --- /dev/null +++ b/src/Generated/Models/InternalFineTuningJobRequestMethodSupervised.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningJobRequestMethodSupervised : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningJobRequestMethodSupervised)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Hyperparameters) && _additionalBinaryDataProperties?.ContainsKey("hyperparameters") != true) + { + writer.WritePropertyName("hyperparameters"u8); + writer.WriteObjectValue(Hyperparameters, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalFineTuningJobRequestMethodSupervised IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningJobRequestMethodSupervised JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningJobRequestMethodSupervised)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFineTuningJobRequestMethodSupervised(document.RootElement, options); + } + + internal static InternalFineTuningJobRequestMethodSupervised DeserializeInternalFineTuningJobRequestMethodSupervised(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + HyperparametersForSupervised hyperparameters = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("hyperparameters"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + hyperparameters = HyperparametersForSupervised.DeserializeHyperparametersForSupervised(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFineTuningJobRequestMethodSupervised(hyperparameters, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFineTuningJobRequestMethodSupervised)} does not support writing '{options.Format}' format."); + } + } + + InternalFineTuningJobRequestMethodSupervised IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningJobRequestMethodSupervised PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFineTuningJobRequestMethodSupervised(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFineTuningJobRequestMethodSupervised)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFineTuningJobRequestMethodSupervised.cs b/src/Generated/Models/InternalFineTuningJobRequestMethodSupervised.cs new file mode 100644 index 000000000..424b17d10 --- /dev/null +++ b/src/Generated/Models/InternalFineTuningJobRequestMethodSupervised.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningJobRequestMethodSupervised + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalFineTuningJobRequestMethodSupervised() + { + } + + internal InternalFineTuningJobRequestMethodSupervised(HyperparametersForSupervised hyperparameters, IDictionary additionalBinaryDataProperties) + { + Hyperparameters = hyperparameters; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public HyperparametersForSupervised Hyperparameters { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalFineTuningJobsPageToken.Serialization.cs b/src/Generated/Models/InternalFineTuningJobsPageToken.Serialization.cs new file mode 100644 index 000000000..17b145f40 --- /dev/null +++ b/src/Generated/Models/InternalFineTuningJobsPageToken.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningJobsPageToken : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningJobsPageToken)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Limit) && _additionalBinaryDataProperties?.ContainsKey("limit") != true) + { + writer.WritePropertyName("limit"u8); + writer.WriteNumberValue(Limit.Value); + } + if (Optional.IsDefined(After) && _additionalBinaryDataProperties?.ContainsKey("after") != true) + { + writer.WritePropertyName("after"u8); + writer.WriteStringValue(After); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalFineTuningJobsPageToken IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningJobsPageToken JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFineTuningJobsPageToken)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFineTuningJobsPageToken(document.RootElement, options); + } + + internal static InternalFineTuningJobsPageToken DeserializeInternalFineTuningJobsPageToken(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int? limit = default; + string after = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("limit"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + limit = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("after"u8)) + { + after = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFineTuningJobsPageToken(limit, after, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFineTuningJobsPageToken)} does not support writing '{options.Format}' format."); + } + } + + InternalFineTuningJobsPageToken IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalFineTuningJobsPageToken PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFineTuningJobsPageToken(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFineTuningJobsPageToken)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFineTuningJobsPageToken.cs b/src/Generated/Models/InternalFineTuningJobsPageToken.cs new file mode 100644 index 000000000..2a3ffbcad --- /dev/null +++ b/src/Generated/Models/InternalFineTuningJobsPageToken.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.FineTuning +{ + internal partial class InternalFineTuningJobsPageToken + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalFineTuningJobsPageToken() + { + } + + internal InternalFineTuningJobsPageToken(int? limit, string after, IDictionary additionalBinaryDataProperties) + { + Limit = limit; + After = after; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public int? Limit { get; set; } + + public string After { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalFunctionDefinition.Serialization.cs b/src/Generated/Models/InternalFunctionDefinition.Serialization.cs index 3a5e0c907..f595ba7a8 100644 --- a/src/Generated/Models/InternalFunctionDefinition.Serialization.cs +++ b/src/Generated/Models/InternalFunctionDefinition.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; namespace OpenAI @@ -23,6 +23,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -57,6 +58,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -80,6 +82,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalFunctionDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalFunctionDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,6 +136,7 @@ internal static InternalFunctionDefinition DeserializeInternalFunctionDefinition parameters = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalFunctionDefinition(description, name, strict, parameters, additionalBinaryDataProperties); @@ -140,13 +144,14 @@ internal static InternalFunctionDefinition DeserializeInternalFunctionDefinition BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalFunctionDefinition)} does not support writing '{options.Format}' format."); } @@ -154,6 +159,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalFunctionDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalFunctionDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -170,21 +176,5 @@ protected virtual InternalFunctionDefinition PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalFunctionDefinition internalFunctionDefinition) - { - if (internalFunctionDefinition == null) - { - return null; - } - return BinaryContent.Create(internalFunctionDefinition, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalFunctionDefinition(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalFunctionDefinition(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalFunctionTool.Serialization.cs b/src/Generated/Models/InternalFunctionTool.Serialization.cs new file mode 100644 index 000000000..eab60fd7d --- /dev/null +++ b/src/Generated/Models/InternalFunctionTool.Serialization.cs @@ -0,0 +1,194 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFunctionTool : IJsonModel + { + internal InternalFunctionTool() : this(InternalToolType.Function, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFunctionTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (Optional.IsDefined(Description) && _additionalBinaryDataProperties?.ContainsKey("description") != true) + { + writer.WritePropertyName("description"u8); + writer.WriteStringValue(Description); + } + if (_additionalBinaryDataProperties?.ContainsKey("strict") != true) + { + if (Optional.IsDefined(Strict)) + { + writer.WritePropertyName("strict"u8); + writer.WriteBooleanValue(Strict.Value); + } + else + { + writer.WriteNull("strict"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("parameters") != true) + { + if (Optional.IsDefined(Parameters)) + { + writer.WritePropertyName("parameters"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Parameters); +#else + using (JsonDocument document = JsonDocument.Parse(Parameters)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + else + { + writer.WriteNull("parameters"u8); + } + } + } + + InternalFunctionTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalFunctionTool)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFunctionTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFunctionTool(document.RootElement, options); + } + + internal static InternalFunctionTool DeserializeInternalFunctionTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string description = default; + bool? strict = default; + BinaryData parameters = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("description"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + description = null; + continue; + } + description = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("strict"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + strict = null; + continue; + } + strict = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("parameters"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + parameters = null; + continue; + } + parameters = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFunctionTool( + kind, + additionalBinaryDataProperties, + name, + description, + strict, + parameters); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFunctionTool)} does not support writing '{options.Format}' format."); + } + } + + InternalFunctionTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalFunctionTool)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFunctionTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFunctionTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFunctionTool.cs b/src/Generated/Models/InternalFunctionTool.cs new file mode 100644 index 000000000..bfc9c4718 --- /dev/null +++ b/src/Generated/Models/InternalFunctionTool.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFunctionTool : ResponseTool + { + public InternalFunctionTool(string name, bool? strict, BinaryData parameters) : base(InternalToolType.Function) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(parameters, nameof(parameters)); + + Name = name; + Strict = strict; + Parameters = parameters; + } + + internal InternalFunctionTool(InternalToolType kind, IDictionary additionalBinaryDataProperties, string name, string description, bool? strict, BinaryData parameters) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Description = description; + Strict = strict; + Parameters = parameters; + } + + public string Name { get; set; } + + public string Description { get; set; } + + public bool? Strict { get; set; } + } +} diff --git a/src/Generated/Models/InternalFunctionToolCallItemParam.Serialization.cs b/src/Generated/Models/InternalFunctionToolCallItemParam.Serialization.cs new file mode 100644 index 000000000..d4f0a2e01 --- /dev/null +++ b/src/Generated/Models/InternalFunctionToolCallItemParam.Serialization.cs @@ -0,0 +1,141 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFunctionToolCallItemParam : IJsonModel + { + internal InternalFunctionToolCallItemParam() : this(InternalItemType.FunctionCall, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFunctionToolCallItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("call_id") != true) + { + writer.WritePropertyName("call_id"u8); + writer.WriteStringValue(CallId); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + } + + InternalFunctionToolCallItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalFunctionToolCallItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFunctionToolCallItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFunctionToolCallItemParam(document.RootElement, options); + } + + internal static InternalFunctionToolCallItemParam DeserializeInternalFunctionToolCallItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string callId = default; + string name = default; + string arguments = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("arguments"u8)) + { + arguments = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFunctionToolCallItemParam(kind, additionalBinaryDataProperties, callId, name, arguments); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFunctionToolCallItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalFunctionToolCallItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalFunctionToolCallItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFunctionToolCallItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFunctionToolCallItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFunctionToolCallItemParam.cs b/src/Generated/Models/InternalFunctionToolCallItemParam.cs new file mode 100644 index 000000000..cff14a920 --- /dev/null +++ b/src/Generated/Models/InternalFunctionToolCallItemParam.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFunctionToolCallItemParam : InternalItemParam + { + public InternalFunctionToolCallItemParam(string callId, string name, string arguments) : base(InternalItemType.FunctionCall) + { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(arguments, nameof(arguments)); + + CallId = callId; + Name = name; + Arguments = arguments; + } + + internal InternalFunctionToolCallItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string callId, string name, string arguments) : base(kind, additionalBinaryDataProperties) + { + CallId = callId; + Name = name; + Arguments = arguments; + } + + public string CallId { get; } + + public string Name { get; } + + public string Arguments { get; } + } +} diff --git a/src/Generated/Models/InternalFunctionToolCallOutputItemParam.Serialization.cs b/src/Generated/Models/InternalFunctionToolCallOutputItemParam.Serialization.cs new file mode 100644 index 000000000..112580a28 --- /dev/null +++ b/src/Generated/Models/InternalFunctionToolCallOutputItemParam.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFunctionToolCallOutputItemParam : IJsonModel + { + internal InternalFunctionToolCallOutputItemParam() : this(InternalItemType.FunctionCallOutput, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFunctionToolCallOutputItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("call_id") != true) + { + writer.WritePropertyName("call_id"u8); + writer.WriteStringValue(CallId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteStringValue(Output); + } + } + + InternalFunctionToolCallOutputItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalFunctionToolCallOutputItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalFunctionToolCallOutputItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalFunctionToolCallOutputItemParam(document.RootElement, options); + } + + internal static InternalFunctionToolCallOutputItemParam DeserializeInternalFunctionToolCallOutputItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string callId = default; + string output = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output"u8)) + { + output = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalFunctionToolCallOutputItemParam(kind, additionalBinaryDataProperties, callId, output); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalFunctionToolCallOutputItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalFunctionToolCallOutputItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalFunctionToolCallOutputItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalFunctionToolCallOutputItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalFunctionToolCallOutputItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalFunctionToolCallOutputItemParam.cs b/src/Generated/Models/InternalFunctionToolCallOutputItemParam.cs new file mode 100644 index 000000000..346608cff --- /dev/null +++ b/src/Generated/Models/InternalFunctionToolCallOutputItemParam.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalFunctionToolCallOutputItemParam : InternalItemParam + { + public InternalFunctionToolCallOutputItemParam(string callId, string output) : base(InternalItemType.FunctionCallOutput) + { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(output, nameof(output)); + + CallId = callId; + Output = output; + } + + internal InternalFunctionToolCallOutputItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string callId, string output) : base(kind, additionalBinaryDataProperties) + { + CallId = callId; + Output = output; + } + + public string CallId { get; } + + public string Output { get; } + } +} diff --git a/src/Generated/Models/InternalGetEvalRunOutputItemsRequestStatus.cs b/src/Generated/Models/InternalGetEvalRunOutputItemsRequestStatus.cs new file mode 100644 index 000000000..2c0a043e1 --- /dev/null +++ b/src/Generated/Models/InternalGetEvalRunOutputItemsRequestStatus.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalGetEvalRunOutputItemsRequestStatus : IEquatable + { + private readonly string _value; + private const string FailValue = "fail"; + private const string PassValue = "pass"; + + public InternalGetEvalRunOutputItemsRequestStatus(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalGetEvalRunOutputItemsRequestStatus Fail { get; } = new InternalGetEvalRunOutputItemsRequestStatus(FailValue); + + internal static InternalGetEvalRunOutputItemsRequestStatus Pass { get; } = new InternalGetEvalRunOutputItemsRequestStatus(PassValue); + + public static bool operator ==(InternalGetEvalRunOutputItemsRequestStatus left, InternalGetEvalRunOutputItemsRequestStatus right) => left.Equals(right); + + public static bool operator !=(InternalGetEvalRunOutputItemsRequestStatus left, InternalGetEvalRunOutputItemsRequestStatus right) => !left.Equals(right); + + public static implicit operator InternalGetEvalRunOutputItemsRequestStatus(string value) => new InternalGetEvalRunOutputItemsRequestStatus(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalGetEvalRunOutputItemsRequestStatus other && Equals(other); + + public bool Equals(InternalGetEvalRunOutputItemsRequestStatus 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/InternalGetEvalRunsRequestStatus.cs b/src/Generated/Models/InternalGetEvalRunsRequestStatus.cs new file mode 100644 index 000000000..547277776 --- /dev/null +++ b/src/Generated/Models/InternalGetEvalRunsRequestStatus.cs @@ -0,0 +1,53 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalGetEvalRunsRequestStatus : IEquatable + { + private readonly string _value; + private const string QueuedValue = "queued"; + private const string InProgressValue = "in_progress"; + private const string CompletedValue = "completed"; + private const string CanceledValue = "canceled"; + private const string FailedValue = "failed"; + + public InternalGetEvalRunsRequestStatus(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalGetEvalRunsRequestStatus Queued { get; } = new InternalGetEvalRunsRequestStatus(QueuedValue); + + internal static InternalGetEvalRunsRequestStatus InProgress { get; } = new InternalGetEvalRunsRequestStatus(InProgressValue); + + internal static InternalGetEvalRunsRequestStatus Completed { get; } = new InternalGetEvalRunsRequestStatus(CompletedValue); + + internal static InternalGetEvalRunsRequestStatus Canceled { get; } = new InternalGetEvalRunsRequestStatus(CanceledValue); + + internal static InternalGetEvalRunsRequestStatus Failed { get; } = new InternalGetEvalRunsRequestStatus(FailedValue); + + public static bool operator ==(InternalGetEvalRunsRequestStatus left, InternalGetEvalRunsRequestStatus right) => left.Equals(right); + + public static bool operator !=(InternalGetEvalRunsRequestStatus left, InternalGetEvalRunsRequestStatus right) => !left.Equals(right); + + public static implicit operator InternalGetEvalRunsRequestStatus(string value) => new InternalGetEvalRunsRequestStatus(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalGetEvalRunsRequestStatus other && Equals(other); + + public bool Equals(InternalGetEvalRunsRequestStatus 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/InternalGrader.Serialization.cs b/src/Generated/Models/InternalGrader.Serialization.cs new file mode 100644 index 000000000..2966f3216 --- /dev/null +++ b/src/Generated/Models/InternalGrader.Serialization.cs @@ -0,0 +1,138 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + [PersistableModelProxy(typeof(InternalUnknownGrader))] + internal abstract partial class InternalGrader : IJsonModel + { + internal InternalGrader() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGrader)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalGrader IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalGrader JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGrader)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalGrader(document.RootElement, options); + } + + internal static InternalGrader DeserializeInternalGrader(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "label_model": + return InternalGraderLabelModel.DeserializeInternalGraderLabelModel(element, options); + case "string_check": + return InternalGraderStringCheck.DeserializeInternalGraderStringCheck(element, options); + case "text_similarity": + return InternalGraderTextSimilarity.DeserializeInternalGraderTextSimilarity(element, options); + case "python": + return InternalGraderPython.DeserializeInternalGraderPython(element, options); + case "score_model": + return InternalGraderScoreModel.DeserializeInternalGraderScoreModel(element, options); + case "multi": + return InternalGraderMulti.DeserializeInternalGraderMulti(element, options); + } + } + return InternalUnknownGrader.DeserializeInternalUnknownGrader(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalGrader)} does not support writing '{options.Format}' format."); + } + } + + InternalGrader IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalGrader PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalGrader(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalGrader)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalGrader.cs b/src/Generated/Models/InternalGrader.cs new file mode 100644 index 000000000..0a05d06e9 --- /dev/null +++ b/src/Generated/Models/InternalGrader.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Graders +{ + internal abstract partial class InternalGrader + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalGrader(InternalGraderType kind) + { + Kind = kind; + } + + internal InternalGrader(InternalGraderType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalGraderType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalGraderLabelModel.Serialization.cs b/src/Generated/Models/InternalGraderLabelModel.Serialization.cs new file mode 100644 index 000000000..55530df75 --- /dev/null +++ b/src/Generated/Models/InternalGraderLabelModel.Serialization.cs @@ -0,0 +1,225 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Evals; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderLabelModel : IJsonModel + { + internal InternalGraderLabelModel() : this(InternalGraderType.LabelModel, null, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderLabelModel)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStartArray(); + foreach (InternalEvalItem item in Input) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("labels") != true) + { + writer.WritePropertyName("labels"u8); + writer.WriteStartArray(); + foreach (string item in Labels) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("passing_labels") != true) + { + writer.WritePropertyName("passing_labels"u8); + writer.WriteStartArray(); + foreach (string item in PassingLabels) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + } + + InternalGraderLabelModel IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalGraderLabelModel)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalGrader JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderLabelModel)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalGraderLabelModel(document.RootElement, options); + } + + internal static InternalGraderLabelModel DeserializeInternalGraderLabelModel(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string model = default; + IList input = default; + IList labels = default; + IList passingLabels = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalItem.DeserializeInternalEvalItem(item, options)); + } + input = array; + continue; + } + if (prop.NameEquals("labels"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + labels = array; + continue; + } + if (prop.NameEquals("passing_labels"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + passingLabels = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalGraderLabelModel( + kind, + additionalBinaryDataProperties, + name, + model, + input, + labels, + passingLabels); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalGraderLabelModel)} does not support writing '{options.Format}' format."); + } + } + + InternalGraderLabelModel IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalGraderLabelModel)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalGrader PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalGraderLabelModel(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalGraderLabelModel)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalGraderLabelModel.cs b/src/Generated/Models/InternalGraderLabelModel.cs new file mode 100644 index 000000000..c8773640a --- /dev/null +++ b/src/Generated/Models/InternalGraderLabelModel.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; +using OpenAI.Evals; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderLabelModel : InternalGrader + { + internal InternalGraderLabelModel(string name, string model, IEnumerable input, IEnumerable labels, IEnumerable passingLabels) : base(InternalGraderType.LabelModel) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(model, nameof(model)); + Argument.AssertNotNull(input, nameof(input)); + Argument.AssertNotNull(labels, nameof(labels)); + Argument.AssertNotNull(passingLabels, nameof(passingLabels)); + + Name = name; + Model = model; + Input = input.ToList(); + Labels = labels.ToList(); + PassingLabels = passingLabels.ToList(); + } + + internal InternalGraderLabelModel(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string model, IList input, IList labels, IList passingLabels) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + Model = model; + Input = input ?? new ChangeTrackingList(); + Labels = labels ?? new ChangeTrackingList(); + PassingLabels = passingLabels ?? new ChangeTrackingList(); + } + + public string Name { get; set; } + + public string Model { get; set; } + + internal IList Input { get; } + + public IList Labels { get; } + + public IList PassingLabels { get; } + } +} diff --git a/src/Generated/Models/InternalGraderMulti.Serialization.cs b/src/Generated/Models/InternalGraderMulti.Serialization.cs new file mode 100644 index 000000000..3b8736f84 --- /dev/null +++ b/src/Generated/Models/InternalGraderMulti.Serialization.cs @@ -0,0 +1,148 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderMulti : IJsonModel + { + internal InternalGraderMulti() : this(InternalGraderType.Multi, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderMulti)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("graders") != true) + { + writer.WritePropertyName("graders"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Graders); +#else + using (JsonDocument document = JsonDocument.Parse(Graders)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("calculate_output") != true) + { + writer.WritePropertyName("calculate_output"u8); + writer.WriteStringValue(CalculateOutput); + } + } + + InternalGraderMulti IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalGraderMulti)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalGrader JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderMulti)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalGraderMulti(document.RootElement, options); + } + + internal static InternalGraderMulti DeserializeInternalGraderMulti(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + BinaryData graders = default; + string calculateOutput = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("graders"u8)) + { + graders = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("calculate_output"u8)) + { + calculateOutput = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalGraderMulti(kind, additionalBinaryDataProperties, name, graders, calculateOutput); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalGraderMulti)} does not support writing '{options.Format}' format."); + } + } + + InternalGraderMulti IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalGraderMulti)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalGrader PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalGraderMulti(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalGraderMulti)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalGraderMulti.cs b/src/Generated/Models/InternalGraderMulti.cs new file mode 100644 index 000000000..2b5242e4a --- /dev/null +++ b/src/Generated/Models/InternalGraderMulti.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderMulti : InternalGrader + { + public InternalGraderMulti(string name, BinaryData graders, string calculateOutput) : base(InternalGraderType.Multi) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(graders, nameof(graders)); + Argument.AssertNotNull(calculateOutput, nameof(calculateOutput)); + + Name = name; + Graders = graders; + CalculateOutput = calculateOutput; + } + + internal InternalGraderMulti(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, BinaryData graders, string calculateOutput) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Graders = graders; + CalculateOutput = calculateOutput; + } + + public string Name { get; set; } + + public BinaryData Graders { get; set; } + + public string CalculateOutput { get; set; } + } +} diff --git a/src/Generated/Models/InternalGraderPython.Serialization.cs b/src/Generated/Models/InternalGraderPython.Serialization.cs new file mode 100644 index 000000000..63572d39e --- /dev/null +++ b/src/Generated/Models/InternalGraderPython.Serialization.cs @@ -0,0 +1,141 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderPython : IJsonModel + { + internal InternalGraderPython() : this(InternalGraderType.Python, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderPython)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("source") != true) + { + writer.WritePropertyName("source"u8); + writer.WriteStringValue(Source); + } + if (Optional.IsDefined(ImageTag) && _additionalBinaryDataProperties?.ContainsKey("image_tag") != true) + { + writer.WritePropertyName("image_tag"u8); + writer.WriteStringValue(ImageTag); + } + } + + InternalGraderPython IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalGraderPython)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalGrader JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderPython)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalGraderPython(document.RootElement, options); + } + + internal static InternalGraderPython DeserializeInternalGraderPython(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string source = default; + string imageTag = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("source"u8)) + { + source = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("image_tag"u8)) + { + imageTag = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalGraderPython(kind, additionalBinaryDataProperties, name, source, imageTag); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalGraderPython)} does not support writing '{options.Format}' format."); + } + } + + InternalGraderPython IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalGraderPython)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalGrader PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalGraderPython(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalGraderPython)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalGraderPython.cs b/src/Generated/Models/InternalGraderPython.cs new file mode 100644 index 000000000..4e46de6f5 --- /dev/null +++ b/src/Generated/Models/InternalGraderPython.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderPython : InternalGrader + { + public InternalGraderPython(string name, string source) : base(InternalGraderType.Python) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(source, nameof(source)); + + Name = name; + Source = source; + } + + internal InternalGraderPython(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string source, string imageTag) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Source = source; + ImageTag = imageTag; + } + + public string Name { get; set; } + + public string Source { get; set; } + + public string ImageTag { get; set; } + } +} diff --git a/src/Generated/Models/InternalGraderScoreModel.Serialization.cs b/src/Generated/Models/InternalGraderScoreModel.Serialization.cs new file mode 100644 index 000000000..f5b2c028c --- /dev/null +++ b/src/Generated/Models/InternalGraderScoreModel.Serialization.cs @@ -0,0 +1,206 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Evals; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderScoreModel : IJsonModel + { + internal InternalGraderScoreModel() : this(InternalGraderType.ScoreModel, null, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderScoreModel)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (Optional.IsDefined(SamplingParams) && _additionalBinaryDataProperties?.ContainsKey("sampling_params") != true) + { + writer.WritePropertyName("sampling_params"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(SamplingParams); +#else + using (JsonDocument document = JsonDocument.Parse(SamplingParams)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStartArray(); + foreach (InternalEvalItem item in Input) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsCollectionDefined(Range) && _additionalBinaryDataProperties?.ContainsKey("range") != true) + { + writer.WritePropertyName("range"u8); + writer.WriteStartArray(); + foreach (float item in Range) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + } + + InternalGraderScoreModel IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalGraderScoreModel)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalGrader JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderScoreModel)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalGraderScoreModel(document.RootElement, options); + } + + internal static InternalGraderScoreModel DeserializeInternalGraderScoreModel(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string model = default; + BinaryData samplingParams = default; + IList input = default; + IList range = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("sampling_params"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + samplingParams = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("input"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalEvalItem.DeserializeInternalEvalItem(item, options)); + } + input = array; + continue; + } + if (prop.NameEquals("range"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetSingle()); + } + range = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalGraderScoreModel( + kind, + additionalBinaryDataProperties, + name, + model, + samplingParams, + input, + range ?? new ChangeTrackingList()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalGraderScoreModel)} does not support writing '{options.Format}' format."); + } + } + + InternalGraderScoreModel IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalGraderScoreModel)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalGrader PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalGraderScoreModel(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalGraderScoreModel)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalGraderScoreModel.cs b/src/Generated/Models/InternalGraderScoreModel.cs new file mode 100644 index 000000000..8ed123d6a --- /dev/null +++ b/src/Generated/Models/InternalGraderScoreModel.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; +using OpenAI.Evals; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderScoreModel : InternalGrader + { + internal InternalGraderScoreModel(string name, string model, IEnumerable input) : base(InternalGraderType.ScoreModel) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(model, nameof(model)); + Argument.AssertNotNull(input, nameof(input)); + + Name = name; + Model = model; + Input = input.ToList(); + Range = new ChangeTrackingList(); + } + + internal InternalGraderScoreModel(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string model, BinaryData samplingParams, IList input, IList range) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Name = name; + Model = model; + SamplingParams = samplingParams; + Input = input ?? new ChangeTrackingList(); + Range = range ?? new ChangeTrackingList(); + } + + public string Name { get; set; } + + public string Model { get; set; } + + public BinaryData SamplingParams { get; set; } + + internal IList Input { get; } + + public IList Range { get; } + } +} diff --git a/src/Generated/Models/InternalGraderStringCheck.Serialization.cs b/src/Generated/Models/InternalGraderStringCheck.Serialization.cs new file mode 100644 index 000000000..86ff8cca3 --- /dev/null +++ b/src/Generated/Models/InternalGraderStringCheck.Serialization.cs @@ -0,0 +1,159 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Evals; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderStringCheck : IJsonModel + { + internal InternalGraderStringCheck() : this(InternalGraderType.StringCheck, null, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderStringCheck)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStringValue(Input); + } + if (_additionalBinaryDataProperties?.ContainsKey("reference") != true) + { + writer.WritePropertyName("reference"u8); + writer.WriteStringValue(Reference); + } + if (_additionalBinaryDataProperties?.ContainsKey("operation") != true) + { + writer.WritePropertyName("operation"u8); + writer.WriteStringValue(Operation.ToString()); + } + } + + InternalGraderStringCheck IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalGraderStringCheck)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalGrader JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderStringCheck)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalGraderStringCheck(document.RootElement, options); + } + + internal static InternalGraderStringCheck DeserializeInternalGraderStringCheck(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string input = default; + string reference = default; + InternalEvalGraderStringCheckParamsOperation operation = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input"u8)) + { + input = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("reference"u8)) + { + reference = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("operation"u8)) + { + operation = new InternalEvalGraderStringCheckParamsOperation(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalGraderStringCheck( + kind, + additionalBinaryDataProperties, + name, + input, + reference, + operation); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalGraderStringCheck)} does not support writing '{options.Format}' format."); + } + } + + InternalGraderStringCheck IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalGraderStringCheck)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalGrader PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalGraderStringCheck(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalGraderStringCheck)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalGraderStringCheck.cs b/src/Generated/Models/InternalGraderStringCheck.cs new file mode 100644 index 000000000..53831aa9a --- /dev/null +++ b/src/Generated/Models/InternalGraderStringCheck.cs @@ -0,0 +1,42 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Evals; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderStringCheck : InternalGrader + { + internal InternalGraderStringCheck(string name, string input, string reference, InternalEvalGraderStringCheckParamsOperation operation) : base(InternalGraderType.StringCheck) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(input, nameof(input)); + Argument.AssertNotNull(reference, nameof(reference)); + + Name = name; + Input = input; + Reference = reference; + Operation = operation; + } + + internal InternalGraderStringCheck(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string input, string reference, InternalEvalGraderStringCheckParamsOperation operation) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Input = input; + Reference = reference; + Operation = operation; + } + + public string Name { get; set; } + + public string Input { get; set; } + + public string Reference { get; set; } + + internal InternalEvalGraderStringCheckParamsOperation Operation { get; set; } + } +} diff --git a/src/Generated/Models/InternalGraderTextSimilarity.Serialization.cs b/src/Generated/Models/InternalGraderTextSimilarity.Serialization.cs new file mode 100644 index 000000000..1456ddfd2 --- /dev/null +++ b/src/Generated/Models/InternalGraderTextSimilarity.Serialization.cs @@ -0,0 +1,158 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderTextSimilarity : IJsonModel + { + internal InternalGraderTextSimilarity() : this(InternalGraderType.TextSimilarity, null, null, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderTextSimilarity)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("input") != true) + { + writer.WritePropertyName("input"u8); + writer.WriteStringValue(Input); + } + if (_additionalBinaryDataProperties?.ContainsKey("reference") != true) + { + writer.WritePropertyName("reference"u8); + writer.WriteStringValue(Reference); + } + if (_additionalBinaryDataProperties?.ContainsKey("evaluation_metric") != true) + { + writer.WritePropertyName("evaluation_metric"u8); + writer.WriteStringValue(EvaluationMetric.ToString()); + } + } + + InternalGraderTextSimilarity IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalGraderTextSimilarity)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalGrader JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGraderTextSimilarity)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalGraderTextSimilarity(document.RootElement, options); + } + + internal static InternalGraderTextSimilarity DeserializeInternalGraderTextSimilarity(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + string input = default; + string reference = default; + InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input"u8)) + { + input = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("reference"u8)) + { + reference = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("evaluation_metric"u8)) + { + evaluationMetric = new InternalEvalGraderTextSimilarityResourceEvaluationMetric(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalGraderTextSimilarity( + kind, + additionalBinaryDataProperties, + name, + input, + reference, + evaluationMetric); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalGraderTextSimilarity)} does not support writing '{options.Format}' format."); + } + } + + InternalGraderTextSimilarity IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalGraderTextSimilarity)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalGrader PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalGraderTextSimilarity(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalGraderTextSimilarity)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalGraderTextSimilarity.cs b/src/Generated/Models/InternalGraderTextSimilarity.cs new file mode 100644 index 000000000..08075dfea --- /dev/null +++ b/src/Generated/Models/InternalGraderTextSimilarity.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalGraderTextSimilarity : InternalGrader + { + internal InternalGraderTextSimilarity(string name, string input, string reference, InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric) : base(InternalGraderType.TextSimilarity) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(input, nameof(input)); + Argument.AssertNotNull(reference, nameof(reference)); + + Name = name; + Input = input; + Reference = reference; + EvaluationMetric = evaluationMetric; + } + + internal InternalGraderTextSimilarity(InternalGraderType kind, IDictionary additionalBinaryDataProperties, string name, string input, string reference, InternalEvalGraderTextSimilarityResourceEvaluationMetric evaluationMetric) : base(kind, additionalBinaryDataProperties) + { + Name = name; + Input = input; + Reference = reference; + EvaluationMetric = evaluationMetric; + } + + public string Name { get; set; } + + public string Input { get; set; } + + public string Reference { get; set; } + + internal InternalEvalGraderTextSimilarityResourceEvaluationMetric EvaluationMetric { get; set; } + } +} diff --git a/src/Generated/Models/InternalGraderType.cs b/src/Generated/Models/InternalGraderType.cs new file mode 100644 index 000000000..f6463093e --- /dev/null +++ b/src/Generated/Models/InternalGraderType.cs @@ -0,0 +1,56 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Graders +{ + internal readonly partial struct InternalGraderType : IEquatable + { + private readonly string _value; + private const string StringCheckValue = "string_check"; + private const string TextSimilarityValue = "text_similarity"; + private const string ScoreModelValue = "score_model"; + private const string LabelModelValue = "label_model"; + private const string PythonValue = "python"; + private const string MultiValue = "multi"; + + public InternalGraderType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalGraderType StringCheck { get; } = new InternalGraderType(StringCheckValue); + + internal static InternalGraderType TextSimilarity { get; } = new InternalGraderType(TextSimilarityValue); + + internal static InternalGraderType ScoreModel { get; } = new InternalGraderType(ScoreModelValue); + + internal static InternalGraderType LabelModel { get; } = new InternalGraderType(LabelModelValue); + + internal static InternalGraderType Python { get; } = new InternalGraderType(PythonValue); + + internal static InternalGraderType Multi { get; } = new InternalGraderType(MultiValue); + + public static bool operator ==(InternalGraderType left, InternalGraderType right) => left.Equals(right); + + public static bool operator !=(InternalGraderType left, InternalGraderType right) => !left.Equals(right); + + public static implicit operator InternalGraderType(string value) => new InternalGraderType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalGraderType other && Equals(other); + + public bool Equals(InternalGraderType 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/InternalImageGenTool.Serialization.cs b/src/Generated/Models/InternalImageGenTool.Serialization.cs new file mode 100644 index 000000000..ab0a9963b --- /dev/null +++ b/src/Generated/Models/InternalImageGenTool.Serialization.cs @@ -0,0 +1,246 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalImageGenTool : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImageGenTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (Optional.IsDefined(Quality) && _additionalBinaryDataProperties?.ContainsKey("quality") != true) + { + writer.WritePropertyName("quality"u8); + writer.WriteStringValue(Quality.Value.ToString()); + } + if (Optional.IsDefined(Size) && _additionalBinaryDataProperties?.ContainsKey("size") != true) + { + writer.WritePropertyName("size"u8); + writer.WriteStringValue(Size.Value.ToString()); + } + if (Optional.IsDefined(OutputFormat) && _additionalBinaryDataProperties?.ContainsKey("output_format") != true) + { + writer.WritePropertyName("output_format"u8); + writer.WriteStringValue(OutputFormat.Value.ToString()); + } + if (Optional.IsDefined(OutputCompression) && _additionalBinaryDataProperties?.ContainsKey("output_compression") != true) + { + writer.WritePropertyName("output_compression"u8); + writer.WriteNumberValue(OutputCompression.Value); + } + if (Optional.IsDefined(Moderation) && _additionalBinaryDataProperties?.ContainsKey("moderation") != true) + { + writer.WritePropertyName("moderation"u8); + writer.WriteStringValue(Moderation.Value.ToString()); + } + if (Optional.IsDefined(Background) && _additionalBinaryDataProperties?.ContainsKey("background") != true) + { + writer.WritePropertyName("background"u8); + writer.WriteStringValue(Background.Value.ToString()); + } + if (Optional.IsDefined(InputImageMask) && _additionalBinaryDataProperties?.ContainsKey("input_image_mask") != true) + { + writer.WritePropertyName("input_image_mask"u8); + writer.WriteObjectValue(InputImageMask, options); + } + if (Optional.IsDefined(PartialImages) && _additionalBinaryDataProperties?.ContainsKey("partial_images") != true) + { + writer.WritePropertyName("partial_images"u8); + writer.WriteNumberValue(PartialImages.Value); + } + } + + InternalImageGenTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalImageGenTool)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImageGenTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalImageGenTool(document.RootElement, options); + } + + internal static InternalImageGenTool DeserializeInternalImageGenTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string model = default; + InternalImageGenToolQuality? quality = default; + InternalImageGenToolSize? size = default; + InternalImageGenToolOutputFormat? outputFormat = default; + int? outputCompression = default; + InternalImageGenToolModeration? moderation = default; + InternalImageGenToolBackground? background = default; + InternalImageGenToolInputImageMask inputImageMask = default; + int? partialImages = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("quality"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + quality = new InternalImageGenToolQuality(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("size"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + size = new InternalImageGenToolSize(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("output_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + outputFormat = new InternalImageGenToolOutputFormat(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("output_compression"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + outputCompression = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("moderation"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + moderation = new InternalImageGenToolModeration(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("background"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + background = new InternalImageGenToolBackground(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input_image_mask"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputImageMask = InternalImageGenToolInputImageMask.DeserializeInternalImageGenToolInputImageMask(prop.Value, options); + continue; + } + if (prop.NameEquals("partial_images"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + partialImages = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalImageGenTool( + kind, + additionalBinaryDataProperties, + model, + quality, + size, + outputFormat, + outputCompression, + moderation, + background, + inputImageMask, + partialImages); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalImageGenTool)} does not support writing '{options.Format}' format."); + } + } + + InternalImageGenTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalImageGenTool)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalImageGenTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalImageGenTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalImageGenTool.cs b/src/Generated/Models/InternalImageGenTool.cs new file mode 100644 index 000000000..33b290239 --- /dev/null +++ b/src/Generated/Models/InternalImageGenTool.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalImageGenTool : ResponseTool + { + public InternalImageGenTool() : this(InternalToolType.ImageGeneration, null, null, default, default, default, default, default, default, null, default) + { + } + + internal InternalImageGenTool(InternalToolType kind, IDictionary additionalBinaryDataProperties, string model, InternalImageGenToolQuality? quality, InternalImageGenToolSize? size, InternalImageGenToolOutputFormat? outputFormat, int? outputCompression, InternalImageGenToolModeration? moderation, InternalImageGenToolBackground? background, InternalImageGenToolInputImageMask inputImageMask, int? partialImages) : base(kind, additionalBinaryDataProperties) + { + Model = model; + Quality = quality; + Size = size; + OutputFormat = outputFormat; + OutputCompression = outputCompression; + Moderation = moderation; + Background = background; + InputImageMask = inputImageMask; + PartialImages = partialImages; + } + + public string Model { get; set; } + + internal InternalImageGenToolQuality? Quality { get; set; } + + internal InternalImageGenToolSize? Size { get; set; } + + internal InternalImageGenToolOutputFormat? OutputFormat { get; set; } + + public int? OutputCompression { get; set; } + + internal InternalImageGenToolModeration? Moderation { get; set; } + + internal InternalImageGenToolBackground? Background { get; set; } + + internal InternalImageGenToolInputImageMask InputImageMask { get; set; } + + public int? PartialImages { get; set; } + } +} diff --git a/src/Generated/Models/InternalImageGenToolBackground.cs b/src/Generated/Models/InternalImageGenToolBackground.cs new file mode 100644 index 000000000..e2eb285c1 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolBackground.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalImageGenToolBackground : IEquatable + { + private readonly string _value; + private const string TransparentValue = "transparent"; + private const string OpaqueValue = "opaque"; + private const string AutoValue = "auto"; + + public InternalImageGenToolBackground(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalImageGenToolBackground Transparent { get; } = new InternalImageGenToolBackground(TransparentValue); + + internal static InternalImageGenToolBackground Opaque { get; } = new InternalImageGenToolBackground(OpaqueValue); + + internal static InternalImageGenToolBackground Auto { get; } = new InternalImageGenToolBackground(AutoValue); + + public static bool operator ==(InternalImageGenToolBackground left, InternalImageGenToolBackground right) => left.Equals(right); + + public static bool operator !=(InternalImageGenToolBackground left, InternalImageGenToolBackground right) => !left.Equals(right); + + public static implicit operator InternalImageGenToolBackground(string value) => new InternalImageGenToolBackground(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalImageGenToolBackground other && Equals(other); + + public bool Equals(InternalImageGenToolBackground 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/InternalImageGenToolCallItemParam.Serialization.cs b/src/Generated/Models/InternalImageGenToolCallItemParam.Serialization.cs new file mode 100644 index 000000000..db71ddfe9 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolCallItemParam.Serialization.cs @@ -0,0 +1,131 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalImageGenToolCallItemParam : IJsonModel + { + internal InternalImageGenToolCallItemParam() : this(InternalItemType.ImageGenerationCall, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImageGenToolCallItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("result") != true) + { + if (Optional.IsDefined(Result)) + { + writer.WritePropertyName("result"u8); + writer.WriteStringValue(Result); + } + else + { + writer.WriteNull("result"u8); + } + } + } + + InternalImageGenToolCallItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalImageGenToolCallItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImageGenToolCallItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalImageGenToolCallItemParam(document.RootElement, options); + } + + internal static InternalImageGenToolCallItemParam DeserializeInternalImageGenToolCallItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string result = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("result"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + result = null; + continue; + } + result = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalImageGenToolCallItemParam(kind, additionalBinaryDataProperties, result); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalImageGenToolCallItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalImageGenToolCallItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalImageGenToolCallItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalImageGenToolCallItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalImageGenToolCallItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalImageGenToolCallItemParam.cs b/src/Generated/Models/InternalImageGenToolCallItemParam.cs new file mode 100644 index 000000000..f93b72773 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolCallItemParam.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalImageGenToolCallItemParam : InternalItemParam + { + public InternalImageGenToolCallItemParam(string result) : base(InternalItemType.ImageGenerationCall) + { + Result = result; + } + + internal InternalImageGenToolCallItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string result) : base(kind, additionalBinaryDataProperties) + { + Result = result; + } + + public string Result { get; } + } +} diff --git a/src/Generated/Models/InternalImageGenToolCallItemResource.Serialization.cs b/src/Generated/Models/InternalImageGenToolCallItemResource.Serialization.cs new file mode 100644 index 000000000..4f6c81d45 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolCallItemResource.Serialization.cs @@ -0,0 +1,148 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalImageGenToolCallItemResource : IJsonModel + { + internal InternalImageGenToolCallItemResource() : this(InternalItemType.ImageGenerationCall, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImageGenToolCallItemResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("result") != true) + { + if (Optional.IsDefined(Result)) + { + writer.WritePropertyName("result"u8); + writer.WriteStringValue(Result); + } + else + { + writer.WriteNull("result"u8); + } + } + } + + InternalImageGenToolCallItemResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalImageGenToolCallItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImageGenToolCallItemResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalImageGenToolCallItemResource(document.RootElement, options); + } + + internal static InternalImageGenToolCallItemResource DeserializeInternalImageGenToolCallItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalImageGenToolCallItemResourceStatus status = default; + string result = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("status"u8)) + { + status = new InternalImageGenToolCallItemResourceStatus(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("result"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + result = null; + continue; + } + result = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalImageGenToolCallItemResource(kind, id, additionalBinaryDataProperties, status, result); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalImageGenToolCallItemResource)} does not support writing '{options.Format}' format."); + } + } + + InternalImageGenToolCallItemResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalImageGenToolCallItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalImageGenToolCallItemResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalImageGenToolCallItemResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalImageGenToolCallItemResource.cs b/src/Generated/Models/InternalImageGenToolCallItemResource.cs new file mode 100644 index 000000000..e1c6071cc --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolCallItemResource.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalImageGenToolCallItemResource : ResponseItem + { + internal InternalImageGenToolCallItemResource(string id, InternalImageGenToolCallItemResourceStatus status, string result) : base(InternalItemType.ImageGenerationCall, id) + { + Status = status; + Result = result; + } + + internal InternalImageGenToolCallItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalImageGenToolCallItemResourceStatus status, string result) : base(kind, id, additionalBinaryDataProperties) + { + Status = status; + Result = result; + } + + internal InternalImageGenToolCallItemResourceStatus Status { get; } + + public string Result { get; } + } +} diff --git a/src/Generated/Models/InternalImageGenToolCallItemResourceStatus.cs b/src/Generated/Models/InternalImageGenToolCallItemResourceStatus.cs new file mode 100644 index 000000000..32c209d93 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolCallItemResourceStatus.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalImageGenToolCallItemResourceStatus : IEquatable + { + private readonly string _value; + private const string InProgressValue = "in_progress"; + private const string CompletedValue = "completed"; + private const string GeneratingValue = "generating"; + private const string FailedValue = "failed"; + + public InternalImageGenToolCallItemResourceStatus(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalImageGenToolCallItemResourceStatus InProgress { get; } = new InternalImageGenToolCallItemResourceStatus(InProgressValue); + + internal static InternalImageGenToolCallItemResourceStatus Completed { get; } = new InternalImageGenToolCallItemResourceStatus(CompletedValue); + + internal static InternalImageGenToolCallItemResourceStatus Generating { get; } = new InternalImageGenToolCallItemResourceStatus(GeneratingValue); + + internal static InternalImageGenToolCallItemResourceStatus Failed { get; } = new InternalImageGenToolCallItemResourceStatus(FailedValue); + + public static bool operator ==(InternalImageGenToolCallItemResourceStatus left, InternalImageGenToolCallItemResourceStatus right) => left.Equals(right); + + public static bool operator !=(InternalImageGenToolCallItemResourceStatus left, InternalImageGenToolCallItemResourceStatus right) => !left.Equals(right); + + public static implicit operator InternalImageGenToolCallItemResourceStatus(string value) => new InternalImageGenToolCallItemResourceStatus(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalImageGenToolCallItemResourceStatus other && Equals(other); + + public bool Equals(InternalImageGenToolCallItemResourceStatus 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/InternalImageGenToolInputImageMask.Serialization.cs b/src/Generated/Models/InternalImageGenToolInputImageMask.Serialization.cs new file mode 100644 index 000000000..958e67119 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolInputImageMask.Serialization.cs @@ -0,0 +1,139 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalImageGenToolInputImageMask : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImageGenToolInputImageMask)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(ImageUrl) && _additionalBinaryDataProperties?.ContainsKey("image_url") != true) + { + writer.WritePropertyName("image_url"u8); + writer.WriteStringValue(ImageUrl); + } + if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalImageGenToolInputImageMask IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalImageGenToolInputImageMask JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImageGenToolInputImageMask)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalImageGenToolInputImageMask(document.RootElement, options); + } + + internal static InternalImageGenToolInputImageMask DeserializeInternalImageGenToolInputImageMask(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string imageUrl = default; + string fileId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("image_url"u8)) + { + imageUrl = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file_id"u8)) + { + fileId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalImageGenToolInputImageMask(imageUrl, fileId, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalImageGenToolInputImageMask)} does not support writing '{options.Format}' format."); + } + } + + InternalImageGenToolInputImageMask IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalImageGenToolInputImageMask PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalImageGenToolInputImageMask(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalImageGenToolInputImageMask)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalImageGenToolInputImageMask.cs b/src/Generated/Models/InternalImageGenToolInputImageMask.cs new file mode 100644 index 000000000..657d867b6 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolInputImageMask.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalImageGenToolInputImageMask + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalImageGenToolInputImageMask() + { + } + + internal InternalImageGenToolInputImageMask(string imageUrl, string fileId, IDictionary additionalBinaryDataProperties) + { + ImageUrl = imageUrl; + FileId = fileId; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string ImageUrl { get; set; } + + public string FileId { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalImageGenToolModeration.cs b/src/Generated/Models/InternalImageGenToolModeration.cs new file mode 100644 index 000000000..f8d60bf77 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolModeration.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalImageGenToolModeration : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + private const string LowValue = "low"; + + public InternalImageGenToolModeration(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalImageGenToolModeration Auto { get; } = new InternalImageGenToolModeration(AutoValue); + + internal static InternalImageGenToolModeration Low { get; } = new InternalImageGenToolModeration(LowValue); + + public static bool operator ==(InternalImageGenToolModeration left, InternalImageGenToolModeration right) => left.Equals(right); + + public static bool operator !=(InternalImageGenToolModeration left, InternalImageGenToolModeration right) => !left.Equals(right); + + public static implicit operator InternalImageGenToolModeration(string value) => new InternalImageGenToolModeration(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalImageGenToolModeration other && Equals(other); + + public bool Equals(InternalImageGenToolModeration 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/InternalImageGenToolOutputFormat.cs b/src/Generated/Models/InternalImageGenToolOutputFormat.cs new file mode 100644 index 000000000..e588a0577 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolOutputFormat.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalImageGenToolOutputFormat : IEquatable + { + private readonly string _value; + private const string PngValue = "png"; + private const string WebpValue = "webp"; + private const string JpegValue = "jpeg"; + + public InternalImageGenToolOutputFormat(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalImageGenToolOutputFormat Png { get; } = new InternalImageGenToolOutputFormat(PngValue); + + internal static InternalImageGenToolOutputFormat Webp { get; } = new InternalImageGenToolOutputFormat(WebpValue); + + internal static InternalImageGenToolOutputFormat Jpeg { get; } = new InternalImageGenToolOutputFormat(JpegValue); + + public static bool operator ==(InternalImageGenToolOutputFormat left, InternalImageGenToolOutputFormat right) => left.Equals(right); + + public static bool operator !=(InternalImageGenToolOutputFormat left, InternalImageGenToolOutputFormat right) => !left.Equals(right); + + public static implicit operator InternalImageGenToolOutputFormat(string value) => new InternalImageGenToolOutputFormat(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalImageGenToolOutputFormat other && Equals(other); + + public bool Equals(InternalImageGenToolOutputFormat 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/InternalImageGenToolQuality.cs b/src/Generated/Models/InternalImageGenToolQuality.cs new file mode 100644 index 000000000..5efbc280d --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolQuality.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalImageGenToolQuality : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + private const string AutoValue = "auto"; + + public InternalImageGenToolQuality(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalImageGenToolQuality Low { get; } = new InternalImageGenToolQuality(LowValue); + + internal static InternalImageGenToolQuality Medium { get; } = new InternalImageGenToolQuality(MediumValue); + + internal static InternalImageGenToolQuality High { get; } = new InternalImageGenToolQuality(HighValue); + + internal static InternalImageGenToolQuality Auto { get; } = new InternalImageGenToolQuality(AutoValue); + + public static bool operator ==(InternalImageGenToolQuality left, InternalImageGenToolQuality right) => left.Equals(right); + + public static bool operator !=(InternalImageGenToolQuality left, InternalImageGenToolQuality right) => !left.Equals(right); + + public static implicit operator InternalImageGenToolQuality(string value) => new InternalImageGenToolQuality(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalImageGenToolQuality other && Equals(other); + + public bool Equals(InternalImageGenToolQuality 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/InternalImageGenToolSize.cs b/src/Generated/Models/InternalImageGenToolSize.cs new file mode 100644 index 000000000..8c17d82b6 --- /dev/null +++ b/src/Generated/Models/InternalImageGenToolSize.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalImageGenToolSize : IEquatable + { + private readonly string _value; + private const string _1024x1024Value = "1024x1024"; + private const string _1024x1536Value = "1024x1536"; + private const string _1536x1024Value = "1536x1024"; + private const string AutoValue = "auto"; + + public InternalImageGenToolSize(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalImageGenToolSize _1024x1024 { get; } = new InternalImageGenToolSize(_1024x1024Value); + + internal static InternalImageGenToolSize _1024x1536 { get; } = new InternalImageGenToolSize(_1024x1536Value); + + internal static InternalImageGenToolSize _1536x1024 { get; } = new InternalImageGenToolSize(_1536x1024Value); + + internal static InternalImageGenToolSize Auto { get; } = new InternalImageGenToolSize(AutoValue); + + public static bool operator ==(InternalImageGenToolSize left, InternalImageGenToolSize right) => left.Equals(right); + + public static bool operator !=(InternalImageGenToolSize left, InternalImageGenToolSize right) => !left.Equals(right); + + public static implicit operator InternalImageGenToolSize(string value) => new InternalImageGenToolSize(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalImageGenToolSize other && Equals(other); + + public bool Equals(InternalImageGenToolSize 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/InternalImplicitUserMessage.Serialization.cs b/src/Generated/Models/InternalImplicitUserMessage.Serialization.cs new file mode 100644 index 000000000..66c520584 --- /dev/null +++ b/src/Generated/Models/InternalImplicitUserMessage.Serialization.cs @@ -0,0 +1,139 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalImplicitUserMessage : IJsonModel + { + internal InternalImplicitUserMessage() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImplicitUserMessage)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Content); +#else + using (JsonDocument document = JsonDocument.Parse(Content)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalImplicitUserMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalImplicitUserMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalImplicitUserMessage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalImplicitUserMessage(document.RootElement, options); + } + + internal static InternalImplicitUserMessage DeserializeInternalImplicitUserMessage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData content = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("content"u8)) + { + content = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalImplicitUserMessage(content, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalImplicitUserMessage)} does not support writing '{options.Format}' format."); + } + } + + InternalImplicitUserMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalImplicitUserMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalImplicitUserMessage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalImplicitUserMessage)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalImplicitUserMessage.cs b/src/Generated/Models/InternalImplicitUserMessage.cs new file mode 100644 index 000000000..d99a8b755 --- /dev/null +++ b/src/Generated/Models/InternalImplicitUserMessage.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalImplicitUserMessage + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalImplicitUserMessage(BinaryData content) + { + Argument.AssertNotNull(content, nameof(content)); + + Content = content; + } + + internal InternalImplicitUserMessage(BinaryData content, IDictionary additionalBinaryDataProperties) + { + Content = content; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public BinaryData Content { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalIncludable.cs b/src/Generated/Models/InternalIncludable.cs new file mode 100644 index 000000000..4c267a22b --- /dev/null +++ b/src/Generated/Models/InternalIncludable.cs @@ -0,0 +1,53 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalIncludable : IEquatable + { + private readonly string _value; + private const string FileSearchCallResultsValue = "file_search_call.results"; + private const string MessageInputImageImageUrlValue = "message.input_image.image_url"; + private const string ComputerCallOutputOutputImageUrlValue = "computer_call_output.output.image_url"; + private const string ReasoningEncryptedContentValue = "reasoning.encrypted_content"; + private const string CodeInterpreterCallOutputsValue = "code_interpreter_call.outputs"; + + public InternalIncludable(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalIncludable FileSearchCallResults { get; } = new InternalIncludable(FileSearchCallResultsValue); + + internal static InternalIncludable MessageInputImageImageUrl { get; } = new InternalIncludable(MessageInputImageImageUrlValue); + + internal static InternalIncludable ComputerCallOutputOutputImageUrl { get; } = new InternalIncludable(ComputerCallOutputOutputImageUrlValue); + + internal static InternalIncludable ReasoningEncryptedContent { get; } = new InternalIncludable(ReasoningEncryptedContentValue); + + internal static InternalIncludable CodeInterpreterCallOutputs { get; } = new InternalIncludable(CodeInterpreterCallOutputsValue); + + public static bool operator ==(InternalIncludable left, InternalIncludable right) => left.Equals(right); + + public static bool operator !=(InternalIncludable left, InternalIncludable right) => !left.Equals(right); + + public static implicit operator InternalIncludable(string value) => new InternalIncludable(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalIncludable other && Equals(other); + + public bool Equals(InternalIncludable 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/InternalIncludedRunStepProperty.cs b/src/Generated/Models/InternalIncludedRunStepProperty.cs index f401e03d3..6ea802fa4 100644 --- a/src/Generated/Models/InternalIncludedRunStepProperty.cs +++ b/src/Generated/Models/InternalIncludedRunStepProperty.cs @@ -20,7 +20,7 @@ public InternalIncludedRunStepProperty(string value) _value = value; } - public static InternalIncludedRunStepProperty FileSearchResultContent { get; } = new InternalIncludedRunStepProperty(FileSearchResultContentValue); + internal static InternalIncludedRunStepProperty FileSearchResultContent { get; } = new InternalIncludedRunStepProperty(FileSearchResultContentValue); public static bool operator ==(InternalIncludedRunStepProperty left, InternalIncludedRunStepProperty right) => left.Equals(right); diff --git a/src/Generated/Models/InternalItemContentInputAudio.Serialization.cs b/src/Generated/Models/InternalItemContentInputAudio.Serialization.cs new file mode 100644 index 000000000..fd7bc704b --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputAudio.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentInputAudio : IJsonModel + { + internal InternalItemContentInputAudio() : this(InternalItemContentType.InputAudio, null, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentInputAudio)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStringValue(Data); + } + if (_additionalBinaryDataProperties?.ContainsKey("format") != true) + { + writer.WritePropertyName("format"u8); + writer.WriteStringValue(Format.ToString()); + } + } + + InternalItemContentInputAudio IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalItemContentInputAudio)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentInputAudio)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemContentInputAudio(document.RootElement, options); + } + + internal static InternalItemContentInputAudio DeserializeInternalItemContentInputAudio(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemContentType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string data = default; + InternalItemContentInputAudioFormat format = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("data"u8)) + { + data = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("format"u8)) + { + format = new InternalItemContentInputAudioFormat(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalItemContentInputAudio(internalType, additionalBinaryDataProperties, data, format); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemContentInputAudio)} does not support writing '{options.Format}' format."); + } + } + + InternalItemContentInputAudio IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalItemContentInputAudio)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemContentInputAudio(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemContentInputAudio)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemContentInputAudio.cs b/src/Generated/Models/InternalItemContentInputAudio.cs new file mode 100644 index 000000000..10d07c83c --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputAudio.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentInputAudio : ResponseContentPart + { + internal InternalItemContentInputAudio(string data, InternalItemContentInputAudioFormat format) : base(InternalItemContentType.InputAudio) + { + Argument.AssertNotNull(data, nameof(data)); + + Data = data; + Format = format; + } + + internal InternalItemContentInputAudio(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties, string data, InternalItemContentInputAudioFormat format) : base(internalType, additionalBinaryDataProperties) + { + Data = data; + Format = format; + } + + public string Data { get; set; } + + internal InternalItemContentInputAudioFormat Format { get; set; } + } +} diff --git a/src/Generated/Models/InternalItemContentInputAudioFormat.cs b/src/Generated/Models/InternalItemContentInputAudioFormat.cs new file mode 100644 index 000000000..62573608d --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputAudioFormat.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalItemContentInputAudioFormat : IEquatable + { + private readonly string _value; + private const string Mp3Value = "mp3"; + private const string WavValue = "wav"; + + public InternalItemContentInputAudioFormat(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalItemContentInputAudioFormat Mp3 { get; } = new InternalItemContentInputAudioFormat(Mp3Value); + + internal static InternalItemContentInputAudioFormat Wav { get; } = new InternalItemContentInputAudioFormat(WavValue); + + public static bool operator ==(InternalItemContentInputAudioFormat left, InternalItemContentInputAudioFormat right) => left.Equals(right); + + public static bool operator !=(InternalItemContentInputAudioFormat left, InternalItemContentInputAudioFormat right) => !left.Equals(right); + + public static implicit operator InternalItemContentInputAudioFormat(string value) => new InternalItemContentInputAudioFormat(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalItemContentInputAudioFormat other && Equals(other); + + public bool Equals(InternalItemContentInputAudioFormat 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/InternalItemContentInputFile.Serialization.cs b/src/Generated/Models/InternalItemContentInputFile.Serialization.cs new file mode 100644 index 000000000..8787d263f --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputFile.Serialization.cs @@ -0,0 +1,142 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentInputFile : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentInputFile)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (Optional.IsDefined(Filename) && _additionalBinaryDataProperties?.ContainsKey("filename") != true) + { + writer.WritePropertyName("filename"u8); + writer.WriteStringValue(Filename); + } + if (Optional.IsDefined(InternalFileData) && _additionalBinaryDataProperties?.ContainsKey("file_data") != true) + { + writer.WritePropertyName("file_data"u8); + writer.WriteStringValue(InternalFileData); + } + } + + InternalItemContentInputFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalItemContentInputFile)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentInputFile)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemContentInputFile(document.RootElement, options); + } + + internal static InternalItemContentInputFile DeserializeInternalItemContentInputFile(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemContentType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string fileId = default; + string filename = default; + string internalFileData = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("file_id"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + fileId = null; + continue; + } + fileId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("filename"u8)) + { + filename = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file_data"u8)) + { + internalFileData = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalItemContentInputFile(internalType, additionalBinaryDataProperties, fileId, filename, internalFileData); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemContentInputFile)} does not support writing '{options.Format}' format."); + } + } + + InternalItemContentInputFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalItemContentInputFile)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemContentInputFile(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemContentInputFile)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemContentInputFile.cs b/src/Generated/Models/InternalItemContentInputFile.cs new file mode 100644 index 000000000..31f865065 --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputFile.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentInputFile : ResponseContentPart + { + public InternalItemContentInputFile() : this(InternalItemContentType.InputFile, null, null, null, null) + { + } + + internal InternalItemContentInputFile(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties, string fileId, string filename, string internalFileData) : base(internalType, additionalBinaryDataProperties) + { + FileId = fileId; + Filename = filename; + InternalFileData = internalFileData; + } + + public string FileId { get; set; } + + public string Filename { get; set; } + } +} diff --git a/src/Generated/Models/InternalItemContentInputImage.Serialization.cs b/src/Generated/Models/InternalItemContentInputImage.Serialization.cs new file mode 100644 index 000000000..4745a16cb --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputImage.Serialization.cs @@ -0,0 +1,151 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentInputImage : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentInputImage)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(ImageUrl) && _additionalBinaryDataProperties?.ContainsKey("image_url") != true) + { + writer.WritePropertyName("image_url"u8); + writer.WriteStringValue(ImageUrl); + } + if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (Optional.IsDefined(Detail) && _additionalBinaryDataProperties?.ContainsKey("detail") != true) + { + writer.WritePropertyName("detail"u8); + writer.WriteStringValue(Detail.Value.ToString()); + } + } + + InternalItemContentInputImage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalItemContentInputImage)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentInputImage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemContentInputImage(document.RootElement, options); + } + + internal static InternalItemContentInputImage DeserializeInternalItemContentInputImage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemContentType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string imageUrl = default; + string fileId = default; + ResponseImageDetailLevel? detail = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("image_url"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + imageUrl = null; + continue; + } + imageUrl = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("file_id"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + fileId = null; + continue; + } + fileId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("detail"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + detail = new ResponseImageDetailLevel(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalItemContentInputImage(internalType, additionalBinaryDataProperties, imageUrl, fileId, detail); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemContentInputImage)} does not support writing '{options.Format}' format."); + } + } + + InternalItemContentInputImage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalItemContentInputImage)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemContentInputImage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemContentInputImage)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemContentInputImage.cs b/src/Generated/Models/InternalItemContentInputImage.cs new file mode 100644 index 000000000..bbbe3fa32 --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputImage.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentInputImage : ResponseContentPart + { + public InternalItemContentInputImage() : this(InternalItemContentType.InputImage, null, null, null, default) + { + } + + internal InternalItemContentInputImage(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties, string imageUrl, string fileId, ResponseImageDetailLevel? detail) : base(internalType, additionalBinaryDataProperties) + { + ImageUrl = imageUrl; + FileId = fileId; + Detail = detail; + } + + public string ImageUrl { get; set; } + + public string FileId { get; set; } + + public ResponseImageDetailLevel? Detail { get; set; } + } +} diff --git a/src/Generated/Models/InternalItemContentInputText.Serialization.cs b/src/Generated/Models/InternalItemContentInputText.Serialization.cs new file mode 100644 index 000000000..670c81ffe --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputText.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentInputText : IJsonModel + { + internal InternalItemContentInputText() : this(InternalItemContentType.InputText, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentInputText)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(InternalText); + } + } + + InternalItemContentInputText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalItemContentInputText)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentInputText)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemContentInputText(document.RootElement, options); + } + + internal static InternalItemContentInputText DeserializeInternalItemContentInputText(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemContentType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string internalText = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("text"u8)) + { + internalText = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalItemContentInputText(internalType, additionalBinaryDataProperties, internalText); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemContentInputText)} does not support writing '{options.Format}' format."); + } + } + + InternalItemContentInputText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalItemContentInputText)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemContentInputText(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemContentInputText)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemContentInputText.cs b/src/Generated/Models/InternalItemContentInputText.cs new file mode 100644 index 000000000..a03e44216 --- /dev/null +++ b/src/Generated/Models/InternalItemContentInputText.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentInputText : ResponseContentPart + { + public InternalItemContentInputText(string internalText) : base(InternalItemContentType.InputText) + { + Argument.AssertNotNull(internalText, nameof(internalText)); + + InternalText = internalText; + } + + internal InternalItemContentInputText(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties, string internalText) : base(internalType, additionalBinaryDataProperties) + { + InternalText = internalText; + } + } +} diff --git a/src/Generated/Models/InternalItemContentOutputAudio.Serialization.cs b/src/Generated/Models/InternalItemContentOutputAudio.Serialization.cs new file mode 100644 index 000000000..ed19cb918 --- /dev/null +++ b/src/Generated/Models/InternalItemContentOutputAudio.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentOutputAudio : IJsonModel + { + internal InternalItemContentOutputAudio() : this(InternalItemContentType.OutputAudio, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentOutputAudio)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStringValue(Data); + } + if (_additionalBinaryDataProperties?.ContainsKey("transcript") != true) + { + writer.WritePropertyName("transcript"u8); + writer.WriteStringValue(Transcript); + } + } + + InternalItemContentOutputAudio IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalItemContentOutputAudio)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentOutputAudio)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemContentOutputAudio(document.RootElement, options); + } + + internal static InternalItemContentOutputAudio DeserializeInternalItemContentOutputAudio(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemContentType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string data = default; + string transcript = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("data"u8)) + { + data = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("transcript"u8)) + { + transcript = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalItemContentOutputAudio(internalType, additionalBinaryDataProperties, data, transcript); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemContentOutputAudio)} does not support writing '{options.Format}' format."); + } + } + + InternalItemContentOutputAudio IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalItemContentOutputAudio)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemContentOutputAudio(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemContentOutputAudio)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemContentOutputAudio.cs b/src/Generated/Models/InternalItemContentOutputAudio.cs new file mode 100644 index 000000000..882ce4c04 --- /dev/null +++ b/src/Generated/Models/InternalItemContentOutputAudio.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentOutputAudio : ResponseContentPart + { + public InternalItemContentOutputAudio(string data, string transcript) : base(InternalItemContentType.OutputAudio) + { + Argument.AssertNotNull(data, nameof(data)); + Argument.AssertNotNull(transcript, nameof(transcript)); + + Data = data; + Transcript = transcript; + } + + internal InternalItemContentOutputAudio(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties, string data, string transcript) : base(internalType, additionalBinaryDataProperties) + { + Data = data; + Transcript = transcript; + } + + public string Data { get; set; } + + public string Transcript { get; set; } + } +} diff --git a/src/Generated/Models/InternalItemContentOutputText.Serialization.cs b/src/Generated/Models/InternalItemContentOutputText.Serialization.cs new file mode 100644 index 000000000..f4a4d6237 --- /dev/null +++ b/src/Generated/Models/InternalItemContentOutputText.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentOutputText : IJsonModel + { + internal InternalItemContentOutputText() : this(InternalItemContentType.OutputText, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentOutputText)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("annotations") != true) + { + writer.WritePropertyName("annotations"u8); + writer.WriteStartArray(); + foreach (ResponseMessageAnnotation item in Annotations) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsCollectionDefined(Logprobs) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) + { + writer.WritePropertyName("logprobs"u8); + writer.WriteStartArray(); + foreach (InternalLogProb item in Logprobs) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(InternalText); + } + } + + InternalItemContentOutputText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalItemContentOutputText)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentOutputText)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemContentOutputText(document.RootElement, options); + } + + internal static InternalItemContentOutputText DeserializeInternalItemContentOutputText(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemContentType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IList annotations = default; + IList logprobs = default; + string internalText = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("annotations"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseMessageAnnotation.DeserializeResponseMessageAnnotation(item, options)); + } + annotations = array; + continue; + } + if (prop.NameEquals("logprobs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalLogProb.DeserializeInternalLogProb(item, options)); + } + logprobs = array; + continue; + } + if (prop.NameEquals("text"u8)) + { + internalText = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalItemContentOutputText(internalType, additionalBinaryDataProperties, annotations, logprobs ?? new ChangeTrackingList(), internalText); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemContentOutputText)} does not support writing '{options.Format}' format."); + } + } + + InternalItemContentOutputText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalItemContentOutputText)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemContentOutputText(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemContentOutputText)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemContentOutputText.cs b/src/Generated/Models/InternalItemContentOutputText.cs new file mode 100644 index 000000000..f459bfb35 --- /dev/null +++ b/src/Generated/Models/InternalItemContentOutputText.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentOutputText : ResponseContentPart + { + public InternalItemContentOutputText(IEnumerable annotations, string internalText) : base(InternalItemContentType.OutputText) + { + Argument.AssertNotNull(annotations, nameof(annotations)); + Argument.AssertNotNull(internalText, nameof(internalText)); + + Annotations = annotations.ToList(); + Logprobs = new ChangeTrackingList(); + InternalText = internalText; + } + + internal InternalItemContentOutputText(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties, IList annotations, IList logprobs, string internalText) : base(internalType, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Annotations = annotations ?? new ChangeTrackingList(); + Logprobs = logprobs ?? new ChangeTrackingList(); + InternalText = internalText; + } + + public IList Annotations { get; } + + internal IList Logprobs { get; } + } +} diff --git a/src/Generated/Models/InternalItemContentRefusal.Serialization.cs b/src/Generated/Models/InternalItemContentRefusal.Serialization.cs new file mode 100644 index 000000000..5bd9069d1 --- /dev/null +++ b/src/Generated/Models/InternalItemContentRefusal.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentRefusal : IJsonModel + { + internal InternalItemContentRefusal() : this(InternalItemContentType.Refusal, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentRefusal)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) + { + writer.WritePropertyName("refusal"u8); + writer.WriteStringValue(InternalRefusal); + } + } + + InternalItemContentRefusal IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalItemContentRefusal)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemContentRefusal)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemContentRefusal(document.RootElement, options); + } + + internal static InternalItemContentRefusal DeserializeInternalItemContentRefusal(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemContentType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string internalRefusal = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalItemContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("refusal"u8)) + { + internalRefusal = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalItemContentRefusal(internalType, additionalBinaryDataProperties, internalRefusal); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemContentRefusal)} does not support writing '{options.Format}' format."); + } + } + + InternalItemContentRefusal IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalItemContentRefusal)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemContentRefusal(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemContentRefusal)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemContentRefusal.cs b/src/Generated/Models/InternalItemContentRefusal.cs new file mode 100644 index 000000000..8ebf54ad1 --- /dev/null +++ b/src/Generated/Models/InternalItemContentRefusal.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemContentRefusal : ResponseContentPart + { + public InternalItemContentRefusal(string internalRefusal) : base(InternalItemContentType.Refusal) + { + Argument.AssertNotNull(internalRefusal, nameof(internalRefusal)); + + InternalRefusal = internalRefusal; + } + + internal InternalItemContentRefusal(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties, string internalRefusal) : base(internalType, additionalBinaryDataProperties) + { + InternalRefusal = internalRefusal; + } + } +} diff --git a/src/Generated/Models/InternalItemContentType.cs b/src/Generated/Models/InternalItemContentType.cs new file mode 100644 index 000000000..57a3ba440 --- /dev/null +++ b/src/Generated/Models/InternalItemContentType.cs @@ -0,0 +1,59 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalItemContentType : IEquatable + { + private readonly string _value; + private const string InputTextValue = "input_text"; + private const string InputAudioValue = "input_audio"; + private const string InputImageValue = "input_image"; + private const string InputFileValue = "input_file"; + private const string OutputTextValue = "output_text"; + private const string OutputAudioValue = "output_audio"; + private const string RefusalValue = "refusal"; + + public InternalItemContentType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalItemContentType InputText { get; } = new InternalItemContentType(InputTextValue); + + internal static InternalItemContentType InputAudio { get; } = new InternalItemContentType(InputAudioValue); + + internal static InternalItemContentType InputImage { get; } = new InternalItemContentType(InputImageValue); + + internal static InternalItemContentType InputFile { get; } = new InternalItemContentType(InputFileValue); + + internal static InternalItemContentType OutputText { get; } = new InternalItemContentType(OutputTextValue); + + internal static InternalItemContentType OutputAudio { get; } = new InternalItemContentType(OutputAudioValue); + + internal static InternalItemContentType Refusal { get; } = new InternalItemContentType(RefusalValue); + + public static bool operator ==(InternalItemContentType left, InternalItemContentType right) => left.Equals(right); + + public static bool operator !=(InternalItemContentType left, InternalItemContentType right) => !left.Equals(right); + + public static implicit operator InternalItemContentType(string value) => new InternalItemContentType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalItemContentType other && Equals(other); + + public bool Equals(InternalItemContentType 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/InternalItemParam.Serialization.cs b/src/Generated/Models/InternalItemParam.Serialization.cs new file mode 100644 index 000000000..e77c5c7a2 --- /dev/null +++ b/src/Generated/Models/InternalItemParam.Serialization.cs @@ -0,0 +1,160 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + [PersistableModelProxy(typeof(InternalUnknownItemParam))] + internal abstract partial class InternalItemParam : IJsonModel + { + internal InternalItemParam() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemParam)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemParam(document.RootElement, options); + } + + internal static InternalItemParam DeserializeInternalItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "file_search_call": + return InternalFileSearchToolCallItemParam.DeserializeInternalFileSearchToolCallItemParam(element, options); + case "computer_call": + return InternalComputerUsePreviewToolCallItemParam.DeserializeInternalComputerUsePreviewToolCallItemParam(element, options); + case "computer_call_output": + return InternalComputerUsePreviewToolCallOutputItemParam.DeserializeInternalComputerUsePreviewToolCallOutputItemParam(element, options); + case "web_search_call": + return InternalWebSearchToolCallItemParam.DeserializeInternalWebSearchToolCallItemParam(element, options); + case "function_call": + return InternalFunctionToolCallItemParam.DeserializeInternalFunctionToolCallItemParam(element, options); + case "function_call_output": + return InternalFunctionToolCallOutputItemParam.DeserializeInternalFunctionToolCallOutputItemParam(element, options); + case "reasoning": + return InternalReasoningItemParam.DeserializeInternalReasoningItemParam(element, options); + case "item_reference": + return InternalItemReferenceItemParam.DeserializeInternalItemReferenceItemParam(element, options); + case "image_generation_call": + return InternalImageGenToolCallItemParam.DeserializeInternalImageGenToolCallItemParam(element, options); + case "code_interpreter_call": + return InternalCodeInterpreterToolCallItemParam.DeserializeInternalCodeInterpreterToolCallItemParam(element, options); + case "local_shell_call": + return InternalLocalShellToolCallItemParam.DeserializeInternalLocalShellToolCallItemParam(element, options); + case "local_shell_call_output": + return InternalLocalShellToolCallOutputItemParam.DeserializeInternalLocalShellToolCallOutputItemParam(element, options); + case "mcp_list_tools": + return InternalMCPListToolsItemParam.DeserializeInternalMCPListToolsItemParam(element, options); + case "mcp_approval_request": + return InternalMCPApprovalRequestItemParam.DeserializeInternalMCPApprovalRequestItemParam(element, options); + case "mcp_approval_response": + return InternalMCPApprovalResponseItemParam.DeserializeInternalMCPApprovalResponseItemParam(element, options); + case "mcp_call": + return InternalMCPCallItemParam.DeserializeInternalMCPCallItemParam(element, options); + case "message": + return InternalResponsesMessageItemParam.DeserializeInternalResponsesMessageItemParam(element, options); + } + } + return InternalUnknownItemParam.DeserializeInternalUnknownItemParam(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemParam.cs b/src/Generated/Models/InternalItemParam.cs new file mode 100644 index 000000000..cbcca0791 --- /dev/null +++ b/src/Generated/Models/InternalItemParam.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal abstract partial class InternalItemParam + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalItemParam(InternalItemType kind) + { + Kind = kind; + } + + internal InternalItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalItemType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalItemReferenceItemParam.Serialization.cs b/src/Generated/Models/InternalItemReferenceItemParam.Serialization.cs new file mode 100644 index 000000000..b5865f68f --- /dev/null +++ b/src/Generated/Models/InternalItemReferenceItemParam.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemReferenceItemParam : IJsonModel + { + internal InternalItemReferenceItemParam() : this(InternalItemType.ItemReference, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemReferenceItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + } + + InternalItemReferenceItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalItemReferenceItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemReferenceItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemReferenceItemParam(document.RootElement, options); + } + + internal static InternalItemReferenceItemParam DeserializeInternalItemReferenceItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string id = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalItemReferenceItemParam(kind, additionalBinaryDataProperties, id); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemReferenceItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalItemReferenceItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalItemReferenceItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemReferenceItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemReferenceItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalItemReferenceItemParam.cs b/src/Generated/Models/InternalItemReferenceItemParam.cs new file mode 100644 index 000000000..22119ab1f --- /dev/null +++ b/src/Generated/Models/InternalItemReferenceItemParam.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalItemReferenceItemParam : InternalItemParam + { + public InternalItemReferenceItemParam(string id) : base(InternalItemType.ItemReference) + { + Argument.AssertNotNull(id, nameof(id)); + + Id = id; + } + + internal InternalItemReferenceItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string id) : base(kind, additionalBinaryDataProperties) + { + Id = id; + } + + public string Id { get; } + } +} diff --git a/src/Generated/Models/InternalItemType.cs b/src/Generated/Models/InternalItemType.cs new file mode 100644 index 000000000..38dea6f37 --- /dev/null +++ b/src/Generated/Models/InternalItemType.cs @@ -0,0 +1,89 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalItemType : IEquatable + { + private readonly string _value; + private const string MessageValue = "message"; + private const string FileSearchCallValue = "file_search_call"; + private const string FunctionCallValue = "function_call"; + private const string FunctionCallOutputValue = "function_call_output"; + private const string ComputerCallValue = "computer_call"; + private const string ComputerCallOutputValue = "computer_call_output"; + private const string WebSearchCallValue = "web_search_call"; + private const string ReasoningValue = "reasoning"; + private const string ItemReferenceValue = "item_reference"; + private const string ImageGenerationCallValue = "image_generation_call"; + private const string CodeInterpreterCallValue = "code_interpreter_call"; + private const string LocalShellCallValue = "local_shell_call"; + private const string LocalShellCallOutputValue = "local_shell_call_output"; + private const string McpListToolsValue = "mcp_list_tools"; + private const string McpApprovalRequestValue = "mcp_approval_request"; + private const string McpApprovalResponseValue = "mcp_approval_response"; + private const string McpCallValue = "mcp_call"; + + public InternalItemType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalItemType Message { get; } = new InternalItemType(MessageValue); + + internal static InternalItemType FileSearchCall { get; } = new InternalItemType(FileSearchCallValue); + + internal static InternalItemType FunctionCall { get; } = new InternalItemType(FunctionCallValue); + + internal static InternalItemType FunctionCallOutput { get; } = new InternalItemType(FunctionCallOutputValue); + + internal static InternalItemType ComputerCall { get; } = new InternalItemType(ComputerCallValue); + + internal static InternalItemType ComputerCallOutput { get; } = new InternalItemType(ComputerCallOutputValue); + + internal static InternalItemType WebSearchCall { get; } = new InternalItemType(WebSearchCallValue); + + internal static InternalItemType Reasoning { get; } = new InternalItemType(ReasoningValue); + + internal static InternalItemType ItemReference { get; } = new InternalItemType(ItemReferenceValue); + + internal static InternalItemType ImageGenerationCall { get; } = new InternalItemType(ImageGenerationCallValue); + + internal static InternalItemType CodeInterpreterCall { get; } = new InternalItemType(CodeInterpreterCallValue); + + internal static InternalItemType LocalShellCall { get; } = new InternalItemType(LocalShellCallValue); + + internal static InternalItemType LocalShellCallOutput { get; } = new InternalItemType(LocalShellCallOutputValue); + + internal static InternalItemType McpListTools { get; } = new InternalItemType(McpListToolsValue); + + internal static InternalItemType McpApprovalRequest { get; } = new InternalItemType(McpApprovalRequestValue); + + internal static InternalItemType McpApprovalResponse { get; } = new InternalItemType(McpApprovalResponseValue); + + internal static InternalItemType McpCall { get; } = new InternalItemType(McpCallValue); + + public static bool operator ==(InternalItemType left, InternalItemType right) => left.Equals(right); + + public static bool operator !=(InternalItemType left, InternalItemType right) => !left.Equals(right); + + public static implicit operator InternalItemType(string value) => new InternalItemType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalItemType other && Equals(other); + + public bool Equals(InternalItemType 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/InternalListAssistantsResponse.Serialization.cs b/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs index a3e307d87..043c4599e 100644 --- a/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListAssistantsResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalListAssistantsResponse : IJsonModel { - internal InternalListAssistantsResponse() + internal InternalListAssistantsResponse() : this(null, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); @@ -61,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +87,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListAssistantsResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListAssistantsResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,7 +105,7 @@ internal static InternalListAssistantsResponse DeserializeInternalListAssistants { return null; } - InternalListAssistantsResponseObject @object = default; + string @object = default; IReadOnlyList data = default; string firstId = default; string lastId = default; @@ -111,7 +115,7 @@ internal static InternalListAssistantsResponse DeserializeInternalListAssistants { if (prop.NameEquals("object"u8)) { - @object = new InternalListAssistantsResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("data"u8)) @@ -139,6 +143,7 @@ internal static InternalListAssistantsResponse DeserializeInternalListAssistants hasMore = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListAssistantsResponse( @@ -152,13 +157,14 @@ internal static InternalListAssistantsResponse DeserializeInternalListAssistants BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListAssistantsResponse)} does not support writing '{options.Format}' format."); } @@ -166,6 +172,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListAssistantsResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListAssistantsResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +189,5 @@ protected virtual InternalListAssistantsResponse PersistableModelCreateCore(Bina } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListAssistantsResponse internalListAssistantsResponse) - { - if (internalListAssistantsResponse == null) - { - return null; - } - return BinaryContent.Create(internalListAssistantsResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListAssistantsResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListAssistantsResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListAssistantsResponse.cs b/src/Generated/Models/InternalListAssistantsResponse.cs index 60504b4ef..be6744124 100644 --- a/src/Generated/Models/InternalListAssistantsResponse.cs +++ b/src/Generated/Models/InternalListAssistantsResponse.cs @@ -20,17 +20,18 @@ internal InternalListAssistantsResponse(string firstId, string lastId, bool hasM HasMore = hasMore; } - internal InternalListAssistantsResponse(InternalListAssistantsResponseObject @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + internal InternalListAssistantsResponse(string @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Object = @object; - Data = data; + Data = data ?? new ChangeTrackingList(); FirstId = firstId; LastId = lastId; HasMore = hasMore; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalListAssistantsResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; public IReadOnlyList Data { get; } diff --git a/src/Generated/Models/InternalListAssistantsResponseObject.cs b/src/Generated/Models/InternalListAssistantsResponseObject.cs deleted file mode 100644 index 3ee6613cc..000000000 --- a/src/Generated/Models/InternalListAssistantsResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalListAssistantsResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListAssistantsResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListAssistantsResponseObject List { get; } = new InternalListAssistantsResponseObject(ListValue); - - public static bool operator ==(InternalListAssistantsResponseObject left, InternalListAssistantsResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListAssistantsResponseObject left, InternalListAssistantsResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListAssistantsResponseObject(string value) => new InternalListAssistantsResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListAssistantsResponseObject other && Equals(other); - - public bool Equals(InternalListAssistantsResponseObject 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/InternalListBatchesResponse.Serialization.cs b/src/Generated/Models/InternalListBatchesResponse.Serialization.cs index 998c84308..b06390c55 100644 --- a/src/Generated/Models/InternalListBatchesResponse.Serialization.cs +++ b/src/Generated/Models/InternalListBatchesResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Batch { internal partial class InternalListBatchesResponse : IJsonModel { - internal InternalListBatchesResponse() + internal InternalListBatchesResponse() : this(null, null, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -59,8 +60,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +86,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListBatchesResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListBatchesResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -105,7 +108,7 @@ internal static InternalListBatchesResponse DeserializeInternalListBatchesRespon string firstId = default; string lastId = default; bool hasMore = default; - InternalListBatchesResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -136,9 +139,10 @@ internal static InternalListBatchesResponse DeserializeInternalListBatchesRespon } if (prop.NameEquals("object"u8)) { - @object = new InternalListBatchesResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListBatchesResponse( @@ -152,13 +156,14 @@ internal static InternalListBatchesResponse DeserializeInternalListBatchesRespon BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListBatchesResponse)} does not support writing '{options.Format}' format."); } @@ -166,6 +171,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListBatchesResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListBatchesResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +188,5 @@ protected virtual InternalListBatchesResponse PersistableModelCreateCore(BinaryD } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListBatchesResponse internalListBatchesResponse) - { - if (internalListBatchesResponse == null) - { - return null; - } - return BinaryContent.Create(internalListBatchesResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListBatchesResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListBatchesResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListBatchesResponse.cs b/src/Generated/Models/InternalListBatchesResponse.cs index 588ef3f71..21748f7e7 100644 --- a/src/Generated/Models/InternalListBatchesResponse.cs +++ b/src/Generated/Models/InternalListBatchesResponse.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; namespace OpenAI.Batch { @@ -18,9 +19,10 @@ internal InternalListBatchesResponse(IEnumerable data, bool ha HasMore = hasMore; } - internal InternalListBatchesResponse(IList data, string firstId, string lastId, bool hasMore, InternalListBatchesResponseObject @object, IDictionary additionalBinaryDataProperties) + internal InternalListBatchesResponse(IList data, string firstId, string lastId, bool hasMore, string @object, IDictionary additionalBinaryDataProperties) { - Data = data; + // Plugin customization: ensure initialization of collections + Data = data ?? new ChangeTrackingList(); FirstId = firstId; LastId = lastId; HasMore = hasMore; @@ -28,7 +30,7 @@ internal InternalListBatchesResponse(IList data, string firstI _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public IList Data { get; } + internal IList Data { get; } public string FirstId { get; } @@ -36,7 +38,7 @@ internal InternalListBatchesResponse(IList data, string firstI public bool HasMore { get; } - public InternalListBatchesResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalListBatchesResponseObject.cs b/src/Generated/Models/InternalListBatchesResponseObject.cs deleted file mode 100644 index e63aa1089..000000000 --- a/src/Generated/Models/InternalListBatchesResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Batch -{ - internal readonly partial struct InternalListBatchesResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListBatchesResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListBatchesResponseObject List { get; } = new InternalListBatchesResponseObject(ListValue); - - public static bool operator ==(InternalListBatchesResponseObject left, InternalListBatchesResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListBatchesResponseObject left, InternalListBatchesResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListBatchesResponseObject(string value) => new InternalListBatchesResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListBatchesResponseObject other && Equals(other); - - public bool Equals(InternalListBatchesResponseObject 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/InternalListEvalsRequestOrderBy.cs b/src/Generated/Models/InternalListEvalsRequestOrderBy.cs new file mode 100644 index 000000000..ef85b2528 --- /dev/null +++ b/src/Generated/Models/InternalListEvalsRequestOrderBy.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Evals +{ + internal readonly partial struct InternalListEvalsRequestOrderBy : IEquatable + { + private readonly string _value; + private const string CreatedAtValue = "created_at"; + private const string UpdatedAtValue = "updated_at"; + + public InternalListEvalsRequestOrderBy(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalListEvalsRequestOrderBy CreatedAt { get; } = new InternalListEvalsRequestOrderBy(CreatedAtValue); + + internal static InternalListEvalsRequestOrderBy UpdatedAt { get; } = new InternalListEvalsRequestOrderBy(UpdatedAtValue); + + public static bool operator ==(InternalListEvalsRequestOrderBy left, InternalListEvalsRequestOrderBy right) => left.Equals(right); + + public static bool operator !=(InternalListEvalsRequestOrderBy left, InternalListEvalsRequestOrderBy right) => !left.Equals(right); + + public static implicit operator InternalListEvalsRequestOrderBy(string value) => new InternalListEvalsRequestOrderBy(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalListEvalsRequestOrderBy other && Equals(other); + + public bool Equals(InternalListEvalsRequestOrderBy 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/InternalListFilesResponseObject.cs b/src/Generated/Models/InternalListFilesResponseObject.cs deleted file mode 100644 index 2fa2419c8..000000000 --- a/src/Generated/Models/InternalListFilesResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Files -{ - internal readonly partial struct InternalListFilesResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListFilesResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListFilesResponseObject List { get; } = new InternalListFilesResponseObject(ListValue); - - public static bool operator ==(InternalListFilesResponseObject left, InternalListFilesResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListFilesResponseObject left, InternalListFilesResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListFilesResponseObject(string value) => new InternalListFilesResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListFilesResponseObject other && Equals(other); - - public bool Equals(InternalListFilesResponseObject 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/InternalListFineTuningCheckpointPermissionResponse.Serialization.cs b/src/Generated/Models/InternalListFineTuningCheckpointPermissionResponse.Serialization.cs new file mode 100644 index 000000000..923ff1d6f --- /dev/null +++ b/src/Generated/Models/InternalListFineTuningCheckpointPermissionResponse.Serialization.cs @@ -0,0 +1,202 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalListFineTuningCheckpointPermissionResponse : IJsonModel + { + internal InternalListFineTuningCheckpointPermissionResponse() : this(null, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalListFineTuningCheckpointPermissionResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalFineTuningCheckpointPermission item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (Optional.IsDefined(FirstId) && _additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (Optional.IsDefined(LastId) && _additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalListFineTuningCheckpointPermissionResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalListFineTuningCheckpointPermissionResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalListFineTuningCheckpointPermissionResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalListFineTuningCheckpointPermissionResponse(document.RootElement, options); + } + + internal static InternalListFineTuningCheckpointPermissionResponse DeserializeInternalListFineTuningCheckpointPermissionResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IList data = default; + string @object = default; + string firstId = default; + string lastId = default; + bool hasMore = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalFineTuningCheckpointPermission.DeserializeInternalFineTuningCheckpointPermission(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("first_id"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + firstId = null; + continue; + } + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + lastId = null; + continue; + } + lastId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalListFineTuningCheckpointPermissionResponse( + data, + @object, + firstId, + lastId, + hasMore, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalListFineTuningCheckpointPermissionResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalListFineTuningCheckpointPermissionResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalListFineTuningCheckpointPermissionResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalListFineTuningCheckpointPermissionResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalListFineTuningCheckpointPermissionResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalListFineTuningCheckpointPermissionResponse.cs b/src/Generated/Models/InternalListFineTuningCheckpointPermissionResponse.cs new file mode 100644 index 000000000..93c42750d --- /dev/null +++ b/src/Generated/Models/InternalListFineTuningCheckpointPermissionResponse.cs @@ -0,0 +1,49 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.FineTuning +{ + internal partial class InternalListFineTuningCheckpointPermissionResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalListFineTuningCheckpointPermissionResponse(IEnumerable data, bool hasMore) + { + Data = data.ToList(); + HasMore = hasMore; + } + + internal InternalListFineTuningCheckpointPermissionResponse(IList data, string @object, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Data = data ?? new ChangeTrackingList(); + Object = @object; + FirstId = firstId; + LastId = lastId; + HasMore = hasMore; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IList Data { get; } + + public string Object { get; } = "list"; + + public string FirstId { get; } + + public string LastId { get; } + + public bool HasMore { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs index ebeceda27..35c34b8a8 100644 --- a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.FineTuning { internal partial class InternalListFineTuningJobCheckpointsResponse : IJsonModel { - internal InternalListFineTuningJobCheckpointsResponse() + internal InternalListFineTuningJobCheckpointsResponse() : this(null, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { writer.WritePropertyName("data"u8); writer.WriteStartArray(); - foreach (InternalFineTuningJobCheckpoint item in Data) + foreach (FineTuningCheckpoint item in Data) { writer.WriteObjectValue(item, options); } @@ -44,7 +45,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (Optional.IsDefined(FirstId) && _additionalBinaryDataProperties?.ContainsKey("first_id") != true) { @@ -61,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +86,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListFineTuningJobCheckpointsResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListFineTuningJobCheckpointsResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,8 +104,8 @@ internal static InternalListFineTuningJobCheckpointsResponse DeserializeInternal { return null; } - IList data = default; - InternalListFineTuningJobCheckpointsResponseObject @object = default; + IList data = default; + string @object = default; string firstId = default; string lastId = default; bool hasMore = default; @@ -111,17 +114,17 @@ internal static InternalListFineTuningJobCheckpointsResponse DeserializeInternal { if (prop.NameEquals("data"u8)) { - List array = new List(); + List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { - array.Add(InternalFineTuningJobCheckpoint.DeserializeInternalFineTuningJobCheckpoint(item, options)); + array.Add(FineTuningCheckpoint.DeserializeFineTuningCheckpoint(item, options)); } data = array; continue; } if (prop.NameEquals("object"u8)) { - @object = new InternalListFineTuningJobCheckpointsResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("first_id"u8)) @@ -149,6 +152,7 @@ internal static InternalListFineTuningJobCheckpointsResponse DeserializeInternal hasMore = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListFineTuningJobCheckpointsResponse( @@ -162,13 +166,14 @@ internal static InternalListFineTuningJobCheckpointsResponse DeserializeInternal BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListFineTuningJobCheckpointsResponse)} does not support writing '{options.Format}' format."); } @@ -176,6 +181,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListFineTuningJobCheckpointsResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListFineTuningJobCheckpointsResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -192,21 +198,5 @@ protected virtual InternalListFineTuningJobCheckpointsResponse PersistableModelC } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListFineTuningJobCheckpointsResponse internalListFineTuningJobCheckpointsResponse) - { - if (internalListFineTuningJobCheckpointsResponse == null) - { - return null; - } - return BinaryContent.Create(internalListFineTuningJobCheckpointsResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListFineTuningJobCheckpointsResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListFineTuningJobCheckpointsResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.cs b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.cs index 48431f1c9..af6b67fca 100644 --- a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.cs +++ b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponse.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; namespace OpenAI.FineTuning { @@ -12,15 +13,16 @@ internal partial class InternalListFineTuningJobCheckpointsResponse { private protected IDictionary _additionalBinaryDataProperties; - internal InternalListFineTuningJobCheckpointsResponse(IEnumerable data, bool hasMore) + internal InternalListFineTuningJobCheckpointsResponse(IEnumerable data, bool hasMore) { Data = data.ToList(); HasMore = hasMore; } - internal InternalListFineTuningJobCheckpointsResponse(IList data, InternalListFineTuningJobCheckpointsResponseObject @object, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + internal InternalListFineTuningJobCheckpointsResponse(IList data, string @object, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) { - Data = data; + // Plugin customization: ensure initialization of collections + Data = data ?? new ChangeTrackingList(); Object = @object; FirstId = firstId; LastId = lastId; @@ -28,9 +30,9 @@ internal InternalListFineTuningJobCheckpointsResponse(IList Data { get; } + public IList Data { get; } - public InternalListFineTuningJobCheckpointsResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; public string FirstId { get; } diff --git a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponseObject.cs b/src/Generated/Models/InternalListFineTuningJobCheckpointsResponseObject.cs deleted file mode 100644 index 4238f5ef6..000000000 --- a/src/Generated/Models/InternalListFineTuningJobCheckpointsResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalListFineTuningJobCheckpointsResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListFineTuningJobCheckpointsResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListFineTuningJobCheckpointsResponseObject List { get; } = new InternalListFineTuningJobCheckpointsResponseObject(ListValue); - - public static bool operator ==(InternalListFineTuningJobCheckpointsResponseObject left, InternalListFineTuningJobCheckpointsResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListFineTuningJobCheckpointsResponseObject left, InternalListFineTuningJobCheckpointsResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListFineTuningJobCheckpointsResponseObject(string value) => new InternalListFineTuningJobCheckpointsResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListFineTuningJobCheckpointsResponseObject other && Equals(other); - - public bool Equals(InternalListFineTuningJobCheckpointsResponseObject 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/InternalListFineTuningJobEventsResponse.Serialization.cs b/src/Generated/Models/InternalListFineTuningJobEventsResponse.Serialization.cs index a964af6a6..866bdab2b 100644 --- a/src/Generated/Models/InternalListFineTuningJobEventsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListFineTuningJobEventsResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.FineTuning { internal partial class InternalListFineTuningJobEventsResponse : IJsonModel { - internal InternalListFineTuningJobEventsResponse() + internal InternalListFineTuningJobEventsResponse() : this(null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { writer.WritePropertyName("data"u8); writer.WriteStartArray(); - foreach (FineTuningJobEvent item in Data) + foreach (FineTuningEvent item in Data) { writer.WriteObjectValue(item, options); } @@ -44,13 +45,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) { writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListFineTuningJobEventsResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListFineTuningJobEventsResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -91,25 +94,25 @@ internal static InternalListFineTuningJobEventsResponse DeserializeInternalListF { return null; } - IList data = default; - InternalListFineTuningJobEventsResponseObject @object = default; + IList data = default; + string @object = default; bool hasMore = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("data"u8)) { - List array = new List(); + List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { - array.Add(FineTuningJobEvent.DeserializeFineTuningJobEvent(item, options)); + array.Add(FineTuningEvent.DeserializeFineTuningEvent(item, options)); } data = array; continue; } if (prop.NameEquals("object"u8)) { - @object = new InternalListFineTuningJobEventsResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("has_more"u8)) @@ -117,6 +120,7 @@ internal static InternalListFineTuningJobEventsResponse DeserializeInternalListF hasMore = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListFineTuningJobEventsResponse(data, @object, hasMore, additionalBinaryDataProperties); @@ -124,13 +128,14 @@ internal static InternalListFineTuningJobEventsResponse DeserializeInternalListF BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListFineTuningJobEventsResponse)} does not support writing '{options.Format}' format."); } @@ -138,6 +143,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListFineTuningJobEventsResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListFineTuningJobEventsResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -154,21 +160,5 @@ protected virtual InternalListFineTuningJobEventsResponse PersistableModelCreate } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListFineTuningJobEventsResponse internalListFineTuningJobEventsResponse) - { - if (internalListFineTuningJobEventsResponse == null) - { - return null; - } - return BinaryContent.Create(internalListFineTuningJobEventsResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListFineTuningJobEventsResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListFineTuningJobEventsResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs b/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs index c5a4fd632..f0db83c7a 100644 --- a/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs +++ b/src/Generated/Models/InternalListFineTuningJobEventsResponse.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; namespace OpenAI.FineTuning { @@ -12,23 +13,24 @@ internal partial class InternalListFineTuningJobEventsResponse { private protected IDictionary _additionalBinaryDataProperties; - internal InternalListFineTuningJobEventsResponse(IEnumerable data, bool hasMore) + internal InternalListFineTuningJobEventsResponse(IEnumerable data, bool hasMore) { Data = data.ToList(); HasMore = hasMore; } - internal InternalListFineTuningJobEventsResponse(IList data, InternalListFineTuningJobEventsResponseObject @object, bool hasMore, IDictionary additionalBinaryDataProperties) + internal InternalListFineTuningJobEventsResponse(IList data, string @object, bool hasMore, IDictionary additionalBinaryDataProperties) { - Data = data; + // Plugin customization: ensure initialization of collections + Data = data ?? new ChangeTrackingList(); Object = @object; HasMore = hasMore; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public IList Data { get; } + public IList Data { get; } - public InternalListFineTuningJobEventsResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; public bool HasMore { get; } diff --git a/src/Generated/Models/InternalListFineTuningJobEventsResponseObject.cs b/src/Generated/Models/InternalListFineTuningJobEventsResponseObject.cs deleted file mode 100644 index 2f75c90d9..000000000 --- a/src/Generated/Models/InternalListFineTuningJobEventsResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalListFineTuningJobEventsResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListFineTuningJobEventsResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListFineTuningJobEventsResponseObject List { get; } = new InternalListFineTuningJobEventsResponseObject(ListValue); - - public static bool operator ==(InternalListFineTuningJobEventsResponseObject left, InternalListFineTuningJobEventsResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListFineTuningJobEventsResponseObject left, InternalListFineTuningJobEventsResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListFineTuningJobEventsResponseObject(string value) => new InternalListFineTuningJobEventsResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListFineTuningJobEventsResponseObject other && Equals(other); - - public bool Equals(InternalListFineTuningJobEventsResponseObject 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/InternalListMessagesResponse.Serialization.cs b/src/Generated/Models/InternalListMessagesResponse.Serialization.cs index 0ef135589..98a850a70 100644 --- a/src/Generated/Models/InternalListMessagesResponse.Serialization.cs +++ b/src/Generated/Models/InternalListMessagesResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalListMessagesResponse : IJsonModel { - internal InternalListMessagesResponse() + internal InternalListMessagesResponse() : this(null, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); @@ -61,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +87,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListMessagesResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListMessagesResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,7 +105,7 @@ internal static InternalListMessagesResponse DeserializeInternalListMessagesResp { return null; } - InternalListMessagesResponseObject @object = default; + string @object = default; IReadOnlyList data = default; string firstId = default; string lastId = default; @@ -111,7 +115,7 @@ internal static InternalListMessagesResponse DeserializeInternalListMessagesResp { if (prop.NameEquals("object"u8)) { - @object = new InternalListMessagesResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("data"u8)) @@ -139,6 +143,7 @@ internal static InternalListMessagesResponse DeserializeInternalListMessagesResp hasMore = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListMessagesResponse( @@ -152,13 +157,14 @@ internal static InternalListMessagesResponse DeserializeInternalListMessagesResp BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListMessagesResponse)} does not support writing '{options.Format}' format."); } @@ -166,6 +172,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListMessagesResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListMessagesResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +189,5 @@ protected virtual InternalListMessagesResponse PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListMessagesResponse internalListMessagesResponse) - { - if (internalListMessagesResponse == null) - { - return null; - } - return BinaryContent.Create(internalListMessagesResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListMessagesResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListMessagesResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListMessagesResponse.cs b/src/Generated/Models/InternalListMessagesResponse.cs index 5f0381ef6..d39f30863 100644 --- a/src/Generated/Models/InternalListMessagesResponse.cs +++ b/src/Generated/Models/InternalListMessagesResponse.cs @@ -20,17 +20,18 @@ internal InternalListMessagesResponse(string firstId, string lastId, bool hasMor HasMore = hasMore; } - internal InternalListMessagesResponse(InternalListMessagesResponseObject @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + internal InternalListMessagesResponse(string @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Object = @object; - Data = data; + Data = data ?? new ChangeTrackingList(); FirstId = firstId; LastId = lastId; HasMore = hasMore; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalListMessagesResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; public IReadOnlyList Data { get; } diff --git a/src/Generated/Models/InternalListMessagesResponseObject.cs b/src/Generated/Models/InternalListMessagesResponseObject.cs deleted file mode 100644 index dc6c8b82d..000000000 --- a/src/Generated/Models/InternalListMessagesResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalListMessagesResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListMessagesResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListMessagesResponseObject List { get; } = new InternalListMessagesResponseObject(ListValue); - - public static bool operator ==(InternalListMessagesResponseObject left, InternalListMessagesResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListMessagesResponseObject left, InternalListMessagesResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListMessagesResponseObject(string value) => new InternalListMessagesResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListMessagesResponseObject other && Equals(other); - - public bool Equals(InternalListMessagesResponseObject 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/InternalListModelsResponseObject.cs b/src/Generated/Models/InternalListModelsResponseObject.cs deleted file mode 100644 index dae3553c0..000000000 --- a/src/Generated/Models/InternalListModelsResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Models -{ - internal readonly partial struct InternalListModelsResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListModelsResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListModelsResponseObject List { get; } = new InternalListModelsResponseObject(ListValue); - - public static bool operator ==(InternalListModelsResponseObject left, InternalListModelsResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListModelsResponseObject left, InternalListModelsResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListModelsResponseObject(string value) => new InternalListModelsResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListModelsResponseObject other && Equals(other); - - public bool Equals(InternalListModelsResponseObject 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/InternalListPaginatedFineTuningJobsResponse.Serialization.cs b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs index dd673f6d3..f4a7df28a 100644 --- a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.FineTuning { internal partial class InternalListPaginatedFineTuningJobsResponse : IJsonModel { - internal InternalListPaginatedFineTuningJobsResponse() + internal InternalListPaginatedFineTuningJobsResponse() : this(null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,7 +36,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { writer.WritePropertyName("data"u8); writer.WriteStartArray(); - foreach (FineTuningJob item in Data) + foreach (InternalFineTuningJob item in Data) { writer.WriteObjectValue(item, options); } @@ -49,8 +50,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListPaginatedFineTuningJobsResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListPaginatedFineTuningJobsResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -91,18 +94,18 @@ internal static InternalListPaginatedFineTuningJobsResponse DeserializeInternalL { return null; } - IList data = default; + IList data = default; bool hasMore = default; - InternalListPaginatedFineTuningJobsResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("data"u8)) { - List array = new List(); + List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { - array.Add(FineTuningJob.DeserializeFineTuningJob(item, options)); + array.Add(InternalFineTuningJob.DeserializeInternalFineTuningJob(item, options)); } data = array; continue; @@ -114,9 +117,10 @@ internal static InternalListPaginatedFineTuningJobsResponse DeserializeInternalL } if (prop.NameEquals("object"u8)) { - @object = new InternalListPaginatedFineTuningJobsResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListPaginatedFineTuningJobsResponse(data, hasMore, @object, additionalBinaryDataProperties); @@ -124,13 +128,14 @@ internal static InternalListPaginatedFineTuningJobsResponse DeserializeInternalL BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListPaginatedFineTuningJobsResponse)} does not support writing '{options.Format}' format."); } @@ -138,6 +143,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListPaginatedFineTuningJobsResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListPaginatedFineTuningJobsResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -154,21 +160,5 @@ protected virtual InternalListPaginatedFineTuningJobsResponse PersistableModelCr } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListPaginatedFineTuningJobsResponse internalListPaginatedFineTuningJobsResponse) - { - if (internalListPaginatedFineTuningJobsResponse == null) - { - return null; - } - return BinaryContent.Create(internalListPaginatedFineTuningJobsResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListPaginatedFineTuningJobsResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListPaginatedFineTuningJobsResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.cs b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.cs index d063d6e4c..86e53fb10 100644 --- a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.cs +++ b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponse.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; namespace OpenAI.FineTuning { @@ -12,25 +13,26 @@ internal partial class InternalListPaginatedFineTuningJobsResponse { private protected IDictionary _additionalBinaryDataProperties; - internal InternalListPaginatedFineTuningJobsResponse(IEnumerable data, bool hasMore) + internal InternalListPaginatedFineTuningJobsResponse(IEnumerable data, bool hasMore) { Data = data.ToList(); HasMore = hasMore; } - internal InternalListPaginatedFineTuningJobsResponse(IList data, bool hasMore, InternalListPaginatedFineTuningJobsResponseObject @object, IDictionary additionalBinaryDataProperties) + internal InternalListPaginatedFineTuningJobsResponse(IList data, bool hasMore, string @object, IDictionary additionalBinaryDataProperties) { - Data = data; + // Plugin customization: ensure initialization of collections + Data = data ?? new ChangeTrackingList(); HasMore = hasMore; Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public IList Data { get; } + internal IList Data { get; } public bool HasMore { get; } - public InternalListPaginatedFineTuningJobsResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponseObject.cs b/src/Generated/Models/InternalListPaginatedFineTuningJobsResponseObject.cs deleted file mode 100644 index 4bc6eed4d..000000000 --- a/src/Generated/Models/InternalListPaginatedFineTuningJobsResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalListPaginatedFineTuningJobsResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListPaginatedFineTuningJobsResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListPaginatedFineTuningJobsResponseObject List { get; } = new InternalListPaginatedFineTuningJobsResponseObject(ListValue); - - public static bool operator ==(InternalListPaginatedFineTuningJobsResponseObject left, InternalListPaginatedFineTuningJobsResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListPaginatedFineTuningJobsResponseObject left, InternalListPaginatedFineTuningJobsResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListPaginatedFineTuningJobsResponseObject(string value) => new InternalListPaginatedFineTuningJobsResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListPaginatedFineTuningJobsResponseObject other && Equals(other); - - public bool Equals(InternalListPaginatedFineTuningJobsResponseObject 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/InternalListRunStepsResponse.Serialization.cs b/src/Generated/Models/InternalListRunStepsResponse.Serialization.cs index f16a639e7..d61a9ae76 100644 --- a/src/Generated/Models/InternalListRunStepsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListRunStepsResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalListRunStepsResponse : IJsonModel { - internal InternalListRunStepsResponse() + internal InternalListRunStepsResponse() : this(null, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); @@ -61,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +87,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListRunStepsResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListRunStepsResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,7 +105,7 @@ internal static InternalListRunStepsResponse DeserializeInternalListRunStepsResp { return null; } - InternalListRunStepsResponseObject @object = default; + string @object = default; IReadOnlyList data = default; string firstId = default; string lastId = default; @@ -111,7 +115,7 @@ internal static InternalListRunStepsResponse DeserializeInternalListRunStepsResp { if (prop.NameEquals("object"u8)) { - @object = new InternalListRunStepsResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("data"u8)) @@ -139,6 +143,7 @@ internal static InternalListRunStepsResponse DeserializeInternalListRunStepsResp hasMore = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListRunStepsResponse( @@ -152,13 +157,14 @@ internal static InternalListRunStepsResponse DeserializeInternalListRunStepsResp BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListRunStepsResponse)} does not support writing '{options.Format}' format."); } @@ -166,6 +172,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListRunStepsResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListRunStepsResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +189,5 @@ protected virtual InternalListRunStepsResponse PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListRunStepsResponse internalListRunStepsResponse) - { - if (internalListRunStepsResponse == null) - { - return null; - } - return BinaryContent.Create(internalListRunStepsResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListRunStepsResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListRunStepsResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListRunStepsResponse.cs b/src/Generated/Models/InternalListRunStepsResponse.cs index b335f2f9d..617373a0a 100644 --- a/src/Generated/Models/InternalListRunStepsResponse.cs +++ b/src/Generated/Models/InternalListRunStepsResponse.cs @@ -20,17 +20,18 @@ internal InternalListRunStepsResponse(string firstId, string lastId, bool hasMor HasMore = hasMore; } - internal InternalListRunStepsResponse(InternalListRunStepsResponseObject @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + internal InternalListRunStepsResponse(string @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Object = @object; - Data = data; + Data = data ?? new ChangeTrackingList(); FirstId = firstId; LastId = lastId; HasMore = hasMore; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalListRunStepsResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; public IReadOnlyList Data { get; } diff --git a/src/Generated/Models/InternalListRunStepsResponseObject.cs b/src/Generated/Models/InternalListRunStepsResponseObject.cs deleted file mode 100644 index a146511d3..000000000 --- a/src/Generated/Models/InternalListRunStepsResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalListRunStepsResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListRunStepsResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListRunStepsResponseObject List { get; } = new InternalListRunStepsResponseObject(ListValue); - - public static bool operator ==(InternalListRunStepsResponseObject left, InternalListRunStepsResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListRunStepsResponseObject left, InternalListRunStepsResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListRunStepsResponseObject(string value) => new InternalListRunStepsResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListRunStepsResponseObject other && Equals(other); - - public bool Equals(InternalListRunStepsResponseObject 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/InternalListRunsResponse.Serialization.cs b/src/Generated/Models/InternalListRunsResponse.Serialization.cs index bfbb465e4..3662b7862 100644 --- a/src/Generated/Models/InternalListRunsResponse.Serialization.cs +++ b/src/Generated/Models/InternalListRunsResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalListRunsResponse : IJsonModel { - internal InternalListRunsResponse() + internal InternalListRunsResponse() : this(null, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); @@ -61,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +87,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListRunsResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListRunsResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,7 +105,7 @@ internal static InternalListRunsResponse DeserializeInternalListRunsResponse(Jso { return null; } - InternalListRunsResponseObject @object = default; + string @object = default; IReadOnlyList data = default; string firstId = default; string lastId = default; @@ -111,7 +115,7 @@ internal static InternalListRunsResponse DeserializeInternalListRunsResponse(Jso { if (prop.NameEquals("object"u8)) { - @object = new InternalListRunsResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("data"u8)) @@ -139,6 +143,7 @@ internal static InternalListRunsResponse DeserializeInternalListRunsResponse(Jso hasMore = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListRunsResponse( @@ -152,13 +157,14 @@ internal static InternalListRunsResponse DeserializeInternalListRunsResponse(Jso BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListRunsResponse)} does not support writing '{options.Format}' format."); } @@ -166,6 +172,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListRunsResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListRunsResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +189,5 @@ protected virtual InternalListRunsResponse PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListRunsResponse internalListRunsResponse) - { - if (internalListRunsResponse == null) - { - return null; - } - return BinaryContent.Create(internalListRunsResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListRunsResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListRunsResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListRunsResponse.cs b/src/Generated/Models/InternalListRunsResponse.cs index c4c91c9e4..095449377 100644 --- a/src/Generated/Models/InternalListRunsResponse.cs +++ b/src/Generated/Models/InternalListRunsResponse.cs @@ -20,17 +20,18 @@ internal InternalListRunsResponse(string firstId, string lastId, bool hasMore) HasMore = hasMore; } - internal InternalListRunsResponse(InternalListRunsResponseObject @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + internal InternalListRunsResponse(string @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Object = @object; - Data = data; + Data = data ?? new ChangeTrackingList(); FirstId = firstId; LastId = lastId; HasMore = hasMore; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalListRunsResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; public IReadOnlyList Data { get; } diff --git a/src/Generated/Models/InternalListRunsResponseObject.cs b/src/Generated/Models/InternalListRunsResponseObject.cs deleted file mode 100644 index 353b74b7b..000000000 --- a/src/Generated/Models/InternalListRunsResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalListRunsResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListRunsResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListRunsResponseObject List { get; } = new InternalListRunsResponseObject(ListValue); - - public static bool operator ==(InternalListRunsResponseObject left, InternalListRunsResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListRunsResponseObject left, InternalListRunsResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListRunsResponseObject(string value) => new InternalListRunsResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListRunsResponseObject other && Equals(other); - - public bool Equals(InternalListRunsResponseObject 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/InternalListThreadsResponse.Serialization.cs b/src/Generated/Models/InternalListThreadsResponse.Serialization.cs deleted file mode 100644 index b0172cc22..000000000 --- a/src/Generated/Models/InternalListThreadsResponse.Serialization.cs +++ /dev/null @@ -1,202 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalListThreadsResponse : IJsonModel - { - internal InternalListThreadsResponse() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalListThreadsResponse)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("object") != true) - { - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("data") != true) - { - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (AssistantThread item in Data) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) - { - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - } - if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) - { - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - } - if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) - { - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalListThreadsResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalListThreadsResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalListThreadsResponse)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalListThreadsResponse(document.RootElement, options); - } - - internal static InternalListThreadsResponse DeserializeInternalListThreadsResponse(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalListThreadsResponseObject @object = default; - IReadOnlyList data = default; - string firstId = default; - string lastId = default; - bool hasMore = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("object"u8)) - { - @object = new InternalListThreadsResponseObject(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("data"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(AssistantThread.DeserializeAssistantThread(item, options)); - } - data = array; - continue; - } - if (prop.NameEquals("first_id"u8)) - { - firstId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("last_id"u8)) - { - lastId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("has_more"u8)) - { - hasMore = prop.Value.GetBoolean(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalListThreadsResponse( - @object, - data, - firstId, - lastId, - hasMore, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalListThreadsResponse)} does not support writing '{options.Format}' format."); - } - } - - InternalListThreadsResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalListThreadsResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalListThreadsResponse(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalListThreadsResponse)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListThreadsResponse internalListThreadsResponse) - { - if (internalListThreadsResponse == null) - { - return null; - } - return BinaryContent.Create(internalListThreadsResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListThreadsResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListThreadsResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalListThreadsResponse.cs b/src/Generated/Models/InternalListThreadsResponse.cs deleted file mode 100644 index ae84cfdbf..000000000 --- a/src/Generated/Models/InternalListThreadsResponse.cs +++ /dev/null @@ -1,49 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalListThreadsResponse - { - private protected IDictionary _additionalBinaryDataProperties; - - internal InternalListThreadsResponse(string firstId, string lastId, bool hasMore) - { - Data = new ChangeTrackingList(); - FirstId = firstId; - LastId = lastId; - HasMore = hasMore; - } - - internal InternalListThreadsResponse(InternalListThreadsResponseObject @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) - { - Object = @object; - Data = data; - FirstId = firstId; - LastId = lastId; - HasMore = hasMore; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalListThreadsResponseObject Object { get; } = "list"; - - public IReadOnlyList Data { get; } - - public string FirstId { get; } - - public string LastId { get; } - - public bool HasMore { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalListThreadsResponseObject.cs b/src/Generated/Models/InternalListThreadsResponseObject.cs deleted file mode 100644 index 7bb19f64a..000000000 --- a/src/Generated/Models/InternalListThreadsResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalListThreadsResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListThreadsResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListThreadsResponseObject List { get; } = new InternalListThreadsResponseObject(ListValue); - - public static bool operator ==(InternalListThreadsResponseObject left, InternalListThreadsResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListThreadsResponseObject left, InternalListThreadsResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListThreadsResponseObject(string value) => new InternalListThreadsResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListThreadsResponseObject other && Equals(other); - - public bool Equals(InternalListThreadsResponseObject 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/InternalListVectorStoreFilesResponse.Serialization.cs b/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs index 96881a2fc..4969536f9 100644 --- a/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs +++ b/src/Generated/Models/InternalListVectorStoreFilesResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.VectorStores { internal partial class InternalListVectorStoreFilesResponse : IJsonModel { - internal InternalListVectorStoreFilesResponse() + internal InternalListVectorStoreFilesResponse() : this(null, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter write writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); @@ -61,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +87,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListVectorStoreFilesResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListVectorStoreFilesResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,7 +105,7 @@ internal static InternalListVectorStoreFilesResponse DeserializeInternalListVect { return null; } - InternalListVectorStoreFilesResponseObject @object = default; + string @object = default; IReadOnlyList data = default; string firstId = default; string lastId = default; @@ -111,7 +115,7 @@ internal static InternalListVectorStoreFilesResponse DeserializeInternalListVect { if (prop.NameEquals("object"u8)) { - @object = new InternalListVectorStoreFilesResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("data"u8)) @@ -139,6 +143,7 @@ internal static InternalListVectorStoreFilesResponse DeserializeInternalListVect hasMore = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListVectorStoreFilesResponse( @@ -152,13 +157,14 @@ internal static InternalListVectorStoreFilesResponse DeserializeInternalListVect BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListVectorStoreFilesResponse)} does not support writing '{options.Format}' format."); } @@ -166,6 +172,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListVectorStoreFilesResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListVectorStoreFilesResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +189,5 @@ protected virtual InternalListVectorStoreFilesResponse PersistableModelCreateCor } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListVectorStoreFilesResponse internalListVectorStoreFilesResponse) - { - if (internalListVectorStoreFilesResponse == null) - { - return null; - } - return BinaryContent.Create(internalListVectorStoreFilesResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListVectorStoreFilesResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListVectorStoreFilesResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListVectorStoreFilesResponse.cs b/src/Generated/Models/InternalListVectorStoreFilesResponse.cs index e5ea3d8a6..c65a99b10 100644 --- a/src/Generated/Models/InternalListVectorStoreFilesResponse.cs +++ b/src/Generated/Models/InternalListVectorStoreFilesResponse.cs @@ -20,17 +20,18 @@ internal InternalListVectorStoreFilesResponse(string firstId, string lastId, boo HasMore = hasMore; } - internal InternalListVectorStoreFilesResponse(InternalListVectorStoreFilesResponseObject @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + internal InternalListVectorStoreFilesResponse(string @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Object = @object; - Data = data; + Data = data ?? new ChangeTrackingList(); FirstId = firstId; LastId = lastId; HasMore = hasMore; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalListVectorStoreFilesResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; public IReadOnlyList Data { get; } diff --git a/src/Generated/Models/InternalListVectorStoreFilesResponseObject.cs b/src/Generated/Models/InternalListVectorStoreFilesResponseObject.cs deleted file mode 100644 index 936f76205..000000000 --- a/src/Generated/Models/InternalListVectorStoreFilesResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal readonly partial struct InternalListVectorStoreFilesResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListVectorStoreFilesResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListVectorStoreFilesResponseObject List { get; } = new InternalListVectorStoreFilesResponseObject(ListValue); - - public static bool operator ==(InternalListVectorStoreFilesResponseObject left, InternalListVectorStoreFilesResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListVectorStoreFilesResponseObject left, InternalListVectorStoreFilesResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListVectorStoreFilesResponseObject(string value) => new InternalListVectorStoreFilesResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListVectorStoreFilesResponseObject other && Equals(other); - - public bool Equals(InternalListVectorStoreFilesResponseObject 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/InternalListVectorStoresResponse.Serialization.cs b/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs index 47628b8e9..cef779369 100644 --- a/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs +++ b/src/Generated/Models/InternalListVectorStoresResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.VectorStores { internal partial class InternalListVectorStoresResponse : IJsonModel { - internal InternalListVectorStoresResponse() + internal InternalListVectorStoresResponse() : this(null, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("data") != true) { writer.WritePropertyName("data"u8); @@ -61,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +87,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalListVectorStoresResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalListVectorStoresResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,7 +105,7 @@ internal static InternalListVectorStoresResponse DeserializeInternalListVectorSt { return null; } - InternalListVectorStoresResponseObject @object = default; + string @object = default; IReadOnlyList data = default; string firstId = default; string lastId = default; @@ -111,7 +115,7 @@ internal static InternalListVectorStoresResponse DeserializeInternalListVectorSt { if (prop.NameEquals("object"u8)) { - @object = new InternalListVectorStoresResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("data"u8)) @@ -139,6 +143,7 @@ internal static InternalListVectorStoresResponse DeserializeInternalListVectorSt hasMore = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalListVectorStoresResponse( @@ -152,13 +157,14 @@ internal static InternalListVectorStoresResponse DeserializeInternalListVectorSt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalListVectorStoresResponse)} does not support writing '{options.Format}' format."); } @@ -166,6 +172,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalListVectorStoresResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalListVectorStoresResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -182,21 +189,5 @@ protected virtual InternalListVectorStoresResponse PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalListVectorStoresResponse internalListVectorStoresResponse) - { - if (internalListVectorStoresResponse == null) - { - return null; - } - return BinaryContent.Create(internalListVectorStoresResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalListVectorStoresResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalListVectorStoresResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalListVectorStoresResponse.cs b/src/Generated/Models/InternalListVectorStoresResponse.cs index 3f2157103..25da8d740 100644 --- a/src/Generated/Models/InternalListVectorStoresResponse.cs +++ b/src/Generated/Models/InternalListVectorStoresResponse.cs @@ -20,17 +20,18 @@ internal InternalListVectorStoresResponse(string firstId, string lastId, bool ha HasMore = hasMore; } - internal InternalListVectorStoresResponse(InternalListVectorStoresResponseObject @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) + internal InternalListVectorStoresResponse(string @object, IReadOnlyList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Object = @object; - Data = data; + Data = data ?? new ChangeTrackingList(); FirstId = firstId; LastId = lastId; HasMore = hasMore; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalListVectorStoresResponseObject Object { get; } = "list"; + public string Object { get; } = "list"; public IReadOnlyList Data { get; } diff --git a/src/Generated/Models/InternalListVectorStoresResponseObject.cs b/src/Generated/Models/InternalListVectorStoresResponseObject.cs deleted file mode 100644 index cf2c64190..000000000 --- a/src/Generated/Models/InternalListVectorStoresResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal readonly partial struct InternalListVectorStoresResponseObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalListVectorStoresResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalListVectorStoresResponseObject List { get; } = new InternalListVectorStoresResponseObject(ListValue); - - public static bool operator ==(InternalListVectorStoresResponseObject left, InternalListVectorStoresResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalListVectorStoresResponseObject left, InternalListVectorStoresResponseObject right) => !left.Equals(right); - - public static implicit operator InternalListVectorStoresResponseObject(string value) => new InternalListVectorStoresResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalListVectorStoresResponseObject other && Equals(other); - - public bool Equals(InternalListVectorStoresResponseObject 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/InternalLocalShellExecAction.Serialization.cs b/src/Generated/Models/InternalLocalShellExecAction.Serialization.cs new file mode 100644 index 000000000..6109472b1 --- /dev/null +++ b/src/Generated/Models/InternalLocalShellExecAction.Serialization.cs @@ -0,0 +1,254 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellExecAction : IJsonModel + { + internal InternalLocalShellExecAction() : this(null, null, default, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellExecAction)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("command") != true) + { + writer.WritePropertyName("command"u8); + writer.WriteStartArray(); + foreach (string item in Command) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(TimeoutMs) && _additionalBinaryDataProperties?.ContainsKey("timeout_ms") != true) + { + writer.WritePropertyName("timeout_ms"u8); + writer.WriteNumberValue(TimeoutMs.Value); + } + if (Optional.IsDefined(WorkingDirectory) && _additionalBinaryDataProperties?.ContainsKey("working_directory") != true) + { + writer.WritePropertyName("working_directory"u8); + writer.WriteStringValue(WorkingDirectory); + } + if (_additionalBinaryDataProperties?.ContainsKey("env") != true) + { + writer.WritePropertyName("env"u8); + writer.WriteStartObject(); + foreach (var item in Env) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + if (Optional.IsDefined(User) && _additionalBinaryDataProperties?.ContainsKey("user") != true) + { + writer.WritePropertyName("user"u8); + writer.WriteStringValue(User); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalLocalShellExecAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalLocalShellExecAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellExecAction)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLocalShellExecAction(document.RootElement, options); + } + + internal static InternalLocalShellExecAction DeserializeInternalLocalShellExecAction(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + IList command = default; + int? timeoutMs = default; + string workingDirectory = default; + IDictionary env = default; + string user = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("command"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + command = array; + continue; + } + if (prop.NameEquals("timeout_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + timeoutMs = null; + continue; + } + timeoutMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("working_directory"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + workingDirectory = null; + continue; + } + workingDirectory = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("env"u8)) + { + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + env = dictionary; + continue; + } + if (prop.NameEquals("user"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + user = null; + continue; + } + user = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalLocalShellExecAction( + kind, + command, + timeoutMs, + workingDirectory, + env, + user, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLocalShellExecAction)} does not support writing '{options.Format}' format."); + } + } + + InternalLocalShellExecAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalLocalShellExecAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLocalShellExecAction(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLocalShellExecAction)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLocalShellExecAction.cs b/src/Generated/Models/InternalLocalShellExecAction.cs new file mode 100644 index 000000000..8760405c9 --- /dev/null +++ b/src/Generated/Models/InternalLocalShellExecAction.cs @@ -0,0 +1,56 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellExecAction + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalLocalShellExecAction(IEnumerable command, IDictionary env) + { + // Plugin customization: ensure initialization of collections + Argument.AssertNotNull(command, nameof(command)); + Argument.AssertNotNull(env, nameof(env)); + + Command = command.ToList(); + Env = env ?? new ChangeTrackingDictionary(); + } + + internal InternalLocalShellExecAction(string kind, IList command, int? timeoutMs, string workingDirectory, IDictionary env, string user, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Kind = kind; + Command = command ?? new ChangeTrackingList(); + TimeoutMs = timeoutMs; + WorkingDirectory = workingDirectory; + Env = env ?? new ChangeTrackingDictionary(); + User = user; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "exec"; + + public IList Command { get; } + + public int? TimeoutMs { get; set; } + + public string WorkingDirectory { get; set; } + + public IDictionary Env { get; } + + public string User { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalLocalShellTool.Serialization.cs b/src/Generated/Models/InternalLocalShellTool.Serialization.cs new file mode 100644 index 000000000..9a5d525f3 --- /dev/null +++ b/src/Generated/Models/InternalLocalShellTool.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellTool : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalLocalShellTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalLocalShellTool)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLocalShellTool(document.RootElement, options); + } + + internal static InternalLocalShellTool DeserializeInternalLocalShellTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalLocalShellTool(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLocalShellTool)} does not support writing '{options.Format}' format."); + } + } + + InternalLocalShellTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalLocalShellTool)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLocalShellTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLocalShellTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLocalShellTool.cs b/src/Generated/Models/InternalLocalShellTool.cs new file mode 100644 index 000000000..d0a13f30f --- /dev/null +++ b/src/Generated/Models/InternalLocalShellTool.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellTool : ResponseTool + { + public InternalLocalShellTool() : this(InternalToolType.LocalShell, null) + { + } + + internal InternalLocalShellTool(InternalToolType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallItemParam.Serialization.cs b/src/Generated/Models/InternalLocalShellToolCallItemParam.Serialization.cs new file mode 100644 index 000000000..26a53bfed --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallItemParam.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellToolCallItemParam : IJsonModel + { + internal InternalLocalShellToolCallItemParam() : this(InternalItemType.LocalShellCall, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellToolCallItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("call_id") != true) + { + writer.WritePropertyName("call_id"u8); + writer.WriteStringValue(CallId); + } + if (_additionalBinaryDataProperties?.ContainsKey("action") != true) + { + writer.WritePropertyName("action"u8); + writer.WriteObjectValue(Action, options); + } + } + + InternalLocalShellToolCallItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalLocalShellToolCallItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellToolCallItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLocalShellToolCallItemParam(document.RootElement, options); + } + + internal static InternalLocalShellToolCallItemParam DeserializeInternalLocalShellToolCallItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string callId = default; + InternalLocalShellExecAction action = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("action"u8)) + { + action = InternalLocalShellExecAction.DeserializeInternalLocalShellExecAction(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalLocalShellToolCallItemParam(kind, additionalBinaryDataProperties, callId, action); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLocalShellToolCallItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalLocalShellToolCallItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalLocalShellToolCallItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLocalShellToolCallItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLocalShellToolCallItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallItemParam.cs b/src/Generated/Models/InternalLocalShellToolCallItemParam.cs new file mode 100644 index 000000000..a48c98674 --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallItemParam.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellToolCallItemParam : InternalItemParam + { + internal InternalLocalShellToolCallItemParam(string callId, InternalLocalShellExecAction action) : base(InternalItemType.LocalShellCall) + { + Argument.AssertNotNull(callId, nameof(callId)); + Argument.AssertNotNull(action, nameof(action)); + + CallId = callId; + Action = action; + } + + internal InternalLocalShellToolCallItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string callId, InternalLocalShellExecAction action) : base(kind, additionalBinaryDataProperties) + { + CallId = callId; + Action = action; + } + + public string CallId { get; } + + internal InternalLocalShellExecAction Action { get; } + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallItemResource.Serialization.cs b/src/Generated/Models/InternalLocalShellToolCallItemResource.Serialization.cs new file mode 100644 index 000000000..72cdc5b3f --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallItemResource.Serialization.cs @@ -0,0 +1,153 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellToolCallItemResource : IJsonModel + { + internal InternalLocalShellToolCallItemResource() : this(InternalItemType.LocalShellCall, null, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellToolCallItemResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("call_id") != true) + { + writer.WritePropertyName("call_id"u8); + writer.WriteStringValue(CallId); + } + if (_additionalBinaryDataProperties?.ContainsKey("action") != true) + { + writer.WritePropertyName("action"u8); + writer.WriteObjectValue(Action, options); + } + } + + InternalLocalShellToolCallItemResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalLocalShellToolCallItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellToolCallItemResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLocalShellToolCallItemResource(document.RootElement, options); + } + + internal static InternalLocalShellToolCallItemResource DeserializeInternalLocalShellToolCallItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalLocalShellToolCallItemResourceStatus status = default; + string callId = default; + InternalLocalShellExecAction action = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("status"u8)) + { + status = new InternalLocalShellToolCallItemResourceStatus(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("call_id"u8)) + { + callId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("action"u8)) + { + action = InternalLocalShellExecAction.DeserializeInternalLocalShellExecAction(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalLocalShellToolCallItemResource( + kind, + id, + additionalBinaryDataProperties, + status, + callId, + action); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLocalShellToolCallItemResource)} does not support writing '{options.Format}' format."); + } + } + + InternalLocalShellToolCallItemResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalLocalShellToolCallItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLocalShellToolCallItemResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLocalShellToolCallItemResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallItemResource.cs b/src/Generated/Models/InternalLocalShellToolCallItemResource.cs new file mode 100644 index 000000000..d5391817f --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallItemResource.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellToolCallItemResource : ResponseItem + { + internal InternalLocalShellToolCallItemResource(string id, InternalLocalShellToolCallItemResourceStatus status, string callId, InternalLocalShellExecAction action) : base(InternalItemType.LocalShellCall, id) + { + Status = status; + CallId = callId; + Action = action; + } + + internal InternalLocalShellToolCallItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalLocalShellToolCallItemResourceStatus status, string callId, InternalLocalShellExecAction action) : base(kind, id, additionalBinaryDataProperties) + { + Status = status; + CallId = callId; + Action = action; + } + + internal InternalLocalShellToolCallItemResourceStatus Status { get; } + + public string CallId { get; } + + internal InternalLocalShellExecAction Action { get; } + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallItemResourceStatus.cs b/src/Generated/Models/InternalLocalShellToolCallItemResourceStatus.cs new file mode 100644 index 000000000..0cc510697 --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallItemResourceStatus.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalLocalShellToolCallItemResourceStatus : IEquatable + { + private readonly string _value; + private const string InProgressValue = "in_progress"; + private const string CompletedValue = "completed"; + private const string IncompleteValue = "incomplete"; + + public InternalLocalShellToolCallItemResourceStatus(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalLocalShellToolCallItemResourceStatus InProgress { get; } = new InternalLocalShellToolCallItemResourceStatus(InProgressValue); + + internal static InternalLocalShellToolCallItemResourceStatus Completed { get; } = new InternalLocalShellToolCallItemResourceStatus(CompletedValue); + + internal static InternalLocalShellToolCallItemResourceStatus Incomplete { get; } = new InternalLocalShellToolCallItemResourceStatus(IncompleteValue); + + public static bool operator ==(InternalLocalShellToolCallItemResourceStatus left, InternalLocalShellToolCallItemResourceStatus right) => left.Equals(right); + + public static bool operator !=(InternalLocalShellToolCallItemResourceStatus left, InternalLocalShellToolCallItemResourceStatus right) => !left.Equals(right); + + public static implicit operator InternalLocalShellToolCallItemResourceStatus(string value) => new InternalLocalShellToolCallItemResourceStatus(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalLocalShellToolCallItemResourceStatus other && Equals(other); + + public bool Equals(InternalLocalShellToolCallItemResourceStatus 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/InternalLocalShellToolCallOutputItemParam.Serialization.cs b/src/Generated/Models/InternalLocalShellToolCallOutputItemParam.Serialization.cs new file mode 100644 index 000000000..3cde6b28e --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallOutputItemParam.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellToolCallOutputItemParam : IJsonModel + { + internal InternalLocalShellToolCallOutputItemParam() : this(InternalItemType.LocalShellCallOutput, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellToolCallOutputItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteStringValue(Output); + } + } + + InternalLocalShellToolCallOutputItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalLocalShellToolCallOutputItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellToolCallOutputItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLocalShellToolCallOutputItemParam(document.RootElement, options); + } + + internal static InternalLocalShellToolCallOutputItemParam DeserializeInternalLocalShellToolCallOutputItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string output = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("output"u8)) + { + output = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalLocalShellToolCallOutputItemParam(kind, additionalBinaryDataProperties, output); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLocalShellToolCallOutputItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalLocalShellToolCallOutputItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalLocalShellToolCallOutputItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLocalShellToolCallOutputItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLocalShellToolCallOutputItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallOutputItemParam.cs b/src/Generated/Models/InternalLocalShellToolCallOutputItemParam.cs new file mode 100644 index 000000000..173023d57 --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallOutputItemParam.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellToolCallOutputItemParam : InternalItemParam + { + public InternalLocalShellToolCallOutputItemParam(string output) : base(InternalItemType.LocalShellCallOutput) + { + Argument.AssertNotNull(output, nameof(output)); + + Output = output; + } + + internal InternalLocalShellToolCallOutputItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string output) : base(kind, additionalBinaryDataProperties) + { + Output = output; + } + + public string Output { get; } + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallOutputItemResource.Serialization.cs b/src/Generated/Models/InternalLocalShellToolCallOutputItemResource.Serialization.cs new file mode 100644 index 000000000..6c54b6ce8 --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallOutputItemResource.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellToolCallOutputItemResource : IJsonModel + { + internal InternalLocalShellToolCallOutputItemResource() : this(InternalItemType.LocalShellCallOutput, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellToolCallOutputItemResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteStringValue(Output); + } + } + + InternalLocalShellToolCallOutputItemResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalLocalShellToolCallOutputItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocalShellToolCallOutputItemResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLocalShellToolCallOutputItemResource(document.RootElement, options); + } + + internal static InternalLocalShellToolCallOutputItemResource DeserializeInternalLocalShellToolCallOutputItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalLocalShellToolCallOutputItemResourceStatus status = default; + string output = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("status"u8)) + { + status = new InternalLocalShellToolCallOutputItemResourceStatus(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("output"u8)) + { + output = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalLocalShellToolCallOutputItemResource(kind, id, additionalBinaryDataProperties, status, output); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLocalShellToolCallOutputItemResource)} does not support writing '{options.Format}' format."); + } + } + + InternalLocalShellToolCallOutputItemResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalLocalShellToolCallOutputItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLocalShellToolCallOutputItemResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLocalShellToolCallOutputItemResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallOutputItemResource.cs b/src/Generated/Models/InternalLocalShellToolCallOutputItemResource.cs new file mode 100644 index 000000000..bfc1f48ae --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallOutputItemResource.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalLocalShellToolCallOutputItemResource : ResponseItem + { + internal InternalLocalShellToolCallOutputItemResource(string id, InternalLocalShellToolCallOutputItemResourceStatus status, string output) : base(InternalItemType.LocalShellCallOutput, id) + { + Status = status; + Output = output; + } + + internal InternalLocalShellToolCallOutputItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalLocalShellToolCallOutputItemResourceStatus status, string output) : base(kind, id, additionalBinaryDataProperties) + { + Status = status; + Output = output; + } + + internal InternalLocalShellToolCallOutputItemResourceStatus Status { get; } + + public string Output { get; } + } +} diff --git a/src/Generated/Models/InternalLocalShellToolCallOutputItemResourceStatus.cs b/src/Generated/Models/InternalLocalShellToolCallOutputItemResourceStatus.cs new file mode 100644 index 000000000..5e720b63e --- /dev/null +++ b/src/Generated/Models/InternalLocalShellToolCallOutputItemResourceStatus.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalLocalShellToolCallOutputItemResourceStatus : IEquatable + { + private readonly string _value; + private const string InProgressValue = "in_progress"; + private const string CompletedValue = "completed"; + private const string IncompleteValue = "incomplete"; + + public InternalLocalShellToolCallOutputItemResourceStatus(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalLocalShellToolCallOutputItemResourceStatus InProgress { get; } = new InternalLocalShellToolCallOutputItemResourceStatus(InProgressValue); + + internal static InternalLocalShellToolCallOutputItemResourceStatus Completed { get; } = new InternalLocalShellToolCallOutputItemResourceStatus(CompletedValue); + + internal static InternalLocalShellToolCallOutputItemResourceStatus Incomplete { get; } = new InternalLocalShellToolCallOutputItemResourceStatus(IncompleteValue); + + public static bool operator ==(InternalLocalShellToolCallOutputItemResourceStatus left, InternalLocalShellToolCallOutputItemResourceStatus right) => left.Equals(right); + + public static bool operator !=(InternalLocalShellToolCallOutputItemResourceStatus left, InternalLocalShellToolCallOutputItemResourceStatus right) => !left.Equals(right); + + public static implicit operator InternalLocalShellToolCallOutputItemResourceStatus(string value) => new InternalLocalShellToolCallOutputItemResourceStatus(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalLocalShellToolCallOutputItemResourceStatus other && Equals(other); + + public bool Equals(InternalLocalShellToolCallOutputItemResourceStatus 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/InternalLocation.Serialization.cs b/src/Generated/Models/InternalLocation.Serialization.cs new file mode 100644 index 000000000..ff6f15314 --- /dev/null +++ b/src/Generated/Models/InternalLocation.Serialization.cs @@ -0,0 +1,128 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + [PersistableModelProxy(typeof(InternalUnknownLocation))] + internal abstract partial class InternalLocation : IJsonModel + { + internal InternalLocation() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocation)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLocation(document.RootElement, options); + } + + internal static InternalLocation DeserializeInternalLocation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "approximate": + return InternalApproximateLocation.DeserializeInternalApproximateLocation(element, options); + } + } + return InternalUnknownLocation.DeserializeInternalUnknownLocation(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLocation)} does not support writing '{options.Format}' format."); + } + } + + InternalLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLocation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLocation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLocation.cs b/src/Generated/Models/InternalLocation.cs new file mode 100644 index 000000000..58bfb2b89 --- /dev/null +++ b/src/Generated/Models/InternalLocation.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal abstract partial class InternalLocation + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalLocation(InternalWebSearchUserLocationKind kind) + { + Kind = kind; + } + + internal InternalLocation(InternalWebSearchUserLocationKind kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalWebSearchUserLocationKind Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalLogProb.Serialization.cs b/src/Generated/Models/InternalLogProb.Serialization.cs new file mode 100644 index 000000000..476d2d362 --- /dev/null +++ b/src/Generated/Models/InternalLogProb.Serialization.cs @@ -0,0 +1,185 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLogProb : IJsonModel + { + internal InternalLogProb() : this(null, default, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLogProb)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("token") != true) + { + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); + } + if (_additionalBinaryDataProperties?.ContainsKey("logprob") != true) + { + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(Logprob); + } + if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (int item in Bytes) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("top_logprobs") != true) + { + writer.WritePropertyName("top_logprobs"u8); + writer.WriteStartArray(); + foreach (InternalTopLogProb item in TopLogprobs) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalLogProb IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalLogProb JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLogProb)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLogProb(document.RootElement, options); + } + + internal static InternalLogProb DeserializeInternalLogProb(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string token = default; + float logprob = default; + IList bytes = default; + IList topLogprobs = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("token"u8)) + { + token = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprob"u8)) + { + logprob = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetInt32()); + } + bytes = array; + continue; + } + if (prop.NameEquals("top_logprobs"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalTopLogProb.DeserializeInternalTopLogProb(item, options)); + } + topLogprobs = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalLogProb(token, logprob, bytes, topLogprobs, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLogProb)} does not support writing '{options.Format}' format."); + } + } + + InternalLogProb IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalLogProb PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLogProb(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLogProb)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLogProb.cs b/src/Generated/Models/InternalLogProb.cs new file mode 100644 index 000000000..52e25d07a --- /dev/null +++ b/src/Generated/Models/InternalLogProb.cs @@ -0,0 +1,52 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalLogProb + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalLogProb(string token, float logprob, IEnumerable bytes, IEnumerable topLogprobs) + { + Argument.AssertNotNull(token, nameof(token)); + Argument.AssertNotNull(bytes, nameof(bytes)); + Argument.AssertNotNull(topLogprobs, nameof(topLogprobs)); + + Token = token; + Logprob = logprob; + Bytes = bytes.ToList(); + TopLogprobs = topLogprobs.ToList(); + } + + internal InternalLogProb(string token, float logprob, IList bytes, IList topLogprobs, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Token = token; + Logprob = logprob; + Bytes = bytes ?? new ChangeTrackingList(); + TopLogprobs = topLogprobs ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Token { get; set; } + + public float Logprob { get; set; } + + public IList Bytes { get; } + + internal IList TopLogprobs { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalLogProbProperties.Serialization.cs b/src/Generated/Models/InternalLogProbProperties.Serialization.cs new file mode 100644 index 000000000..9a92a749b --- /dev/null +++ b/src/Generated/Models/InternalLogProbProperties.Serialization.cs @@ -0,0 +1,164 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Internal +{ + internal partial class InternalLogProbProperties : IJsonModel + { + internal InternalLogProbProperties() : this(null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLogProbProperties)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("token") != true) + { + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); + } + if (_additionalBinaryDataProperties?.ContainsKey("logprob") != true) + { + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(Logprob); + } + if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (int item in Bytes) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalLogProbProperties IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalLogProbProperties JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLogProbProperties)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLogProbProperties(document.RootElement, options); + } + + internal static InternalLogProbProperties DeserializeInternalLogProbProperties(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string token = default; + float logprob = default; + IList bytes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("token"u8)) + { + token = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprob"u8)) + { + logprob = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetInt32()); + } + bytes = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalLogProbProperties(token, logprob, bytes, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLogProbProperties)} does not support writing '{options.Format}' format."); + } + } + + InternalLogProbProperties IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalLogProbProperties PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLogProbProperties(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLogProbProperties)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalLogProbProperties.cs b/src/Generated/Models/InternalLogProbProperties.cs new file mode 100644 index 000000000..61850791d --- /dev/null +++ b/src/Generated/Models/InternalLogProbProperties.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Internal +{ + internal partial class InternalLogProbProperties + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalLogProbProperties(string token, float logprob, IEnumerable bytes) + { + Token = token; + Logprob = logprob; + Bytes = bytes.ToList(); + } + + internal InternalLogProbProperties(string token, float logprob, IList bytes, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Token = token; + Logprob = logprob; + Bytes = bytes ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Token { get; } + + public float Logprob { get; } + + public IList Bytes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalMCPApprovalRequestItemParam.Serialization.cs b/src/Generated/Models/InternalMCPApprovalRequestItemParam.Serialization.cs new file mode 100644 index 000000000..5e1a9dc0c --- /dev/null +++ b/src/Generated/Models/InternalMCPApprovalRequestItemParam.Serialization.cs @@ -0,0 +1,141 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPApprovalRequestItemParam : IJsonModel + { + internal InternalMCPApprovalRequestItemParam() : this(InternalItemType.McpApprovalRequest, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPApprovalRequestItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("server_label") != true) + { + writer.WritePropertyName("server_label"u8); + writer.WriteStringValue(ServerLabel); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + } + + InternalMCPApprovalRequestItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPApprovalRequestItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPApprovalRequestItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPApprovalRequestItemParam(document.RootElement, options); + } + + internal static InternalMCPApprovalRequestItemParam DeserializeInternalMCPApprovalRequestItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string serverLabel = default; + string name = default; + string arguments = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("server_label"u8)) + { + serverLabel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("arguments"u8)) + { + arguments = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPApprovalRequestItemParam(kind, additionalBinaryDataProperties, serverLabel, name, arguments); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPApprovalRequestItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPApprovalRequestItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPApprovalRequestItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPApprovalRequestItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPApprovalRequestItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPApprovalRequestItemParam.cs b/src/Generated/Models/InternalMCPApprovalRequestItemParam.cs new file mode 100644 index 000000000..f42d3572e --- /dev/null +++ b/src/Generated/Models/InternalMCPApprovalRequestItemParam.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPApprovalRequestItemParam : InternalItemParam + { + public InternalMCPApprovalRequestItemParam(string serverLabel, string name, string arguments) : base(InternalItemType.McpApprovalRequest) + { + Argument.AssertNotNull(serverLabel, nameof(serverLabel)); + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(arguments, nameof(arguments)); + + ServerLabel = serverLabel; + Name = name; + Arguments = arguments; + } + + internal InternalMCPApprovalRequestItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string serverLabel, string name, string arguments) : base(kind, additionalBinaryDataProperties) + { + ServerLabel = serverLabel; + Name = name; + Arguments = arguments; + } + + public string ServerLabel { get; } + + public string Name { get; } + + public string Arguments { get; } + } +} diff --git a/src/Generated/Models/InternalMCPApprovalRequestItemResource.Serialization.cs b/src/Generated/Models/InternalMCPApprovalRequestItemResource.Serialization.cs new file mode 100644 index 000000000..1d6f5e97b --- /dev/null +++ b/src/Generated/Models/InternalMCPApprovalRequestItemResource.Serialization.cs @@ -0,0 +1,153 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPApprovalRequestItemResource : IJsonModel + { + internal InternalMCPApprovalRequestItemResource() : this(InternalItemType.McpApprovalRequest, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPApprovalRequestItemResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("server_label") != true) + { + writer.WritePropertyName("server_label"u8); + writer.WriteStringValue(ServerLabel); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + } + + InternalMCPApprovalRequestItemResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPApprovalRequestItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPApprovalRequestItemResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPApprovalRequestItemResource(document.RootElement, options); + } + + internal static InternalMCPApprovalRequestItemResource DeserializeInternalMCPApprovalRequestItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string serverLabel = default; + string name = default; + string arguments = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("server_label"u8)) + { + serverLabel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("arguments"u8)) + { + arguments = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPApprovalRequestItemResource( + kind, + id, + additionalBinaryDataProperties, + serverLabel, + name, + arguments); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPApprovalRequestItemResource)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPApprovalRequestItemResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPApprovalRequestItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPApprovalRequestItemResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPApprovalRequestItemResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPApprovalRequestItemResource.cs b/src/Generated/Models/InternalMCPApprovalRequestItemResource.cs new file mode 100644 index 000000000..6ca908e27 --- /dev/null +++ b/src/Generated/Models/InternalMCPApprovalRequestItemResource.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPApprovalRequestItemResource : ResponseItem + { + internal InternalMCPApprovalRequestItemResource(string id, string serverLabel, string name, string arguments) : base(InternalItemType.McpApprovalRequest, id) + { + ServerLabel = serverLabel; + Name = name; + Arguments = arguments; + } + + internal InternalMCPApprovalRequestItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string serverLabel, string name, string arguments) : base(kind, id, additionalBinaryDataProperties) + { + ServerLabel = serverLabel; + Name = name; + Arguments = arguments; + } + + public string ServerLabel { get; } + + public string Name { get; } + + public string Arguments { get; } + } +} diff --git a/src/Generated/Models/InternalMCPApprovalResponseItemParam.Serialization.cs b/src/Generated/Models/InternalMCPApprovalResponseItemParam.Serialization.cs new file mode 100644 index 000000000..e87670a8c --- /dev/null +++ b/src/Generated/Models/InternalMCPApprovalResponseItemParam.Serialization.cs @@ -0,0 +1,146 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPApprovalResponseItemParam : IJsonModel + { + internal InternalMCPApprovalResponseItemParam() : this(InternalItemType.McpApprovalResponse, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPApprovalResponseItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("approval_request_id") != true) + { + writer.WritePropertyName("approval_request_id"u8); + writer.WriteStringValue(ApprovalRequestId); + } + if (_additionalBinaryDataProperties?.ContainsKey("approve") != true) + { + writer.WritePropertyName("approve"u8); + writer.WriteBooleanValue(Approve); + } + if (Optional.IsDefined(Reason) && _additionalBinaryDataProperties?.ContainsKey("reason") != true) + { + writer.WritePropertyName("reason"u8); + writer.WriteStringValue(Reason); + } + } + + InternalMCPApprovalResponseItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPApprovalResponseItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPApprovalResponseItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPApprovalResponseItemParam(document.RootElement, options); + } + + internal static InternalMCPApprovalResponseItemParam DeserializeInternalMCPApprovalResponseItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string approvalRequestId = default; + bool approve = default; + string reason = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("approval_request_id"u8)) + { + approvalRequestId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("approve"u8)) + { + approve = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("reason"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reason = null; + continue; + } + reason = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPApprovalResponseItemParam(kind, additionalBinaryDataProperties, approvalRequestId, approve, reason); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPApprovalResponseItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPApprovalResponseItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPApprovalResponseItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPApprovalResponseItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPApprovalResponseItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPApprovalResponseItemParam.cs b/src/Generated/Models/InternalMCPApprovalResponseItemParam.cs new file mode 100644 index 000000000..43230c2fb --- /dev/null +++ b/src/Generated/Models/InternalMCPApprovalResponseItemParam.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPApprovalResponseItemParam : InternalItemParam + { + public InternalMCPApprovalResponseItemParam(string approvalRequestId, bool approve) : base(InternalItemType.McpApprovalResponse) + { + Argument.AssertNotNull(approvalRequestId, nameof(approvalRequestId)); + + ApprovalRequestId = approvalRequestId; + Approve = approve; + } + + internal InternalMCPApprovalResponseItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string approvalRequestId, bool approve, string reason) : base(kind, additionalBinaryDataProperties) + { + ApprovalRequestId = approvalRequestId; + Approve = approve; + Reason = reason; + } + + public string ApprovalRequestId { get; } + + public bool Approve { get; } + + public string Reason { get; set; } + } +} diff --git a/src/Generated/Models/InternalMCPApprovalResponseItemResource.Serialization.cs b/src/Generated/Models/InternalMCPApprovalResponseItemResource.Serialization.cs new file mode 100644 index 000000000..7b0c236da --- /dev/null +++ b/src/Generated/Models/InternalMCPApprovalResponseItemResource.Serialization.cs @@ -0,0 +1,158 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPApprovalResponseItemResource : IJsonModel + { + internal InternalMCPApprovalResponseItemResource() : this(InternalItemType.McpApprovalResponse, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPApprovalResponseItemResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("approval_request_id") != true) + { + writer.WritePropertyName("approval_request_id"u8); + writer.WriteStringValue(ApprovalRequestId); + } + if (_additionalBinaryDataProperties?.ContainsKey("approve") != true) + { + writer.WritePropertyName("approve"u8); + writer.WriteBooleanValue(Approve); + } + if (Optional.IsDefined(Reason) && _additionalBinaryDataProperties?.ContainsKey("reason") != true) + { + writer.WritePropertyName("reason"u8); + writer.WriteStringValue(Reason); + } + } + + InternalMCPApprovalResponseItemResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPApprovalResponseItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPApprovalResponseItemResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPApprovalResponseItemResource(document.RootElement, options); + } + + internal static InternalMCPApprovalResponseItemResource DeserializeInternalMCPApprovalResponseItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string approvalRequestId = default; + bool approve = default; + string reason = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("approval_request_id"u8)) + { + approvalRequestId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("approve"u8)) + { + approve = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("reason"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + reason = null; + continue; + } + reason = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPApprovalResponseItemResource( + kind, + id, + additionalBinaryDataProperties, + approvalRequestId, + approve, + reason); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPApprovalResponseItemResource)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPApprovalResponseItemResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPApprovalResponseItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPApprovalResponseItemResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPApprovalResponseItemResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPApprovalResponseItemResource.cs b/src/Generated/Models/InternalMCPApprovalResponseItemResource.cs new file mode 100644 index 000000000..8dbd2e28b --- /dev/null +++ b/src/Generated/Models/InternalMCPApprovalResponseItemResource.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPApprovalResponseItemResource : ResponseItem + { + internal InternalMCPApprovalResponseItemResource(string id, string approvalRequestId, bool approve) : base(InternalItemType.McpApprovalResponse, id) + { + ApprovalRequestId = approvalRequestId; + Approve = approve; + } + + internal InternalMCPApprovalResponseItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string approvalRequestId, bool approve, string reason) : base(kind, id, additionalBinaryDataProperties) + { + ApprovalRequestId = approvalRequestId; + Approve = approve; + Reason = reason; + } + + public string ApprovalRequestId { get; } + + public bool Approve { get; } + + public string Reason { get; } + } +} diff --git a/src/Generated/Models/InternalMCPCallItemParam.Serialization.cs b/src/Generated/Models/InternalMCPCallItemParam.Serialization.cs new file mode 100644 index 000000000..acea1238e --- /dev/null +++ b/src/Generated/Models/InternalMCPCallItemParam.Serialization.cs @@ -0,0 +1,180 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPCallItemParam : IJsonModel + { + internal InternalMCPCallItemParam() : this(InternalItemType.McpCall, null, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPCallItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("server_label") != true) + { + writer.WritePropertyName("server_label"u8); + writer.WriteStringValue(ServerLabel); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + if (Optional.IsDefined(Output) && _additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteStringValue(Output); + } + if (Optional.IsDefined(Error) && _additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteStringValue(Error); + } + } + + InternalMCPCallItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPCallItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPCallItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPCallItemParam(document.RootElement, options); + } + + internal static InternalMCPCallItemParam DeserializeInternalMCPCallItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string serverLabel = default; + string name = default; + string arguments = default; + string output = default; + string error = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("server_label"u8)) + { + serverLabel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("arguments"u8)) + { + arguments = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + output = null; + continue; + } + output = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("error"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + error = null; + continue; + } + error = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPCallItemParam( + kind, + additionalBinaryDataProperties, + serverLabel, + name, + arguments, + output, + error); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPCallItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPCallItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPCallItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPCallItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPCallItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPCallItemParam.cs b/src/Generated/Models/InternalMCPCallItemParam.cs new file mode 100644 index 000000000..9d8153d0b --- /dev/null +++ b/src/Generated/Models/InternalMCPCallItemParam.cs @@ -0,0 +1,43 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPCallItemParam : InternalItemParam + { + public InternalMCPCallItemParam(string serverLabel, string name, string arguments) : base(InternalItemType.McpCall) + { + Argument.AssertNotNull(serverLabel, nameof(serverLabel)); + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(arguments, nameof(arguments)); + + ServerLabel = serverLabel; + Name = name; + Arguments = arguments; + } + + internal InternalMCPCallItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string serverLabel, string name, string arguments, string output, string error) : base(kind, additionalBinaryDataProperties) + { + ServerLabel = serverLabel; + Name = name; + Arguments = arguments; + Output = output; + Error = error; + } + + public string ServerLabel { get; } + + public string Name { get; } + + public string Arguments { get; } + + public string Output { get; set; } + + public string Error { get; set; } + } +} diff --git a/src/Generated/Models/InternalMCPCallItemResource.Serialization.cs b/src/Generated/Models/InternalMCPCallItemResource.Serialization.cs new file mode 100644 index 000000000..566b55321 --- /dev/null +++ b/src/Generated/Models/InternalMCPCallItemResource.Serialization.cs @@ -0,0 +1,187 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPCallItemResource : IJsonModel + { + internal InternalMCPCallItemResource() : this(InternalItemType.McpCall, null, null, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPCallItemResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("server_label") != true) + { + writer.WritePropertyName("server_label"u8); + writer.WriteStringValue(ServerLabel); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); + writer.WriteStringValue(Arguments); + } + if (Optional.IsDefined(Output) && _additionalBinaryDataProperties?.ContainsKey("output") != true) + { + writer.WritePropertyName("output"u8); + writer.WriteStringValue(Output); + } + if (Optional.IsDefined(Error) && _additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteStringValue(Error); + } + } + + InternalMCPCallItemResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPCallItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPCallItemResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPCallItemResource(document.RootElement, options); + } + + internal static InternalMCPCallItemResource DeserializeInternalMCPCallItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string serverLabel = default; + string name = default; + string arguments = default; + string output = default; + string error = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("server_label"u8)) + { + serverLabel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("arguments"u8)) + { + arguments = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + output = null; + continue; + } + output = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("error"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + error = null; + continue; + } + error = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPCallItemResource( + kind, + id, + additionalBinaryDataProperties, + serverLabel, + name, + arguments, + output, + error); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPCallItemResource)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPCallItemResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPCallItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPCallItemResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPCallItemResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPCallItemResource.cs b/src/Generated/Models/InternalMCPCallItemResource.cs new file mode 100644 index 000000000..4d8d6bf50 --- /dev/null +++ b/src/Generated/Models/InternalMCPCallItemResource.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPCallItemResource : ResponseItem + { + internal InternalMCPCallItemResource(string id, string serverLabel, string name, string arguments) : base(InternalItemType.McpCall, id) + { + ServerLabel = serverLabel; + Name = name; + Arguments = arguments; + } + + internal InternalMCPCallItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string serverLabel, string name, string arguments, string output, string error) : base(kind, id, additionalBinaryDataProperties) + { + ServerLabel = serverLabel; + Name = name; + Arguments = arguments; + Output = output; + Error = error; + } + + public string ServerLabel { get; } + + public string Name { get; } + + public string Arguments { get; } + + public string Output { get; } + + public string Error { get; } + } +} diff --git a/src/Generated/Models/InternalMCPListToolsItemParam.Serialization.cs b/src/Generated/Models/InternalMCPListToolsItemParam.Serialization.cs new file mode 100644 index 000000000..5eb38d8ef --- /dev/null +++ b/src/Generated/Models/InternalMCPListToolsItemParam.Serialization.cs @@ -0,0 +1,156 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPListToolsItemParam : IJsonModel + { + internal InternalMCPListToolsItemParam() : this(InternalItemType.McpListTools, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPListToolsItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("server_label") != true) + { + writer.WritePropertyName("server_label"u8); + writer.WriteStringValue(ServerLabel); + } + if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (InternalMCPListToolsTool item in Tools) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(Error) && _additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteStringValue(Error); + } + } + + InternalMCPListToolsItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPListToolsItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPListToolsItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPListToolsItemParam(document.RootElement, options); + } + + internal static InternalMCPListToolsItemParam DeserializeInternalMCPListToolsItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string serverLabel = default; + IList tools = default; + string error = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("server_label"u8)) + { + serverLabel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("tools"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalMCPListToolsTool.DeserializeInternalMCPListToolsTool(item, options)); + } + tools = array; + continue; + } + if (prop.NameEquals("error"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + error = null; + continue; + } + error = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPListToolsItemParam(kind, additionalBinaryDataProperties, serverLabel, tools, error); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPListToolsItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPListToolsItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPListToolsItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPListToolsItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPListToolsItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPListToolsItemParam.cs b/src/Generated/Models/InternalMCPListToolsItemParam.cs new file mode 100644 index 000000000..63fb97101 --- /dev/null +++ b/src/Generated/Models/InternalMCPListToolsItemParam.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPListToolsItemParam : InternalItemParam + { + internal InternalMCPListToolsItemParam(string serverLabel, IEnumerable tools) : base(InternalItemType.McpListTools) + { + Argument.AssertNotNull(serverLabel, nameof(serverLabel)); + Argument.AssertNotNull(tools, nameof(tools)); + + ServerLabel = serverLabel; + Tools = tools.ToList(); + } + + internal InternalMCPListToolsItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string serverLabel, IList tools, string error) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ServerLabel = serverLabel; + Tools = tools ?? new ChangeTrackingList(); + Error = error; + } + + public string ServerLabel { get; } + + internal IList Tools { get; } + + public string Error { get; set; } + } +} diff --git a/src/Generated/Models/InternalMCPListToolsItemResource.Serialization.cs b/src/Generated/Models/InternalMCPListToolsItemResource.Serialization.cs new file mode 100644 index 000000000..a1074c201 --- /dev/null +++ b/src/Generated/Models/InternalMCPListToolsItemResource.Serialization.cs @@ -0,0 +1,168 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPListToolsItemResource : IJsonModel + { + internal InternalMCPListToolsItemResource() : this(InternalItemType.McpListTools, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPListToolsItemResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("server_label") != true) + { + writer.WritePropertyName("server_label"u8); + writer.WriteStringValue(ServerLabel); + } + if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (InternalMCPListToolsTool item in Tools) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(Error) && _additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteStringValue(Error); + } + } + + InternalMCPListToolsItemResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPListToolsItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPListToolsItemResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPListToolsItemResource(document.RootElement, options); + } + + internal static InternalMCPListToolsItemResource DeserializeInternalMCPListToolsItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string serverLabel = default; + IList tools = default; + string error = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("server_label"u8)) + { + serverLabel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("tools"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalMCPListToolsTool.DeserializeInternalMCPListToolsTool(item, options)); + } + tools = array; + continue; + } + if (prop.NameEquals("error"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + error = null; + continue; + } + error = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPListToolsItemResource( + kind, + id, + additionalBinaryDataProperties, + serverLabel, + tools, + error); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPListToolsItemResource)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPListToolsItemResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPListToolsItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPListToolsItemResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPListToolsItemResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPListToolsItemResource.cs b/src/Generated/Models/InternalMCPListToolsItemResource.cs new file mode 100644 index 000000000..ea8a046f1 --- /dev/null +++ b/src/Generated/Models/InternalMCPListToolsItemResource.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPListToolsItemResource : ResponseItem + { + internal InternalMCPListToolsItemResource(string id, string serverLabel, IEnumerable tools) : base(InternalItemType.McpListTools, id) + { + ServerLabel = serverLabel; + Tools = tools.ToList(); + } + + internal InternalMCPListToolsItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string serverLabel, IList tools, string error) : base(kind, id, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ServerLabel = serverLabel; + Tools = tools ?? new ChangeTrackingList(); + Error = error; + } + + public string ServerLabel { get; } + + internal IList Tools { get; } + + public string Error { get; } + } +} diff --git a/src/Generated/Models/InternalMCPListToolsTool.Serialization.cs b/src/Generated/Models/InternalMCPListToolsTool.Serialization.cs new file mode 100644 index 000000000..f4ee38a5b --- /dev/null +++ b/src/Generated/Models/InternalMCPListToolsTool.Serialization.cs @@ -0,0 +1,189 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPListToolsTool : IJsonModel + { + internal InternalMCPListToolsTool() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPListToolsTool)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (Optional.IsDefined(Description) && _additionalBinaryDataProperties?.ContainsKey("description") != true) + { + writer.WritePropertyName("description"u8); + writer.WriteStringValue(Description); + } + if (_additionalBinaryDataProperties?.ContainsKey("input_schema") != true) + { + writer.WritePropertyName("input_schema"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(InputSchema); +#else + using (JsonDocument document = JsonDocument.Parse(InputSchema)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(Annotations) && _additionalBinaryDataProperties?.ContainsKey("annotations") != true) + { + writer.WritePropertyName("annotations"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Annotations); +#else + using (JsonDocument document = JsonDocument.Parse(Annotations)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalMCPListToolsTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPListToolsTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPListToolsTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPListToolsTool(document.RootElement, options); + } + + internal static InternalMCPListToolsTool DeserializeInternalMCPListToolsTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string name = default; + string description = default; + BinaryData inputSchema = default; + BinaryData annotations = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("description"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + description = null; + continue; + } + description = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("input_schema"u8)) + { + inputSchema = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("annotations"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + annotations = null; + continue; + } + annotations = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPListToolsTool(name, description, inputSchema, annotations, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPListToolsTool)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPListToolsTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPListToolsTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPListToolsTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPListToolsTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPListToolsTool.cs b/src/Generated/Models/InternalMCPListToolsTool.cs new file mode 100644 index 000000000..882e29552 --- /dev/null +++ b/src/Generated/Models/InternalMCPListToolsTool.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPListToolsTool + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalMCPListToolsTool(string name, BinaryData inputSchema) + { + Argument.AssertNotNull(name, nameof(name)); + Argument.AssertNotNull(inputSchema, nameof(inputSchema)); + + Name = name; + InputSchema = inputSchema; + } + + internal InternalMCPListToolsTool(string name, string description, BinaryData inputSchema, BinaryData annotations, IDictionary additionalBinaryDataProperties) + { + Name = name; + Description = description; + InputSchema = inputSchema; + Annotations = annotations; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Name { get; set; } + + public string Description { get; set; } + + public BinaryData InputSchema { get; set; } + + public BinaryData Annotations { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalMCPTool.Serialization.cs b/src/Generated/Models/InternalMCPTool.Serialization.cs new file mode 100644 index 000000000..6b74ddb58 --- /dev/null +++ b/src/Generated/Models/InternalMCPTool.Serialization.cs @@ -0,0 +1,221 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPTool : IJsonModel + { + internal InternalMCPTool() : this(InternalToolType.Mcp, null, null, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("server_label") != true) + { + writer.WritePropertyName("server_label"u8); + writer.WriteStringValue(ServerLabel); + } + if (_additionalBinaryDataProperties?.ContainsKey("server_url") != true) + { + writer.WritePropertyName("server_url"u8); + writer.WriteStringValue(ServerUrl); + } + if (Optional.IsCollectionDefined(Headers) && _additionalBinaryDataProperties?.ContainsKey("headers") != true) + { + writer.WritePropertyName("headers"u8); + writer.WriteStartObject(); + foreach (var item in Headers) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + if (Optional.IsDefined(AllowedTools) && _additionalBinaryDataProperties?.ContainsKey("allowed_tools") != true) + { + writer.WritePropertyName("allowed_tools"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(AllowedTools); +#else + using (JsonDocument document = JsonDocument.Parse(AllowedTools)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(RequireApproval) && _additionalBinaryDataProperties?.ContainsKey("require_approval") != true) + { + writer.WritePropertyName("require_approval"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(RequireApproval); +#else + using (JsonDocument document = JsonDocument.Parse(RequireApproval)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalMCPTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMCPTool)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPTool(document.RootElement, options); + } + + internal static InternalMCPTool DeserializeInternalMCPTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string serverLabel = default; + string serverUrl = default; + IDictionary headers = default; + BinaryData allowedTools = default; + BinaryData requireApproval = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("server_label"u8)) + { + serverLabel = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("server_url"u8)) + { + serverUrl = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("headers"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + headers = dictionary; + continue; + } + if (prop.NameEquals("allowed_tools"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + allowedTools = null; + continue; + } + allowedTools = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("require_approval"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + requireApproval = null; + continue; + } + requireApproval = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPTool( + kind, + additionalBinaryDataProperties, + serverLabel, + serverUrl, + headers ?? new ChangeTrackingDictionary(), + allowedTools, + requireApproval); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPTool)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMCPTool)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPTool.cs b/src/Generated/Models/InternalMCPTool.cs new file mode 100644 index 000000000..59e9dafe3 --- /dev/null +++ b/src/Generated/Models/InternalMCPTool.cs @@ -0,0 +1,43 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPTool : ResponseTool + { + public InternalMCPTool(string serverLabel, string serverUrl) : base(InternalToolType.Mcp) + { + Argument.AssertNotNull(serverLabel, nameof(serverLabel)); + Argument.AssertNotNull(serverUrl, nameof(serverUrl)); + + ServerLabel = serverLabel; + ServerUrl = serverUrl; + Headers = new ChangeTrackingDictionary(); + } + + internal InternalMCPTool(InternalToolType kind, IDictionary additionalBinaryDataProperties, string serverLabel, string serverUrl, IDictionary headers, BinaryData allowedTools, BinaryData requireApproval) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ServerLabel = serverLabel; + ServerUrl = serverUrl; + Headers = headers ?? new ChangeTrackingDictionary(); + AllowedTools = allowedTools; + RequireApproval = requireApproval; + } + + public string ServerLabel { get; set; } + + public string ServerUrl { get; set; } + + public IDictionary Headers { get; set; } + + public BinaryData AllowedTools { get; set; } + + public BinaryData RequireApproval { get; set; } + } +} diff --git a/src/Generated/Models/InternalMCPToolAllowedTools1.Serialization.cs b/src/Generated/Models/InternalMCPToolAllowedTools1.Serialization.cs new file mode 100644 index 000000000..b0d0c50e9 --- /dev/null +++ b/src/Generated/Models/InternalMCPToolAllowedTools1.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPToolAllowedTools1 : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPToolAllowedTools1)} does not support writing '{format}' format."); + } + if (Optional.IsCollectionDefined(ToolNames) && _additionalBinaryDataProperties?.ContainsKey("tool_names") != true) + { + writer.WritePropertyName("tool_names"u8); + writer.WriteStartArray(); + foreach (string item in ToolNames) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalMCPToolAllowedTools1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPToolAllowedTools1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPToolAllowedTools1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPToolAllowedTools1(document.RootElement, options); + } + + internal static InternalMCPToolAllowedTools1 DeserializeInternalMCPToolAllowedTools1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IList toolNames = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("tool_names"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + toolNames = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPToolAllowedTools1(toolNames ?? new ChangeTrackingList(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPToolAllowedTools1)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPToolAllowedTools1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPToolAllowedTools1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPToolAllowedTools1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPToolAllowedTools1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPToolAllowedTools1.cs b/src/Generated/Models/InternalMCPToolAllowedTools1.cs new file mode 100644 index 000000000..4559420b3 --- /dev/null +++ b/src/Generated/Models/InternalMCPToolAllowedTools1.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPToolAllowedTools1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalMCPToolAllowedTools1() : this(null, null) + { + } + + internal InternalMCPToolAllowedTools1(IList toolNames, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ToolNames = toolNames ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IList ToolNames { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalMCPToolRequireApproval1.Serialization.cs b/src/Generated/Models/InternalMCPToolRequireApproval1.Serialization.cs new file mode 100644 index 000000000..b44fe63df --- /dev/null +++ b/src/Generated/Models/InternalMCPToolRequireApproval1.Serialization.cs @@ -0,0 +1,147 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPToolRequireApproval1 : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPToolRequireApproval1)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Always) && _additionalBinaryDataProperties?.ContainsKey("always") != true) + { + writer.WritePropertyName("always"u8); + writer.WriteObjectValue(Always, options); + } + if (Optional.IsDefined(Never) && _additionalBinaryDataProperties?.ContainsKey("never") != true) + { + writer.WritePropertyName("never"u8); + writer.WriteObjectValue(Never, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalMCPToolRequireApproval1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPToolRequireApproval1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPToolRequireApproval1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPToolRequireApproval1(document.RootElement, options); + } + + internal static InternalMCPToolRequireApproval1 DeserializeInternalMCPToolRequireApproval1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalMCPToolRequireApprovalAlways always = default; + InternalMCPToolRequireApprovalNever never = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("always"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + always = InternalMCPToolRequireApprovalAlways.DeserializeInternalMCPToolRequireApprovalAlways(prop.Value, options); + continue; + } + if (prop.NameEquals("never"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + never = InternalMCPToolRequireApprovalNever.DeserializeInternalMCPToolRequireApprovalNever(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPToolRequireApproval1(always, never, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPToolRequireApproval1)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPToolRequireApproval1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPToolRequireApproval1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPToolRequireApproval1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPToolRequireApproval1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPToolRequireApproval1.cs b/src/Generated/Models/InternalMCPToolRequireApproval1.cs new file mode 100644 index 000000000..6f98d6be9 --- /dev/null +++ b/src/Generated/Models/InternalMCPToolRequireApproval1.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPToolRequireApproval1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalMCPToolRequireApproval1() + { + } + + internal InternalMCPToolRequireApproval1(InternalMCPToolRequireApprovalAlways always, InternalMCPToolRequireApprovalNever never, IDictionary additionalBinaryDataProperties) + { + Always = always; + Never = never; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalMCPToolRequireApprovalAlways Always { get; set; } + + internal InternalMCPToolRequireApprovalNever Never { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalMCPToolRequireApprovalAlways.Serialization.cs b/src/Generated/Models/InternalMCPToolRequireApprovalAlways.Serialization.cs new file mode 100644 index 000000000..357c53c58 --- /dev/null +++ b/src/Generated/Models/InternalMCPToolRequireApprovalAlways.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPToolRequireApprovalAlways : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPToolRequireApprovalAlways)} does not support writing '{format}' format."); + } + if (Optional.IsCollectionDefined(ToolNames) && _additionalBinaryDataProperties?.ContainsKey("tool_names") != true) + { + writer.WritePropertyName("tool_names"u8); + writer.WriteStartArray(); + foreach (string item in ToolNames) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalMCPToolRequireApprovalAlways IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPToolRequireApprovalAlways JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPToolRequireApprovalAlways)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPToolRequireApprovalAlways(document.RootElement, options); + } + + internal static InternalMCPToolRequireApprovalAlways DeserializeInternalMCPToolRequireApprovalAlways(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IList toolNames = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("tool_names"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + toolNames = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPToolRequireApprovalAlways(toolNames ?? new ChangeTrackingList(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPToolRequireApprovalAlways)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPToolRequireApprovalAlways IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPToolRequireApprovalAlways PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPToolRequireApprovalAlways(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPToolRequireApprovalAlways)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPToolRequireApprovalAlways.cs b/src/Generated/Models/InternalMCPToolRequireApprovalAlways.cs new file mode 100644 index 000000000..de3beda17 --- /dev/null +++ b/src/Generated/Models/InternalMCPToolRequireApprovalAlways.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPToolRequireApprovalAlways + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalMCPToolRequireApprovalAlways() : this(null, null) + { + } + + internal InternalMCPToolRequireApprovalAlways(IList toolNames, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ToolNames = toolNames ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IList ToolNames { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalMCPToolRequireApprovalNever.Serialization.cs b/src/Generated/Models/InternalMCPToolRequireApprovalNever.Serialization.cs new file mode 100644 index 000000000..5760a702c --- /dev/null +++ b/src/Generated/Models/InternalMCPToolRequireApprovalNever.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPToolRequireApprovalNever : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPToolRequireApprovalNever)} does not support writing '{format}' format."); + } + if (Optional.IsCollectionDefined(ToolNames) && _additionalBinaryDataProperties?.ContainsKey("tool_names") != true) + { + writer.WritePropertyName("tool_names"u8); + writer.WriteStartArray(); + foreach (string item in ToolNames) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalMCPToolRequireApprovalNever IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPToolRequireApprovalNever JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMCPToolRequireApprovalNever)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMCPToolRequireApprovalNever(document.RootElement, options); + } + + internal static InternalMCPToolRequireApprovalNever DeserializeInternalMCPToolRequireApprovalNever(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IList toolNames = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("tool_names"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + toolNames = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMCPToolRequireApprovalNever(toolNames ?? new ChangeTrackingList(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMCPToolRequireApprovalNever)} does not support writing '{options.Format}' format."); + } + } + + InternalMCPToolRequireApprovalNever IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalMCPToolRequireApprovalNever PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMCPToolRequireApprovalNever(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMCPToolRequireApprovalNever)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMCPToolRequireApprovalNever.cs b/src/Generated/Models/InternalMCPToolRequireApprovalNever.cs new file mode 100644 index 000000000..250352998 --- /dev/null +++ b/src/Generated/Models/InternalMCPToolRequireApprovalNever.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalMCPToolRequireApprovalNever + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalMCPToolRequireApprovalNever() : this(null, null) + { + } + + internal InternalMCPToolRequireApprovalNever(IList toolNames, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ToolNames = toolNames ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IList ToolNames { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalMessageContentImageFileObject.Serialization.cs b/src/Generated/Models/InternalMessageContentImageFileObject.Serialization.cs new file mode 100644 index 000000000..b4fd0053a --- /dev/null +++ b/src/Generated/Models/InternalMessageContentImageFileObject.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentImageFileObject : IJsonModel + { + internal InternalMessageContentImageFileObject() : this(InternalMessageContentType.ImageFile, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentImageFileObject)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("image_file") != true) + { + writer.WritePropertyName("image_file"u8); + writer.WriteObjectValue(ImageFile, options); + } + } + + InternalMessageContentImageFileObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageContentImageFileObject)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentImageFileObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMessageContentImageFileObject(document.RootElement, options); + } + + internal static InternalMessageContentImageFileObject DeserializeInternalMessageContentImageFileObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalMessageContentType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalMessageContentItemFileObjectImageFile imageFile = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalMessageContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("image_file"u8)) + { + imageFile = InternalMessageContentItemFileObjectImageFile.DeserializeInternalMessageContentItemFileObjectImageFile(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMessageContentImageFileObject(kind, additionalBinaryDataProperties, imageFile); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMessageContentImageFileObject)} does not support writing '{options.Format}' format."); + } + } + + InternalMessageContentImageFileObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageContentImageFileObject)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMessageContentImageFileObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMessageContentImageFileObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMessageContentImageFileObject.cs b/src/Generated/Models/InternalMessageContentImageFileObject.cs new file mode 100644 index 000000000..020a20c25 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentImageFileObject.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentImageFileObject : MessageContent + { + internal InternalMessageContentImageFileObject(InternalMessageContentItemFileObjectImageFile imageFile) : base(InternalMessageContentType.ImageFile) + { + Argument.AssertNotNull(imageFile, nameof(imageFile)); + + ImageFile = imageFile; + } + + internal InternalMessageContentImageFileObject(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties, InternalMessageContentItemFileObjectImageFile imageFile) : base(kind, additionalBinaryDataProperties) + { + ImageFile = imageFile; + } + + internal InternalMessageContentItemFileObjectImageFile ImageFile { get; set; } + } +} diff --git a/src/Generated/Models/InternalMessageContentImageFileObjectImageFileDetail.cs b/src/Generated/Models/InternalMessageContentImageFileObjectImageFileDetail.cs index 178be85d1..ced090438 100644 --- a/src/Generated/Models/InternalMessageContentImageFileObjectImageFileDetail.cs +++ b/src/Generated/Models/InternalMessageContentImageFileObjectImageFileDetail.cs @@ -22,11 +22,11 @@ public InternalMessageContentImageFileObjectImageFileDetail(string value) _value = value; } - public static InternalMessageContentImageFileObjectImageFileDetail Auto { get; } = new InternalMessageContentImageFileObjectImageFileDetail(AutoValue); + internal static InternalMessageContentImageFileObjectImageFileDetail Auto { get; } = new InternalMessageContentImageFileObjectImageFileDetail(AutoValue); - public static InternalMessageContentImageFileObjectImageFileDetail Low { get; } = new InternalMessageContentImageFileObjectImageFileDetail(LowValue); + internal static InternalMessageContentImageFileObjectImageFileDetail Low { get; } = new InternalMessageContentImageFileObjectImageFileDetail(LowValue); - public static InternalMessageContentImageFileObjectImageFileDetail High { get; } = new InternalMessageContentImageFileObjectImageFileDetail(HighValue); + internal static InternalMessageContentImageFileObjectImageFileDetail High { get; } = new InternalMessageContentImageFileObjectImageFileDetail(HighValue); public static bool operator ==(InternalMessageContentImageFileObjectImageFileDetail left, InternalMessageContentImageFileObjectImageFileDetail right) => left.Equals(right); diff --git a/src/Generated/Models/InternalMessageContentImageFileObjectType.cs b/src/Generated/Models/InternalMessageContentImageFileObjectType.cs deleted file mode 100644 index 7a34d366e..000000000 --- a/src/Generated/Models/InternalMessageContentImageFileObjectType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalMessageContentImageFileObjectType : IEquatable - { - private readonly string _value; - private const string ImageFileValue = "image_file"; - - public InternalMessageContentImageFileObjectType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalMessageContentImageFileObjectType ImageFile { get; } = new InternalMessageContentImageFileObjectType(ImageFileValue); - - public static bool operator ==(InternalMessageContentImageFileObjectType left, InternalMessageContentImageFileObjectType right) => left.Equals(right); - - public static bool operator !=(InternalMessageContentImageFileObjectType left, InternalMessageContentImageFileObjectType right) => !left.Equals(right); - - public static implicit operator InternalMessageContentImageFileObjectType(string value) => new InternalMessageContentImageFileObjectType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalMessageContentImageFileObjectType other && Equals(other); - - public bool Equals(InternalMessageContentImageFileObjectType 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/InternalMessageContentImageUrlObject.Serialization.cs b/src/Generated/Models/InternalMessageContentImageUrlObject.Serialization.cs new file mode 100644 index 000000000..e1cfca445 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentImageUrlObject.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentImageUrlObject : IJsonModel + { + internal InternalMessageContentImageUrlObject() : this(InternalMessageContentType.ImageUrl, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentImageUrlObject)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("image_url") != true) + { + writer.WritePropertyName("image_url"u8); + writer.WriteObjectValue(ImageUrl, options); + } + } + + InternalMessageContentImageUrlObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageContentImageUrlObject)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentImageUrlObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMessageContentImageUrlObject(document.RootElement, options); + } + + internal static InternalMessageContentImageUrlObject DeserializeInternalMessageContentImageUrlObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalMessageContentType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalMessageContentImageUrlObjectImageUrl imageUrl = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalMessageContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("image_url"u8)) + { + imageUrl = InternalMessageContentImageUrlObjectImageUrl.DeserializeInternalMessageContentImageUrlObjectImageUrl(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMessageContentImageUrlObject(kind, additionalBinaryDataProperties, imageUrl); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMessageContentImageUrlObject)} does not support writing '{options.Format}' format."); + } + } + + InternalMessageContentImageUrlObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageContentImageUrlObject)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMessageContentImageUrlObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMessageContentImageUrlObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMessageContentImageUrlObject.cs b/src/Generated/Models/InternalMessageContentImageUrlObject.cs new file mode 100644 index 000000000..7fd555811 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentImageUrlObject.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentImageUrlObject : MessageContent + { + internal InternalMessageContentImageUrlObject(InternalMessageContentImageUrlObjectImageUrl imageUrl) : base(InternalMessageContentType.ImageUrl) + { + Argument.AssertNotNull(imageUrl, nameof(imageUrl)); + + ImageUrl = imageUrl; + } + + internal InternalMessageContentImageUrlObject(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties, InternalMessageContentImageUrlObjectImageUrl imageUrl) : base(kind, additionalBinaryDataProperties) + { + ImageUrl = imageUrl; + } + + internal InternalMessageContentImageUrlObjectImageUrl ImageUrl { get; set; } + } +} diff --git a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs index 5b6badf80..3eedeaab1 100644 --- a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrl.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageContentImageUrlObjectImageUrl IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentImageUrlObjectImageUrl JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static InternalMessageContentImageUrlObjectImageUrl DeserializeInternal detail = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentImageUrlObjectImageUrl(url, detail, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static InternalMessageContentImageUrlObjectImageUrl DeserializeInternal BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageContentImageUrlObjectImageUrl)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageContentImageUrlObjectImageUrl IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentImageUrlObjectImageUrl PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalMessageContentImageUrlObjectImageUrl PersistableModelC } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageContentImageUrlObjectImageUrl internalMessageContentImageUrlObjectImageUrl) - { - if (internalMessageContentImageUrlObjectImageUrl == null) - { - return null; - } - return BinaryContent.Create(internalMessageContentImageUrlObjectImageUrl, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageContentImageUrlObjectImageUrl(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageContentImageUrlObjectImageUrl(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrlDetail.cs b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrlDetail.cs index b33325652..1bc5a670d 100644 --- a/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrlDetail.cs +++ b/src/Generated/Models/InternalMessageContentImageUrlObjectImageUrlDetail.cs @@ -22,11 +22,11 @@ public InternalMessageContentImageUrlObjectImageUrlDetail(string value) _value = value; } - public static InternalMessageContentImageUrlObjectImageUrlDetail Auto { get; } = new InternalMessageContentImageUrlObjectImageUrlDetail(AutoValue); + internal static InternalMessageContentImageUrlObjectImageUrlDetail Auto { get; } = new InternalMessageContentImageUrlObjectImageUrlDetail(AutoValue); - public static InternalMessageContentImageUrlObjectImageUrlDetail Low { get; } = new InternalMessageContentImageUrlObjectImageUrlDetail(LowValue); + internal static InternalMessageContentImageUrlObjectImageUrlDetail Low { get; } = new InternalMessageContentImageUrlObjectImageUrlDetail(LowValue); - public static InternalMessageContentImageUrlObjectImageUrlDetail High { get; } = new InternalMessageContentImageUrlObjectImageUrlDetail(HighValue); + internal static InternalMessageContentImageUrlObjectImageUrlDetail High { get; } = new InternalMessageContentImageUrlObjectImageUrlDetail(HighValue); public static bool operator ==(InternalMessageContentImageUrlObjectImageUrlDetail left, InternalMessageContentImageUrlObjectImageUrlDetail right) => left.Equals(right); diff --git a/src/Generated/Models/InternalMessageContentImageUrlObjectType.cs b/src/Generated/Models/InternalMessageContentImageUrlObjectType.cs deleted file mode 100644 index 50e542907..000000000 --- a/src/Generated/Models/InternalMessageContentImageUrlObjectType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalMessageContentImageUrlObjectType : IEquatable - { - private readonly string _value; - private const string ImageUrlValue = "image_url"; - - public InternalMessageContentImageUrlObjectType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalMessageContentImageUrlObjectType ImageUrl { get; } = new InternalMessageContentImageUrlObjectType(ImageUrlValue); - - public static bool operator ==(InternalMessageContentImageUrlObjectType left, InternalMessageContentImageUrlObjectType right) => left.Equals(right); - - public static bool operator !=(InternalMessageContentImageUrlObjectType left, InternalMessageContentImageUrlObjectType right) => !left.Equals(right); - - public static implicit operator InternalMessageContentImageUrlObjectType(string value) => new InternalMessageContentImageUrlObjectType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalMessageContentImageUrlObjectType other && Equals(other); - - public bool Equals(InternalMessageContentImageUrlObjectType 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/InternalMessageContentItemFileObjectImageFile.Serialization.cs b/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs index f1078ff05..546d040af 100644 --- a/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentItemFileObjectImageFile.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageContentItemFileObjectImageFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentItemFileObjectImageFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static InternalMessageContentItemFileObjectImageFile DeserializeInterna detail = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentItemFileObjectImageFile(fileId, detail, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static InternalMessageContentItemFileObjectImageFile DeserializeInterna BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageContentItemFileObjectImageFile)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageContentItemFileObjectImageFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentItemFileObjectImageFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalMessageContentItemFileObjectImageFile PersistableModel } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageContentItemFileObjectImageFile internalMessageContentItemFileObjectImageFile) - { - if (internalMessageContentItemFileObjectImageFile == null) - { - return null; - } - return BinaryContent.Create(internalMessageContentItemFileObjectImageFile, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageContentItemFileObjectImageFile(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageContentItemFileObjectImageFile(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageContentRefusalObject.Serialization.cs b/src/Generated/Models/InternalMessageContentRefusalObject.Serialization.cs new file mode 100644 index 000000000..06f1911d0 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentRefusalObject.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentRefusalObject : IJsonModel + { + internal InternalMessageContentRefusalObject() : this(InternalMessageContentType.Refusal, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentRefusalObject)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) + { + writer.WritePropertyName("refusal"u8); + writer.WriteStringValue(InternalRefusal); + } + } + + InternalMessageContentRefusalObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageContentRefusalObject)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentRefusalObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMessageContentRefusalObject(document.RootElement, options); + } + + internal static InternalMessageContentRefusalObject DeserializeInternalMessageContentRefusalObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalMessageContentType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string internalRefusal = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalMessageContentType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("refusal"u8)) + { + internalRefusal = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMessageContentRefusalObject(kind, additionalBinaryDataProperties, internalRefusal); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMessageContentRefusalObject)} does not support writing '{options.Format}' format."); + } + } + + InternalMessageContentRefusalObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageContentRefusalObject)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMessageContentRefusalObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMessageContentRefusalObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMessageContentRefusalObject.cs b/src/Generated/Models/InternalMessageContentRefusalObject.cs new file mode 100644 index 000000000..fb91e3bd0 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentRefusalObject.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentRefusalObject : MessageContent + { + public InternalMessageContentRefusalObject(string internalRefusal) : base(InternalMessageContentType.Refusal) + { + Argument.AssertNotNull(internalRefusal, nameof(internalRefusal)); + + InternalRefusal = internalRefusal; + } + + internal InternalMessageContentRefusalObject(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties, string internalRefusal) : base(kind, additionalBinaryDataProperties) + { + InternalRefusal = internalRefusal; + } + } +} diff --git a/src/Generated/Models/InternalMessageContentRefusalObjectType.cs b/src/Generated/Models/InternalMessageContentRefusalObjectType.cs deleted file mode 100644 index bf9339d90..000000000 --- a/src/Generated/Models/InternalMessageContentRefusalObjectType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalMessageContentRefusalObjectType : IEquatable - { - private readonly string _value; - private const string RefusalValue = "refusal"; - - public InternalMessageContentRefusalObjectType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalMessageContentRefusalObjectType Refusal { get; } = new InternalMessageContentRefusalObjectType(RefusalValue); - - public static bool operator ==(InternalMessageContentRefusalObjectType left, InternalMessageContentRefusalObjectType right) => left.Equals(right); - - public static bool operator !=(InternalMessageContentRefusalObjectType left, InternalMessageContentRefusalObjectType right) => !left.Equals(right); - - public static implicit operator InternalMessageContentRefusalObjectType(string value) => new InternalMessageContentRefusalObjectType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalMessageContentRefusalObjectType other && Equals(other); - - public bool Equals(InternalMessageContentRefusalObjectType 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/InternalMessageContentTextAnnotationType.cs b/src/Generated/Models/InternalMessageContentTextAnnotationType.cs new file mode 100644 index 000000000..3cdd76bf7 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentTextAnnotationType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal readonly partial struct InternalMessageContentTextAnnotationType : IEquatable + { + private readonly string _value; + private const string FileCitationValue = "file_citation"; + private const string FilePathValue = "file_path"; + + public InternalMessageContentTextAnnotationType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalMessageContentTextAnnotationType FileCitation { get; } = new InternalMessageContentTextAnnotationType(FileCitationValue); + + internal static InternalMessageContentTextAnnotationType FilePath { get; } = new InternalMessageContentTextAnnotationType(FilePathValue); + + public static bool operator ==(InternalMessageContentTextAnnotationType left, InternalMessageContentTextAnnotationType right) => left.Equals(right); + + public static bool operator !=(InternalMessageContentTextAnnotationType left, InternalMessageContentTextAnnotationType right) => !left.Equals(right); + + public static implicit operator InternalMessageContentTextAnnotationType(string value) => new InternalMessageContentTextAnnotationType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalMessageContentTextAnnotationType other && Equals(other); + + public bool Equals(InternalMessageContentTextAnnotationType 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/InternalMessageContentTextAnnotationsFileCitationObject.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.Serialization.cs index 2963c6300..814468cda 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageContentTextAnnotationsFileCitationObject : IJsonModel { - internal InternalMessageContentTextAnnotationsFileCitationObject() + internal InternalMessageContentTextAnnotationsFileCitationObject() : this(InternalMessageContentTextAnnotationType.FileCitation, null, null, null, default, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(U writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageContentTextAnnotationsFileCitationObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageContentTextAnnotationsFileCitationObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageContentTextObjectAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,7 +75,7 @@ internal static InternalMessageContentTextAnnotationsFileCitationObject Deserial { return null; } - string @type = "file_citation"; + InternalMessageContentTextAnnotationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string text = default; InternalMessageContentTextAnnotationsFileCitationObjectFileCitation fileCitation = default; @@ -83,7 +85,7 @@ internal static InternalMessageContentTextAnnotationsFileCitationObject Deserial { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentTextAnnotationType(prop.Value.GetString()); continue; } if (prop.NameEquals("text"u8)) @@ -106,10 +108,11 @@ internal static InternalMessageContentTextAnnotationsFileCitationObject Deserial endIndex = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextAnnotationsFileCitationObject( - @type, + kind, additionalBinaryDataProperties, text, fileCitation, @@ -119,13 +122,14 @@ internal static InternalMessageContentTextAnnotationsFileCitationObject Deserial BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageContentTextAnnotationsFileCitationObject)} does not support writing '{options.Format}' format."); } @@ -133,6 +137,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageContentTextAnnotationsFileCitationObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageContentTextAnnotationsFileCitationObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageContentTextObjectAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,21 +154,5 @@ protected override InternalMessageContentTextObjectAnnotation PersistableModelCr } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageContentTextAnnotationsFileCitationObject internalMessageContentTextAnnotationsFileCitationObject) - { - if (internalMessageContentTextAnnotationsFileCitationObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageContentTextAnnotationsFileCitationObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageContentTextAnnotationsFileCitationObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageContentTextAnnotationsFileCitationObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.cs index e5a797c9e..1b7ac257d 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObject.cs @@ -10,7 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageContentTextAnnotationsFileCitationObject : InternalMessageContentTextObjectAnnotation { - public InternalMessageContentTextAnnotationsFileCitationObject(string text, InternalMessageContentTextAnnotationsFileCitationObjectFileCitation fileCitation, int startIndex, int endIndex) : base("file_citation") + internal InternalMessageContentTextAnnotationsFileCitationObject(string text, InternalMessageContentTextAnnotationsFileCitationObjectFileCitation fileCitation, int startIndex, int endIndex) : base(InternalMessageContentTextAnnotationType.FileCitation) { Argument.AssertNotNull(text, nameof(text)); Argument.AssertNotNull(fileCitation, nameof(fileCitation)); @@ -21,7 +21,7 @@ public InternalMessageContentTextAnnotationsFileCitationObject(string text, Inte EndIndex = endIndex; } - internal InternalMessageContentTextAnnotationsFileCitationObject(string @type, IDictionary additionalBinaryDataProperties, string text, InternalMessageContentTextAnnotationsFileCitationObjectFileCitation fileCitation, int startIndex, int endIndex) : base(@type, additionalBinaryDataProperties) + internal InternalMessageContentTextAnnotationsFileCitationObject(InternalMessageContentTextAnnotationType kind, IDictionary additionalBinaryDataProperties, string text, InternalMessageContentTextAnnotationsFileCitationObjectFileCitation fileCitation, int startIndex, int endIndex) : base(kind, additionalBinaryDataProperties) { Text = text; FileCitation = fileCitation; @@ -31,7 +31,7 @@ internal InternalMessageContentTextAnnotationsFileCitationObject(string @type, I public string Text { get; set; } - public InternalMessageContentTextAnnotationsFileCitationObjectFileCitation FileCitation { get; set; } + internal InternalMessageContentTextAnnotationsFileCitationObjectFileCitation FileCitation { get; set; } public int StartIndex { get; set; } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs index 5532e3962..7cfc76c5c 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageContentTextAnnotationsFileCitationObjectFileCitation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentTextAnnotationsFileCitationObjectFileCitation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalMessageContentTextAnnotationsFileCitationObjectFileCitat fileId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextAnnotationsFileCitationObjectFileCitation(fileId, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalMessageContentTextAnnotationsFileCitationObjectFileCitat BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageContentTextAnnotationsFileCitationObjectFileCitation)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageContentTextAnnotationsFileCitationObjectFileCitation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentTextAnnotationsFileCitationObjectFileCitation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalMessageContentTextAnnotationsFileCitationObjectFileCit } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageContentTextAnnotationsFileCitationObjectFileCitation internalMessageContentTextAnnotationsFileCitationObjectFileCitation) - { - if (internalMessageContentTextAnnotationsFileCitationObjectFileCitation == null) - { - return null; - } - return BinaryContent.Create(internalMessageContentTextAnnotationsFileCitationObjectFileCitation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageContentTextAnnotationsFileCitationObjectFileCitation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageContentTextAnnotationsFileCitationObjectFileCitation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.Serialization.cs index 96009790b..1c68310f9 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageContentTextAnnotationsFilePathObject : IJsonModel { - internal InternalMessageContentTextAnnotationsFilePathObject() + internal InternalMessageContentTextAnnotationsFilePathObject() : this(InternalMessageContentTextAnnotationType.FilePath, null, null, null, default, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8J writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageContentTextAnnotationsFilePathObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageContentTextAnnotationsFilePathObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageContentTextObjectAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,7 +75,7 @@ internal static InternalMessageContentTextAnnotationsFilePathObject DeserializeI { return null; } - string @type = "file_path"; + InternalMessageContentTextAnnotationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string text = default; InternalMessageContentTextAnnotationsFilePathObjectFilePath filePath = default; @@ -83,7 +85,7 @@ internal static InternalMessageContentTextAnnotationsFilePathObject DeserializeI { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentTextAnnotationType(prop.Value.GetString()); continue; } if (prop.NameEquals("text"u8)) @@ -106,10 +108,11 @@ internal static InternalMessageContentTextAnnotationsFilePathObject DeserializeI endIndex = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextAnnotationsFilePathObject( - @type, + kind, additionalBinaryDataProperties, text, filePath, @@ -119,13 +122,14 @@ internal static InternalMessageContentTextAnnotationsFilePathObject DeserializeI BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageContentTextAnnotationsFilePathObject)} does not support writing '{options.Format}' format."); } @@ -133,6 +137,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageContentTextAnnotationsFilePathObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageContentTextAnnotationsFilePathObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageContentTextObjectAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,21 +154,5 @@ protected override InternalMessageContentTextObjectAnnotation PersistableModelCr } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageContentTextAnnotationsFilePathObject internalMessageContentTextAnnotationsFilePathObject) - { - if (internalMessageContentTextAnnotationsFilePathObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageContentTextAnnotationsFilePathObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageContentTextAnnotationsFilePathObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageContentTextAnnotationsFilePathObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.cs index c6f617972..0eaf3a560 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObject.cs @@ -10,7 +10,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageContentTextAnnotationsFilePathObject : InternalMessageContentTextObjectAnnotation { - public InternalMessageContentTextAnnotationsFilePathObject(string text, InternalMessageContentTextAnnotationsFilePathObjectFilePath filePath, int startIndex, int endIndex) : base("file_path") + internal InternalMessageContentTextAnnotationsFilePathObject(string text, InternalMessageContentTextAnnotationsFilePathObjectFilePath filePath, int startIndex, int endIndex) : base(InternalMessageContentTextAnnotationType.FilePath) { Argument.AssertNotNull(text, nameof(text)); Argument.AssertNotNull(filePath, nameof(filePath)); @@ -21,7 +21,7 @@ public InternalMessageContentTextAnnotationsFilePathObject(string text, Internal EndIndex = endIndex; } - internal InternalMessageContentTextAnnotationsFilePathObject(string @type, IDictionary additionalBinaryDataProperties, string text, InternalMessageContentTextAnnotationsFilePathObjectFilePath filePath, int startIndex, int endIndex) : base(@type, additionalBinaryDataProperties) + internal InternalMessageContentTextAnnotationsFilePathObject(InternalMessageContentTextAnnotationType kind, IDictionary additionalBinaryDataProperties, string text, InternalMessageContentTextAnnotationsFilePathObjectFilePath filePath, int startIndex, int endIndex) : base(kind, additionalBinaryDataProperties) { Text = text; FilePath = filePath; @@ -31,7 +31,7 @@ internal InternalMessageContentTextAnnotationsFilePathObject(string @type, IDict public string Text { get; set; } - public InternalMessageContentTextAnnotationsFilePathObjectFilePath FilePath { get; set; } + internal InternalMessageContentTextAnnotationsFilePathObjectFilePath FilePath { get; set; } public int StartIndex { get; set; } diff --git a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs index 2305841f1..f41aa909f 100644 --- a/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextAnnotationsFilePathObjectFilePath.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageContentTextAnnotationsFilePathObjectFilePath IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentTextAnnotationsFilePathObjectFilePath JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalMessageContentTextAnnotationsFilePathObjectFilePath Dese fileId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageContentTextAnnotationsFilePathObjectFilePath(fileId, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalMessageContentTextAnnotationsFilePathObjectFilePath Dese BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageContentTextAnnotationsFilePathObjectFilePath)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageContentTextAnnotationsFilePathObjectFilePath IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentTextAnnotationsFilePathObjectFilePath PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalMessageContentTextAnnotationsFilePathObjectFilePath Pe } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageContentTextAnnotationsFilePathObjectFilePath internalMessageContentTextAnnotationsFilePathObjectFilePath) - { - if (internalMessageContentTextAnnotationsFilePathObjectFilePath == null) - { - return null; - } - return BinaryContent.Create(internalMessageContentTextAnnotationsFilePathObjectFilePath, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageContentTextAnnotationsFilePathObjectFilePath(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageContentTextAnnotationsFilePathObjectFilePath(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageContentTextObject.Serialization.cs b/src/Generated/Models/InternalMessageContentTextObject.Serialization.cs new file mode 100644 index 000000000..6a9b54359 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentTextObject.Serialization.cs @@ -0,0 +1,75 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentTextObject : IJsonModel + { + internal InternalMessageContentTextObject() : this(InternalMessageContentType.Text, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + InternalMessageContentTextObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageContentTextObject)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentTextObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMessageContentTextObject(document.RootElement, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMessageContentTextObject)} does not support writing '{options.Format}' format."); + } + } + + InternalMessageContentTextObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageContentTextObject)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMessageContentTextObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMessageContentTextObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMessageContentTextObject.cs b/src/Generated/Models/InternalMessageContentTextObject.cs new file mode 100644 index 000000000..ff0b664a9 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentTextObject.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentTextObject : MessageContent + { + public InternalMessageContentTextObject(BinaryData internalText) : base(InternalMessageContentType.Text) + { + Argument.AssertNotNull(internalText, nameof(internalText)); + + InternalText = internalText; + } + + internal InternalMessageContentTextObject(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties, BinaryData internalText) : base(kind, additionalBinaryDataProperties) + { + InternalText = internalText; + } + } +} diff --git a/src/Generated/Models/InternalMessageContentTextObjectAnnotation.Serialization.cs b/src/Generated/Models/InternalMessageContentTextObjectAnnotation.Serialization.cs index 71807a0a7..32ec8c15c 100644 --- a/src/Generated/Models/InternalMessageContentTextObjectAnnotation.Serialization.cs +++ b/src/Generated/Models/InternalMessageContentTextObjectAnnotation.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageContentTextObjectAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentTextObjectAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -91,13 +94,14 @@ internal static InternalMessageContentTextObjectAnnotation DeserializeInternalMe BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageContentTextObjectAnnotation)} does not support writing '{options.Format}' format."); } @@ -105,6 +109,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageContentTextObjectAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageContentTextObjectAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +126,5 @@ protected virtual InternalMessageContentTextObjectAnnotation PersistableModelCre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageContentTextObjectAnnotation internalMessageContentTextObjectAnnotation) - { - if (internalMessageContentTextObjectAnnotation == null) - { - return null; - } - return BinaryContent.Create(internalMessageContentTextObjectAnnotation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageContentTextObjectAnnotation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageContentTextObjectAnnotation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageContentTextObjectAnnotation.cs b/src/Generated/Models/InternalMessageContentTextObjectAnnotation.cs index 443e712f4..596dcddb4 100644 --- a/src/Generated/Models/InternalMessageContentTextObjectAnnotation.cs +++ b/src/Generated/Models/InternalMessageContentTextObjectAnnotation.cs @@ -11,18 +11,18 @@ internal abstract partial class InternalMessageContentTextObjectAnnotation { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalMessageContentTextObjectAnnotation(string @type) + private protected InternalMessageContentTextObjectAnnotation(InternalMessageContentTextAnnotationType kind) { - Type = @type; + Kind = kind; } - internal InternalMessageContentTextObjectAnnotation(string @type, IDictionary additionalBinaryDataProperties) + internal InternalMessageContentTextObjectAnnotation(InternalMessageContentTextAnnotationType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalMessageContentTextAnnotationType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalMessageContentTextObjectText.Serialization.cs b/src/Generated/Models/InternalMessageContentTextObjectText.Serialization.cs deleted file mode 100644 index cc9dffd49..000000000 --- a/src/Generated/Models/InternalMessageContentTextObjectText.Serialization.cs +++ /dev/null @@ -1,163 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalMessageContentTextObjectText : IJsonModel - { - internal InternalMessageContentTextObjectText() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalMessageContentTextObjectText)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("value") != true) - { - writer.WritePropertyName("value"u8); - writer.WriteStringValue(Value); - } - if (_additionalBinaryDataProperties?.ContainsKey("annotations") != true) - { - writer.WritePropertyName("annotations"u8); - writer.WriteStartArray(); - foreach (InternalMessageContentTextObjectAnnotation item in Annotations) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalMessageContentTextObjectText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalMessageContentTextObjectText JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalMessageContentTextObjectText)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalMessageContentTextObjectText(document.RootElement, options); - } - - internal static InternalMessageContentTextObjectText DeserializeInternalMessageContentTextObjectText(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string value = default; - IList annotations = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("value"u8)) - { - value = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("annotations"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(InternalMessageContentTextObjectAnnotation.DeserializeInternalMessageContentTextObjectAnnotation(item, options)); - } - annotations = array; - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalMessageContentTextObjectText(value, annotations, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalMessageContentTextObjectText)} does not support writing '{options.Format}' format."); - } - } - - InternalMessageContentTextObjectText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalMessageContentTextObjectText PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalMessageContentTextObjectText(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalMessageContentTextObjectText)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageContentTextObjectText internalMessageContentTextObjectText) - { - if (internalMessageContentTextObjectText == null) - { - return null; - } - return BinaryContent.Create(internalMessageContentTextObjectText, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageContentTextObjectText(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageContentTextObjectText(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalMessageContentTextObjectText.cs b/src/Generated/Models/InternalMessageContentTextObjectText.cs deleted file mode 100644 index 61cfcfb00..000000000 --- a/src/Generated/Models/InternalMessageContentTextObjectText.cs +++ /dev/null @@ -1,42 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalMessageContentTextObjectText - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalMessageContentTextObjectText(string value, IEnumerable annotations) - { - Argument.AssertNotNull(value, nameof(value)); - Argument.AssertNotNull(annotations, nameof(annotations)); - - Value = value; - Annotations = annotations.ToList(); - } - - internal InternalMessageContentTextObjectText(string value, IList annotations, IDictionary additionalBinaryDataProperties) - { - Value = value; - Annotations = annotations; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public string Value { get; set; } - - public IList Annotations { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalMessageContentTextObjectText1.Serialization.cs b/src/Generated/Models/InternalMessageContentTextObjectText1.Serialization.cs new file mode 100644 index 000000000..9820dac42 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentTextObjectText1.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentTextObjectText1 : IJsonModel + { + internal InternalMessageContentTextObjectText1() : this(null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentTextObjectText1)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("value") != true) + { + writer.WritePropertyName("value"u8); + writer.WriteStringValue(Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties?.ContainsKey("annotations") != true) + { + writer.WritePropertyName("annotations"u8); + writer.WriteStartArray(); + foreach (InternalMessageContentTextObjectAnnotation item in Annotations) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalMessageContentTextObjectText1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalMessageContentTextObjectText1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMessageContentTextObjectText1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMessageContentTextObjectText1(document.RootElement, options); + } + + internal static InternalMessageContentTextObjectText1 DeserializeInternalMessageContentTextObjectText1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string value = default; + IReadOnlyList annotations = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("value"u8)) + { + value = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("annotations"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalMessageContentTextObjectAnnotation.DeserializeInternalMessageContentTextObjectAnnotation(item, options)); + } + annotations = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMessageContentTextObjectText1(value, annotations, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMessageContentTextObjectText1)} does not support writing '{options.Format}' format."); + } + } + + InternalMessageContentTextObjectText1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalMessageContentTextObjectText1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMessageContentTextObjectText1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMessageContentTextObjectText1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMessageContentTextObjectText1.cs b/src/Generated/Models/InternalMessageContentTextObjectText1.cs new file mode 100644 index 000000000..fac6e75a3 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentTextObjectText1.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalMessageContentTextObjectText1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalMessageContentTextObjectText1(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + Value = value; + Annotations = new ChangeTrackingList(); + } + + internal InternalMessageContentTextObjectText1(string value, IReadOnlyList annotations, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Value = value; + Annotations = annotations ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Value { get; set; } + + internal IReadOnlyList Annotations { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalMessageContentTextObjectType.cs b/src/Generated/Models/InternalMessageContentTextObjectType.cs deleted file mode 100644 index 965bf25b9..000000000 --- a/src/Generated/Models/InternalMessageContentTextObjectType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalMessageContentTextObjectType : IEquatable - { - private readonly string _value; - private const string TextValue = "text"; - - public InternalMessageContentTextObjectType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalMessageContentTextObjectType Text { get; } = new InternalMessageContentTextObjectType(TextValue); - - public static bool operator ==(InternalMessageContentTextObjectType left, InternalMessageContentTextObjectType right) => left.Equals(right); - - public static bool operator !=(InternalMessageContentTextObjectType left, InternalMessageContentTextObjectType right) => !left.Equals(right); - - public static implicit operator InternalMessageContentTextObjectType(string value) => new InternalMessageContentTextObjectType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalMessageContentTextObjectType other && Equals(other); - - public bool Equals(InternalMessageContentTextObjectType 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/InternalMessageContentType.cs b/src/Generated/Models/InternalMessageContentType.cs new file mode 100644 index 000000000..32bfdc487 --- /dev/null +++ b/src/Generated/Models/InternalMessageContentType.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal readonly partial struct InternalMessageContentType : IEquatable + { + private readonly string _value; + private const string TextValue = "text"; + private const string ImageFileValue = "image_file"; + private const string ImageUrlValue = "image_url"; + private const string RefusalValue = "refusal"; + + public InternalMessageContentType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalMessageContentType Text { get; } = new InternalMessageContentType(TextValue); + + internal static InternalMessageContentType ImageFile { get; } = new InternalMessageContentType(ImageFileValue); + + internal static InternalMessageContentType ImageUrl { get; } = new InternalMessageContentType(ImageUrlValue); + + internal static InternalMessageContentType Refusal { get; } = new InternalMessageContentType(RefusalValue); + + public static bool operator ==(InternalMessageContentType left, InternalMessageContentType right) => left.Equals(right); + + public static bool operator !=(InternalMessageContentType left, InternalMessageContentType right) => !left.Equals(right); + + public static implicit operator InternalMessageContentType(string value) => new InternalMessageContentType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalMessageContentType other && Equals(other); + + public bool Equals(InternalMessageContentType 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/InternalMessageDeltaContent.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContent.Serialization.cs index fe6c65b1e..5b6c3da1b 100644 --- a/src/Generated/Models/InternalMessageDeltaContent.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContent.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -95,13 +98,14 @@ internal static InternalMessageDeltaContent DeserializeInternalMessageDeltaConte BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContent)} does not support writing '{options.Format}' format."); } @@ -109,6 +113,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -125,21 +130,5 @@ protected virtual InternalMessageDeltaContent PersistableModelCreateCore(BinaryD } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContent internalMessageDeltaContent) - { - if (internalMessageDeltaContent == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContent.cs b/src/Generated/Models/InternalMessageDeltaContent.cs index 007a832fe..14e8f46b3 100644 --- a/src/Generated/Models/InternalMessageDeltaContent.cs +++ b/src/Generated/Models/InternalMessageDeltaContent.cs @@ -11,18 +11,18 @@ internal abstract partial class InternalMessageDeltaContent { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalMessageDeltaContent(string @type) + private protected InternalMessageDeltaContent(InternalMessageContentType kind) { - Type = @type; + Kind = kind; } - internal InternalMessageDeltaContent(string @type, IDictionary additionalBinaryDataProperties) + internal InternalMessageDeltaContent(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalMessageContentType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalMessageDeltaContentImageFileObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentImageFileObject.Serialization.cs index 241807261..9c27ad235 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageFileObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageFileObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentImageFileObject : IJsonModel { - internal InternalMessageDeltaContentImageFileObject() + internal InternalMessageDeltaContentImageFileObject() : this(InternalMessageContentType.ImageFile, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageDeltaContentImageFileObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageDeltaContentImageFileObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,7 +65,7 @@ internal static InternalMessageDeltaContentImageFileObject DeserializeInternalMe { return null; } - string @type = "image_file"; + InternalMessageContentType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; InternalMessageDeltaContentImageFileObjectImageFile imageFile = default; @@ -71,7 +73,7 @@ internal static InternalMessageDeltaContentImageFileObject DeserializeInternalMe { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentType(prop.Value.GetString()); continue; } if (prop.NameEquals("index"u8)) @@ -88,20 +90,22 @@ internal static InternalMessageDeltaContentImageFileObject DeserializeInternalMe imageFile = InternalMessageDeltaContentImageFileObjectImageFile.DeserializeInternalMessageDeltaContentImageFileObjectImageFile(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalMessageDeltaContentImageFileObject(@type, additionalBinaryDataProperties, index, imageFile); + return new InternalMessageDeltaContentImageFileObject(kind, additionalBinaryDataProperties, index, imageFile); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentImageFileObject)} does not support writing '{options.Format}' format."); } @@ -109,6 +113,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentImageFileObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageDeltaContentImageFileObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -125,21 +130,5 @@ protected override InternalMessageDeltaContent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentImageFileObject internalMessageDeltaContentImageFileObject) - { - if (internalMessageDeltaContentImageFileObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentImageFileObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentImageFileObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentImageFileObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentImageFileObject.cs b/src/Generated/Models/InternalMessageDeltaContentImageFileObject.cs index 8573af8ac..534ce181a 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageFileObject.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageFileObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentImageFileObject : InternalMessageDeltaContent { - internal InternalMessageDeltaContentImageFileObject(int index) : base("image_file") + internal InternalMessageDeltaContentImageFileObject(int index) : base(InternalMessageContentType.ImageFile) { Index = index; } - internal InternalMessageDeltaContentImageFileObject(string @type, IDictionary additionalBinaryDataProperties, int index, InternalMessageDeltaContentImageFileObjectImageFile imageFile) : base(@type, additionalBinaryDataProperties) + internal InternalMessageDeltaContentImageFileObject(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties, int index, InternalMessageDeltaContentImageFileObjectImageFile imageFile) : base(kind, additionalBinaryDataProperties) { Index = index; ImageFile = imageFile; @@ -22,6 +22,6 @@ internal InternalMessageDeltaContentImageFileObject(string @type, IDictionary.Write(Utf8J writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaContentImageFileObjectImageFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentImageFileObjectImageFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,6 +95,7 @@ internal static InternalMessageDeltaContentImageFileObjectImageFile DeserializeI detail = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentImageFileObjectImageFile(fileId, detail, additionalBinaryDataProperties); @@ -99,13 +103,14 @@ internal static InternalMessageDeltaContentImageFileObjectImageFile DeserializeI BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentImageFileObjectImageFile)} does not support writing '{options.Format}' format."); } @@ -113,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentImageFileObjectImageFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentImageFileObjectImageFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,21 +135,5 @@ protected virtual InternalMessageDeltaContentImageFileObjectImageFile Persistabl } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentImageFileObjectImageFile internalMessageDeltaContentImageFileObjectImageFile) - { - if (internalMessageDeltaContentImageFileObjectImageFile == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentImageFileObjectImageFile, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentImageFileObjectImageFile(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentImageFileObjectImageFile(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentImageFileObjectImageFileDetail.cs b/src/Generated/Models/InternalMessageDeltaContentImageFileObjectImageFileDetail.cs index 08f9beab9..50e7509f1 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageFileObjectImageFileDetail.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageFileObjectImageFileDetail.cs @@ -22,11 +22,11 @@ public InternalMessageDeltaContentImageFileObjectImageFileDetail(string value) _value = value; } - public static InternalMessageDeltaContentImageFileObjectImageFileDetail Auto { get; } = new InternalMessageDeltaContentImageFileObjectImageFileDetail(AutoValue); + internal static InternalMessageDeltaContentImageFileObjectImageFileDetail Auto { get; } = new InternalMessageDeltaContentImageFileObjectImageFileDetail(AutoValue); - public static InternalMessageDeltaContentImageFileObjectImageFileDetail Low { get; } = new InternalMessageDeltaContentImageFileObjectImageFileDetail(LowValue); + internal static InternalMessageDeltaContentImageFileObjectImageFileDetail Low { get; } = new InternalMessageDeltaContentImageFileObjectImageFileDetail(LowValue); - public static InternalMessageDeltaContentImageFileObjectImageFileDetail High { get; } = new InternalMessageDeltaContentImageFileObjectImageFileDetail(HighValue); + internal static InternalMessageDeltaContentImageFileObjectImageFileDetail High { get; } = new InternalMessageDeltaContentImageFileObjectImageFileDetail(HighValue); public static bool operator ==(InternalMessageDeltaContentImageFileObjectImageFileDetail left, InternalMessageDeltaContentImageFileObjectImageFileDetail right) => left.Equals(right); diff --git a/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.Serialization.cs index c372be61f..fd31f686f 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentImageUrlObject : IJsonModel { - internal InternalMessageDeltaContentImageUrlObject() + internal InternalMessageDeltaContentImageUrlObject() : this(InternalMessageContentType.ImageUrl, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageDeltaContentImageUrlObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageDeltaContentImageUrlObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,7 +65,7 @@ internal static InternalMessageDeltaContentImageUrlObject DeserializeInternalMes { return null; } - string @type = "image_url"; + InternalMessageContentType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; InternalMessageDeltaContentImageUrlObjectImageUrl imageUrl = default; @@ -71,7 +73,7 @@ internal static InternalMessageDeltaContentImageUrlObject DeserializeInternalMes { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentType(prop.Value.GetString()); continue; } if (prop.NameEquals("index"u8)) @@ -88,20 +90,22 @@ internal static InternalMessageDeltaContentImageUrlObject DeserializeInternalMes imageUrl = InternalMessageDeltaContentImageUrlObjectImageUrl.DeserializeInternalMessageDeltaContentImageUrlObjectImageUrl(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalMessageDeltaContentImageUrlObject(@type, additionalBinaryDataProperties, index, imageUrl); + return new InternalMessageDeltaContentImageUrlObject(kind, additionalBinaryDataProperties, index, imageUrl); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentImageUrlObject)} does not support writing '{options.Format}' format."); } @@ -109,6 +113,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentImageUrlObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageDeltaContentImageUrlObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -125,21 +130,5 @@ protected override InternalMessageDeltaContent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentImageUrlObject internalMessageDeltaContentImageUrlObject) - { - if (internalMessageDeltaContentImageUrlObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentImageUrlObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentImageUrlObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentImageUrlObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.cs b/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.cs index 8ea63feef..39a40f12e 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageUrlObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentImageUrlObject : InternalMessageDeltaContent { - internal InternalMessageDeltaContentImageUrlObject(int index) : base("image_url") + internal InternalMessageDeltaContentImageUrlObject(int index) : base(InternalMessageContentType.ImageUrl) { Index = index; } - internal InternalMessageDeltaContentImageUrlObject(string @type, IDictionary additionalBinaryDataProperties, int index, InternalMessageDeltaContentImageUrlObjectImageUrl imageUrl) : base(@type, additionalBinaryDataProperties) + internal InternalMessageDeltaContentImageUrlObject(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties, int index, InternalMessageDeltaContentImageUrlObjectImageUrl imageUrl) : base(kind, additionalBinaryDataProperties) { Index = index; ImageUrl = imageUrl; @@ -22,6 +22,6 @@ internal InternalMessageDeltaContentImageUrlObject(string @type, IDictionary.Write(Utf8Jso writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("detail"u8); writer.WriteStringValue(Detail); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaContentImageUrlObjectImageUrl IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentImageUrlObjectImageUrl JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static InternalMessageDeltaContentImageUrlObjectImageUrl DeserializeInt detail = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentImageUrlObjectImageUrl(url, detail, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static InternalMessageDeltaContentImageUrlObjectImageUrl DeserializeInt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentImageUrlObjectImageUrl)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentImageUrlObjectImageUrl IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentImageUrlObjectImageUrl PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalMessageDeltaContentImageUrlObjectImageUrl PersistableM } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentImageUrlObjectImageUrl internalMessageDeltaContentImageUrlObjectImageUrl) - { - if (internalMessageDeltaContentImageUrlObjectImageUrl == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentImageUrlObjectImageUrl, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentImageUrlObjectImageUrl(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentImageUrlObjectImageUrl(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentImageUrlObjectImageUrlDetail.cs b/src/Generated/Models/InternalMessageDeltaContentImageUrlObjectImageUrlDetail.cs index c206463fe..8e2561eec 100644 --- a/src/Generated/Models/InternalMessageDeltaContentImageUrlObjectImageUrlDetail.cs +++ b/src/Generated/Models/InternalMessageDeltaContentImageUrlObjectImageUrlDetail.cs @@ -22,11 +22,11 @@ public InternalMessageDeltaContentImageUrlObjectImageUrlDetail(string value) _value = value; } - public static InternalMessageDeltaContentImageUrlObjectImageUrlDetail Auto { get; } = new InternalMessageDeltaContentImageUrlObjectImageUrlDetail(AutoValue); + internal static InternalMessageDeltaContentImageUrlObjectImageUrlDetail Auto { get; } = new InternalMessageDeltaContentImageUrlObjectImageUrlDetail(AutoValue); - public static InternalMessageDeltaContentImageUrlObjectImageUrlDetail Low { get; } = new InternalMessageDeltaContentImageUrlObjectImageUrlDetail(LowValue); + internal static InternalMessageDeltaContentImageUrlObjectImageUrlDetail Low { get; } = new InternalMessageDeltaContentImageUrlObjectImageUrlDetail(LowValue); - public static InternalMessageDeltaContentImageUrlObjectImageUrlDetail High { get; } = new InternalMessageDeltaContentImageUrlObjectImageUrlDetail(HighValue); + internal static InternalMessageDeltaContentImageUrlObjectImageUrlDetail High { get; } = new InternalMessageDeltaContentImageUrlObjectImageUrlDetail(HighValue); public static bool operator ==(InternalMessageDeltaContentImageUrlObjectImageUrlDetail left, InternalMessageDeltaContentImageUrlObjectImageUrlDetail right) => left.Equals(right); diff --git a/src/Generated/Models/InternalMessageDeltaContentRefusalObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentRefusalObject.Serialization.cs index 275eabf9c..11252d588 100644 --- a/src/Generated/Models/InternalMessageDeltaContentRefusalObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentRefusalObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentRefusalObject : IJsonModel { - internal InternalMessageDeltaContentRefusalObject() + internal InternalMessageDeltaContentRefusalObject() : this(InternalMessageContentType.Refusal, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageDeltaContentRefusalObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageDeltaContentRefusalObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,7 +65,7 @@ internal static InternalMessageDeltaContentRefusalObject DeserializeInternalMess { return null; } - string @type = "refusal"; + InternalMessageContentType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; string refusal = default; @@ -71,7 +73,7 @@ internal static InternalMessageDeltaContentRefusalObject DeserializeInternalMess { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentType(prop.Value.GetString()); continue; } if (prop.NameEquals("index"u8)) @@ -84,20 +86,22 @@ internal static InternalMessageDeltaContentRefusalObject DeserializeInternalMess refusal = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalMessageDeltaContentRefusalObject(@type, additionalBinaryDataProperties, index, refusal); + return new InternalMessageDeltaContentRefusalObject(kind, additionalBinaryDataProperties, index, refusal); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentRefusalObject)} does not support writing '{options.Format}' format."); } @@ -105,6 +109,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentRefusalObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageDeltaContentRefusalObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +126,5 @@ protected override InternalMessageDeltaContent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentRefusalObject internalMessageDeltaContentRefusalObject) - { - if (internalMessageDeltaContentRefusalObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentRefusalObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentRefusalObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentRefusalObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentRefusalObject.cs b/src/Generated/Models/InternalMessageDeltaContentRefusalObject.cs index 5c7fce448..d031bd753 100644 --- a/src/Generated/Models/InternalMessageDeltaContentRefusalObject.cs +++ b/src/Generated/Models/InternalMessageDeltaContentRefusalObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentRefusalObject : InternalMessageDeltaContent { - internal InternalMessageDeltaContentRefusalObject(int index) : base("refusal") + internal InternalMessageDeltaContentRefusalObject(int index) : base(InternalMessageContentType.Refusal) { Index = index; } - internal InternalMessageDeltaContentRefusalObject(string @type, IDictionary additionalBinaryDataProperties, int index, string refusal) : base(@type, additionalBinaryDataProperties) + internal InternalMessageDeltaContentRefusalObject(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties, int index, string refusal) : base(kind, additionalBinaryDataProperties) { Index = index; Refusal = refusal; diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs index 61e605d5b..8def8fd3a 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentTextAnnotationsFileCitationObject : IJsonModel { - internal InternalMessageDeltaContentTextAnnotationsFileCitationObject() + internal InternalMessageDeltaContentTextAnnotationsFileCitationObject() : this(InternalMessageContentTextAnnotationType.FileCitation, null, default, null, null, default, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,6 +62,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageDeltaContentTextAnnotationsFileCitationObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageDeltaContentTextAnnotationsFileCitationObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaTextContentAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -78,7 +80,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFileCitationObject Des { return null; } - string @type = "file_citation"; + InternalMessageContentTextAnnotationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; string text = default; @@ -89,7 +91,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFileCitationObject Des { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentTextAnnotationType(prop.Value.GetString()); continue; } if (prop.NameEquals("index"u8)) @@ -129,10 +131,11 @@ internal static InternalMessageDeltaContentTextAnnotationsFileCitationObject Des endIndex = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextAnnotationsFileCitationObject( - @type, + kind, additionalBinaryDataProperties, index, text, @@ -143,13 +146,14 @@ internal static InternalMessageDeltaContentTextAnnotationsFileCitationObject Des BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentTextAnnotationsFileCitationObject)} does not support writing '{options.Format}' format."); } @@ -157,6 +161,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentTextAnnotationsFileCitationObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageDeltaContentTextAnnotationsFileCitationObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaTextContentAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -173,21 +178,5 @@ protected override InternalMessageDeltaTextContentAnnotation PersistableModelCre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentTextAnnotationsFileCitationObject internalMessageDeltaContentTextAnnotationsFileCitationObject) - { - if (internalMessageDeltaContentTextAnnotationsFileCitationObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentTextAnnotationsFileCitationObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentTextAnnotationsFileCitationObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentTextAnnotationsFileCitationObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.cs index 1db97ff06..761fadb4c 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentTextAnnotationsFileCitationObject : InternalMessageDeltaTextContentAnnotation { - internal InternalMessageDeltaContentTextAnnotationsFileCitationObject(int index) : base("file_citation") + internal InternalMessageDeltaContentTextAnnotationsFileCitationObject(int index) : base(InternalMessageContentTextAnnotationType.FileCitation) { Index = index; } - internal InternalMessageDeltaContentTextAnnotationsFileCitationObject(string @type, IDictionary additionalBinaryDataProperties, int index, string text, InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation fileCitation, int? startIndex, int? endIndex) : base(@type, additionalBinaryDataProperties) + internal InternalMessageDeltaContentTextAnnotationsFileCitationObject(InternalMessageContentTextAnnotationType kind, IDictionary additionalBinaryDataProperties, int index, string text, InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation fileCitation, int? startIndex, int? endIndex) : base(kind, additionalBinaryDataProperties) { Index = index; Text = text; @@ -27,7 +27,7 @@ internal InternalMessageDeltaContentTextAnnotationsFileCitationObject(string @ty public string Text { get; } - public InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation FileCitation { get; } + internal InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation FileCitation { get; } public int? StartIndex { get; } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs index 05cd0e9e6..bf5459b03 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("quote"u8); writer.WriteStringValue(Quote); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,6 +95,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFileCitationObjectFile quote = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation(fileId, quote, additionalBinaryDataProperties); @@ -99,13 +103,14 @@ internal static InternalMessageDeltaContentTextAnnotationsFileCitationObjectFile BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation)} does not support writing '{options.Format}' format."); } @@ -113,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,21 +135,5 @@ protected virtual InternalMessageDeltaContentTextAnnotationsFileCitationObjectFi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation internalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation) - { - if (internalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentTextAnnotationsFileCitationObjectFileCitation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs index a344ee663..1c2aad81c 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentTextAnnotationsFilePathObject : IJsonModel { - internal InternalMessageDeltaContentTextAnnotationsFilePathObject() + internal InternalMessageDeltaContentTextAnnotationsFilePathObject() : this(InternalMessageContentTextAnnotationType.FilePath, null, default, null, null, default, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write( writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,6 +62,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageDeltaContentTextAnnotationsFilePathObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageDeltaContentTextAnnotationsFilePathObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaTextContentAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -78,7 +80,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFilePathObject Deseria { return null; } - string @type = "file_path"; + InternalMessageContentTextAnnotationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; string text = default; @@ -89,7 +91,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFilePathObject Deseria { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentTextAnnotationType(prop.Value.GetString()); continue; } if (prop.NameEquals("index"u8)) @@ -129,10 +131,11 @@ internal static InternalMessageDeltaContentTextAnnotationsFilePathObject Deseria endIndex = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextAnnotationsFilePathObject( - @type, + kind, additionalBinaryDataProperties, index, text, @@ -143,13 +146,14 @@ internal static InternalMessageDeltaContentTextAnnotationsFilePathObject Deseria BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentTextAnnotationsFilePathObject)} does not support writing '{options.Format}' format."); } @@ -157,6 +161,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentTextAnnotationsFilePathObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageDeltaContentTextAnnotationsFilePathObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaTextContentAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -173,21 +178,5 @@ protected override InternalMessageDeltaTextContentAnnotation PersistableModelCre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentTextAnnotationsFilePathObject internalMessageDeltaContentTextAnnotationsFilePathObject) - { - if (internalMessageDeltaContentTextAnnotationsFilePathObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentTextAnnotationsFilePathObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentTextAnnotationsFilePathObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentTextAnnotationsFilePathObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.cs index c729725fc..9ec69fef8 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentTextAnnotationsFilePathObject : InternalMessageDeltaTextContentAnnotation { - internal InternalMessageDeltaContentTextAnnotationsFilePathObject(int index) : base("file_path") + internal InternalMessageDeltaContentTextAnnotationsFilePathObject(int index) : base(InternalMessageContentTextAnnotationType.FilePath) { Index = index; } - internal InternalMessageDeltaContentTextAnnotationsFilePathObject(string @type, IDictionary additionalBinaryDataProperties, int index, string text, InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath filePath, int? startIndex, int? endIndex) : base(@type, additionalBinaryDataProperties) + internal InternalMessageDeltaContentTextAnnotationsFilePathObject(InternalMessageContentTextAnnotationType kind, IDictionary additionalBinaryDataProperties, int index, string text, InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath filePath, int? startIndex, int? endIndex) : base(kind, additionalBinaryDataProperties) { Index = index; Text = text; @@ -27,7 +27,7 @@ internal InternalMessageDeltaContentTextAnnotationsFilePathObject(string @type, public string Text { get; } - public InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath FilePath { get; } + internal InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath FilePath { get; } public int? StartIndex { get; } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs index 603b77118..2afe03e43 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,6 +84,7 @@ internal static InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath fileId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath(fileId, additionalBinaryDataProperties); @@ -88,13 +92,14 @@ internal static InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath)} does not support writing '{options.Format}' format."); } @@ -102,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,21 +124,5 @@ protected virtual InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath internalMessageDeltaContentTextAnnotationsFilePathObjectFilePath) - { - if (internalMessageDeltaContentTextAnnotationsFilePathObjectFilePath == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentTextAnnotationsFilePathObjectFilePath, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentTextAnnotationsFilePathObjectFilePath(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaContentTextObject.Serialization.cs index 176a61460..57b7527e8 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentTextObject : IJsonModel { - internal InternalMessageDeltaContentTextObject() + internal InternalMessageDeltaContentTextObject() : this(InternalMessageContentType.Text, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageDeltaContentTextObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageDeltaContentTextObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,7 +65,7 @@ internal static InternalMessageDeltaContentTextObject DeserializeInternalMessage { return null; } - string @type = "text"; + InternalMessageContentType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; InternalMessageDeltaContentTextObjectText text = default; @@ -71,7 +73,7 @@ internal static InternalMessageDeltaContentTextObject DeserializeInternalMessage { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentType(prop.Value.GetString()); continue; } if (prop.NameEquals("index"u8)) @@ -88,20 +90,22 @@ internal static InternalMessageDeltaContentTextObject DeserializeInternalMessage text = InternalMessageDeltaContentTextObjectText.DeserializeInternalMessageDeltaContentTextObjectText(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalMessageDeltaContentTextObject(@type, additionalBinaryDataProperties, index, text); + return new InternalMessageDeltaContentTextObject(kind, additionalBinaryDataProperties, index, text); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentTextObject)} does not support writing '{options.Format}' format."); } @@ -109,6 +113,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentTextObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageDeltaContentTextObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -125,21 +130,5 @@ protected override InternalMessageDeltaContent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentTextObject internalMessageDeltaContentTextObject) - { - if (internalMessageDeltaContentTextObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentTextObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentTextObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentTextObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextObject.cs b/src/Generated/Models/InternalMessageDeltaContentTextObject.cs index f8546832f..6f2c76cf8 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextObject.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalMessageDeltaContentTextObject : InternalMessageDeltaContent { - internal InternalMessageDeltaContentTextObject(int index) : base("text") + internal InternalMessageDeltaContentTextObject(int index) : base(InternalMessageContentType.Text) { Index = index; } - internal InternalMessageDeltaContentTextObject(string @type, IDictionary additionalBinaryDataProperties, int index, InternalMessageDeltaContentTextObjectText text) : base(@type, additionalBinaryDataProperties) + internal InternalMessageDeltaContentTextObject(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties, int index, InternalMessageDeltaContentTextObjectText text) : base(kind, additionalBinaryDataProperties) { Index = index; Text = text; @@ -22,6 +22,6 @@ internal InternalMessageDeltaContentTextObject(string @type, IDictionary.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaContentTextObjectText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentTextObjectText JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -106,6 +109,7 @@ internal static InternalMessageDeltaContentTextObjectText DeserializeInternalMes annotations = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaContentTextObjectText(value, annotations ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -113,13 +117,14 @@ internal static InternalMessageDeltaContentTextObjectText DeserializeInternalMes BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContentTextObjectText)} does not support writing '{options.Format}' format."); } @@ -127,6 +132,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContentTextObjectText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaContentTextObjectText PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -143,21 +149,5 @@ protected virtual InternalMessageDeltaContentTextObjectText PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaContentTextObjectText internalMessageDeltaContentTextObjectText) - { - if (internalMessageDeltaContentTextObjectText == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaContentTextObjectText, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaContentTextObjectText(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaContentTextObjectText(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaContentTextObjectText.cs b/src/Generated/Models/InternalMessageDeltaContentTextObjectText.cs index 80c395a14..aeae6cdad 100644 --- a/src/Generated/Models/InternalMessageDeltaContentTextObjectText.cs +++ b/src/Generated/Models/InternalMessageDeltaContentTextObjectText.cs @@ -12,21 +12,21 @@ internal partial class InternalMessageDeltaContentTextObjectText { private protected IDictionary _additionalBinaryDataProperties; - internal InternalMessageDeltaContentTextObjectText() + internal InternalMessageDeltaContentTextObjectText() : this(null, null, null) { - Annotations = new ChangeTrackingList(); } internal InternalMessageDeltaContentTextObjectText(string value, IList annotations, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Value = value; - Annotations = annotations; + Annotations = annotations ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } public string Value { get; } - public IList Annotations { get; } + internal IList Annotations { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs b/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs index d7ffe9ceb..cc186b48b 100644 --- a/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -39,13 +40,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("delta") != true) { writer.WritePropertyName("delta"u8); writer.WriteObjectValue(Delta, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -87,7 +90,7 @@ internal static InternalMessageDeltaObject DeserializeInternalMessageDeltaObject return null; } string id = default; - InternalMessageDeltaObjectObject @object = default; + string @object = default; InternalMessageDeltaObjectDelta delta = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -99,7 +102,7 @@ internal static InternalMessageDeltaObject DeserializeInternalMessageDeltaObject } if (prop.NameEquals("object"u8)) { - @object = new InternalMessageDeltaObjectObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("delta"u8)) @@ -107,6 +110,7 @@ internal static InternalMessageDeltaObject DeserializeInternalMessageDeltaObject delta = InternalMessageDeltaObjectDelta.DeserializeInternalMessageDeltaObjectDelta(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaObject(id, @object, delta, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalMessageDeltaObject DeserializeInternalMessageDeltaObject BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaObject)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalMessageDeltaObject PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaObject internalMessageDeltaObject) - { - if (internalMessageDeltaObject == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaObject.cs b/src/Generated/Models/InternalMessageDeltaObject.cs index a9e15adda..2886d83ae 100644 --- a/src/Generated/Models/InternalMessageDeltaObject.cs +++ b/src/Generated/Models/InternalMessageDeltaObject.cs @@ -17,7 +17,7 @@ internal InternalMessageDeltaObject(string id, InternalMessageDeltaObjectDelta d Delta = delta; } - internal InternalMessageDeltaObject(string id, InternalMessageDeltaObjectObject @object, InternalMessageDeltaObjectDelta delta, IDictionary additionalBinaryDataProperties) + internal InternalMessageDeltaObject(string id, string @object, InternalMessageDeltaObjectDelta delta, IDictionary additionalBinaryDataProperties) { Id = id; Object = @object; @@ -27,9 +27,9 @@ internal InternalMessageDeltaObject(string id, InternalMessageDeltaObjectObject public string Id { get; } - public InternalMessageDeltaObjectObject Object { get; } = "thread.message.delta"; + public string Object { get; } = "thread.message.delta"; - public InternalMessageDeltaObjectDelta Delta { get; } + internal InternalMessageDeltaObjectDelta Delta { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalMessageDeltaObjectDelta.Serialization.cs b/src/Generated/Models/InternalMessageDeltaObjectDelta.Serialization.cs index d2d782295..6f37ab8f8 100644 --- a/src/Generated/Models/InternalMessageDeltaObjectDelta.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaObjectDelta.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("role"u8); writer.WriteStringValue(Role.Value.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaObjectDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaObjectDelta JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,6 +113,7 @@ internal static InternalMessageDeltaObjectDelta DeserializeInternalMessageDeltaO role = prop.Value.GetString().ToMessageRole(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageDeltaObjectDelta(content ?? new ChangeTrackingList(), role, additionalBinaryDataProperties); @@ -117,13 +121,14 @@ internal static InternalMessageDeltaObjectDelta DeserializeInternalMessageDeltaO BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaObjectDelta)} does not support writing '{options.Format}' format."); } @@ -131,6 +136,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaObjectDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaObjectDelta PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -147,21 +153,5 @@ protected virtual InternalMessageDeltaObjectDelta PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaObjectDelta internalMessageDeltaObjectDelta) - { - if (internalMessageDeltaObjectDelta == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaObjectDelta, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaObjectDelta(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaObjectDelta(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaObjectDelta.cs b/src/Generated/Models/InternalMessageDeltaObjectDelta.cs index 8480f6468..73ecda349 100644 --- a/src/Generated/Models/InternalMessageDeltaObjectDelta.cs +++ b/src/Generated/Models/InternalMessageDeltaObjectDelta.cs @@ -12,19 +12,19 @@ internal partial class InternalMessageDeltaObjectDelta { private protected IDictionary _additionalBinaryDataProperties; - internal InternalMessageDeltaObjectDelta() + internal InternalMessageDeltaObjectDelta() : this(null, default, null) { - Content = new ChangeTrackingList(); } internal InternalMessageDeltaObjectDelta(IList content, MessageRole? role, IDictionary additionalBinaryDataProperties) { - Content = content; + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); Role = role; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public IList Content { get; } + internal IList Content { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalMessageDeltaObjectDeltaRole.cs b/src/Generated/Models/InternalMessageDeltaObjectDeltaRole.cs index d71bd5357..6fdc364ba 100644 --- a/src/Generated/Models/InternalMessageDeltaObjectDeltaRole.cs +++ b/src/Generated/Models/InternalMessageDeltaObjectDeltaRole.cs @@ -21,9 +21,9 @@ public InternalMessageDeltaObjectDeltaRole(string value) _value = value; } - public static InternalMessageDeltaObjectDeltaRole User { get; } = new InternalMessageDeltaObjectDeltaRole(UserValue); + internal static InternalMessageDeltaObjectDeltaRole User { get; } = new InternalMessageDeltaObjectDeltaRole(UserValue); - public static InternalMessageDeltaObjectDeltaRole Assistant { get; } = new InternalMessageDeltaObjectDeltaRole(AssistantValue); + internal static InternalMessageDeltaObjectDeltaRole Assistant { get; } = new InternalMessageDeltaObjectDeltaRole(AssistantValue); public static bool operator ==(InternalMessageDeltaObjectDeltaRole left, InternalMessageDeltaObjectDeltaRole right) => left.Equals(right); diff --git a/src/Generated/Models/InternalMessageDeltaObjectObject.cs b/src/Generated/Models/InternalMessageDeltaObjectObject.cs deleted file mode 100644 index 2efee4df9..000000000 --- a/src/Generated/Models/InternalMessageDeltaObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalMessageDeltaObjectObject : IEquatable - { - private readonly string _value; - private const string ThreadMessageDeltaValue = "thread.message.delta"; - - public InternalMessageDeltaObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalMessageDeltaObjectObject ThreadMessageDelta { get; } = new InternalMessageDeltaObjectObject(ThreadMessageDeltaValue); - - public static bool operator ==(InternalMessageDeltaObjectObject left, InternalMessageDeltaObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalMessageDeltaObjectObject left, InternalMessageDeltaObjectObject right) => !left.Equals(right); - - public static implicit operator InternalMessageDeltaObjectObject(string value) => new InternalMessageDeltaObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalMessageDeltaObjectObject other && Equals(other); - - public bool Equals(InternalMessageDeltaObjectObject 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/InternalMessageDeltaTextContentAnnotation.Serialization.cs b/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.Serialization.cs index 4f027758e..831c4dee4 100644 --- a/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.Serialization.cs +++ b/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageDeltaTextContentAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaTextContentAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -91,13 +94,14 @@ internal static InternalMessageDeltaTextContentAnnotation DeserializeInternalMes BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaTextContentAnnotation)} does not support writing '{options.Format}' format."); } @@ -105,6 +109,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaTextContentAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageDeltaTextContentAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +126,5 @@ protected virtual InternalMessageDeltaTextContentAnnotation PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageDeltaTextContentAnnotation internalMessageDeltaTextContentAnnotation) - { - if (internalMessageDeltaTextContentAnnotation == null) - { - return null; - } - return BinaryContent.Create(internalMessageDeltaTextContentAnnotation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageDeltaTextContentAnnotation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageDeltaTextContentAnnotation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.cs b/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.cs index d34f19001..979f8740d 100644 --- a/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.cs +++ b/src/Generated/Models/InternalMessageDeltaTextContentAnnotation.cs @@ -11,18 +11,18 @@ internal abstract partial class InternalMessageDeltaTextContentAnnotation { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalMessageDeltaTextContentAnnotation(string @type) + private protected InternalMessageDeltaTextContentAnnotation(InternalMessageContentTextAnnotationType kind) { - Type = @type; + Kind = kind; } - internal InternalMessageDeltaTextContentAnnotation(string @type, IDictionary additionalBinaryDataProperties) + internal InternalMessageDeltaTextContentAnnotation(InternalMessageContentTextAnnotationType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalMessageContentTextAnnotationType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs b/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs deleted file mode 100644 index c193cf8dd..000000000 --- a/src/Generated/Models/InternalMessageImageFileContent.Serialization.cs +++ /dev/null @@ -1,128 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalMessageImageFileContent : IJsonModel - { - internal InternalMessageImageFileContent() - { - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalMessageImageFileContent)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type); - } - if (_additionalBinaryDataProperties?.ContainsKey("image_file") != true) - { - writer.WritePropertyName("image_file"u8); - writer.WriteObjectValue(_imageFile, options); - } - } - - InternalMessageImageFileContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageImageFileContent)JsonModelCreateCore(ref reader, options); - - protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalMessageImageFileContent)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalMessageImageFileContent(document.RootElement, options); - } - - internal static InternalMessageImageFileContent DeserializeInternalMessageImageFileContent(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string @type = default; - InternalMessageContentItemFileObjectImageFile imageFile = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("image_file"u8)) - { - imageFile = InternalMessageContentItemFileObjectImageFile.DeserializeInternalMessageContentItemFileObjectImageFile(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalMessageImageFileContent(additionalBinaryDataProperties, @type, imageFile); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalMessageImageFileContent)} does not support writing '{options.Format}' format."); - } - } - - InternalMessageImageFileContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageImageFileContent)PersistableModelCreateCore(data, options); - - protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalMessageImageFileContent(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalMessageImageFileContent)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageImageFileContent internalMessageImageFileContent) - { - if (internalMessageImageFileContent == null) - { - return null; - } - return BinaryContent.Create(internalMessageImageFileContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageImageFileContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageImageFileContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalMessageImageFileContent.cs b/src/Generated/Models/InternalMessageImageFileContent.cs deleted file mode 100644 index 41ae17f04..000000000 --- a/src/Generated/Models/InternalMessageImageFileContent.cs +++ /dev/null @@ -1,18 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Assistants -{ - internal partial class InternalMessageImageFileContent : MessageContent - { - internal InternalMessageImageFileContent(IDictionary additionalBinaryDataProperties, string @type, InternalMessageContentItemFileObjectImageFile imageFile) : base(additionalBinaryDataProperties) - { - _type = @type; - _imageFile = imageFile; - } - } -} diff --git a/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs b/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs deleted file mode 100644 index 83b9c4856..000000000 --- a/src/Generated/Models/InternalMessageImageUrlContent.Serialization.cs +++ /dev/null @@ -1,128 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalMessageImageUrlContent : IJsonModel - { - internal InternalMessageImageUrlContent() - { - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalMessageImageUrlContent)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type); - } - if (_additionalBinaryDataProperties?.ContainsKey("image_url") != true) - { - writer.WritePropertyName("image_url"u8); - writer.WriteObjectValue(_imageUrl, options); - } - } - - InternalMessageImageUrlContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageImageUrlContent)JsonModelCreateCore(ref reader, options); - - protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalMessageImageUrlContent)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalMessageImageUrlContent(document.RootElement, options); - } - - internal static InternalMessageImageUrlContent DeserializeInternalMessageImageUrlContent(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string @type = default; - InternalMessageContentImageUrlObjectImageUrl imageUrl = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("image_url"u8)) - { - imageUrl = InternalMessageContentImageUrlObjectImageUrl.DeserializeInternalMessageContentImageUrlObjectImageUrl(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalMessageImageUrlContent(additionalBinaryDataProperties, @type, imageUrl); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalMessageImageUrlContent)} does not support writing '{options.Format}' format."); - } - } - - InternalMessageImageUrlContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageImageUrlContent)PersistableModelCreateCore(data, options); - - protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalMessageImageUrlContent(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalMessageImageUrlContent)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageImageUrlContent internalMessageImageUrlContent) - { - if (internalMessageImageUrlContent == null) - { - return null; - } - return BinaryContent.Create(internalMessageImageUrlContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageImageUrlContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageImageUrlContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalMessageImageUrlContent.cs b/src/Generated/Models/InternalMessageImageUrlContent.cs deleted file mode 100644 index dd2db88a2..000000000 --- a/src/Generated/Models/InternalMessageImageUrlContent.cs +++ /dev/null @@ -1,18 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Assistants -{ - internal partial class InternalMessageImageUrlContent : MessageContent - { - internal InternalMessageImageUrlContent(IDictionary additionalBinaryDataProperties, string @type, InternalMessageContentImageUrlObjectImageUrl imageUrl) : base(additionalBinaryDataProperties) - { - _type = @type; - _imageUrl = imageUrl; - } - } -} diff --git a/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs b/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs index f3893cc17..d900e3f09 100644 --- a/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs +++ b/src/Generated/Models/InternalMessageObjectAttachment.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -54,6 +55,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -77,6 +79,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalMessageObjectAttachment IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalMessageObjectAttachment JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -125,6 +128,7 @@ internal static InternalMessageObjectAttachment DeserializeInternalMessageObject tools = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalMessageObjectAttachment(fileId, tools ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -132,13 +136,14 @@ internal static InternalMessageObjectAttachment DeserializeInternalMessageObject BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageObjectAttachment)} does not support writing '{options.Format}' format."); } @@ -146,6 +151,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageObjectAttachment IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalMessageObjectAttachment PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -162,21 +168,5 @@ protected virtual InternalMessageObjectAttachment PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageObjectAttachment internalMessageObjectAttachment) - { - if (internalMessageObjectAttachment == null) - { - return null; - } - return BinaryContent.Create(internalMessageObjectAttachment, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageObjectAttachment(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageObjectAttachment(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalMessageObjectAttachment.cs b/src/Generated/Models/InternalMessageObjectAttachment.cs index 6255505fb..3ae1b88f8 100644 --- a/src/Generated/Models/InternalMessageObjectAttachment.cs +++ b/src/Generated/Models/InternalMessageObjectAttachment.cs @@ -12,15 +12,15 @@ internal partial class InternalMessageObjectAttachment { private protected IDictionary _additionalBinaryDataProperties; - internal InternalMessageObjectAttachment() + internal InternalMessageObjectAttachment() : this(null, null, null) { - Tools = new ChangeTrackingList(); } internal InternalMessageObjectAttachment(string fileId, IList tools, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections FileId = fileId; - Tools = tools; + Tools = tools ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalMessageObjectObject.cs b/src/Generated/Models/InternalMessageObjectObject.cs deleted file mode 100644 index 76edcd658..000000000 --- a/src/Generated/Models/InternalMessageObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalMessageObjectObject : IEquatable - { - private readonly string _value; - private const string ThreadMessageValue = "thread.message"; - - public InternalMessageObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalMessageObjectObject ThreadMessage { get; } = new InternalMessageObjectObject(ThreadMessageValue); - - public static bool operator ==(InternalMessageObjectObject left, InternalMessageObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalMessageObjectObject left, InternalMessageObjectObject right) => !left.Equals(right); - - public static implicit operator InternalMessageObjectObject(string value) => new InternalMessageObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalMessageObjectObject other && Equals(other); - - public bool Equals(InternalMessageObjectObject 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/InternalMessageObjectRole.cs b/src/Generated/Models/InternalMessageObjectRole.cs index 972b10975..1381808ed 100644 --- a/src/Generated/Models/InternalMessageObjectRole.cs +++ b/src/Generated/Models/InternalMessageObjectRole.cs @@ -21,9 +21,9 @@ public InternalMessageObjectRole(string value) _value = value; } - public static InternalMessageObjectRole User { get; } = new InternalMessageObjectRole(UserValue); + internal static InternalMessageObjectRole User { get; } = new InternalMessageObjectRole(UserValue); - public static InternalMessageObjectRole Assistant { get; } = new InternalMessageObjectRole(AssistantValue); + internal static InternalMessageObjectRole Assistant { get; } = new InternalMessageObjectRole(AssistantValue); public static bool operator ==(InternalMessageObjectRole left, InternalMessageObjectRole right) => left.Equals(right); diff --git a/src/Generated/Models/InternalMessageRefusalContent.Serialization.cs b/src/Generated/Models/InternalMessageRefusalContent.Serialization.cs deleted file mode 100644 index 68bec52ae..000000000 --- a/src/Generated/Models/InternalMessageRefusalContent.Serialization.cs +++ /dev/null @@ -1,128 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalMessageRefusalContent : IJsonModel - { - internal InternalMessageRefusalContent() - { - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalMessageRefusalContent)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) - { - writer.WritePropertyName("refusal"u8); - writer.WriteStringValue(InternalRefusal); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type); - } - } - - InternalMessageRefusalContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalMessageRefusalContent)JsonModelCreateCore(ref reader, options); - - protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalMessageRefusalContent)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalMessageRefusalContent(document.RootElement, options); - } - - internal static InternalMessageRefusalContent DeserializeInternalMessageRefusalContent(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string internalRefusal = default; - string @type = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("refusal"u8)) - { - internalRefusal = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalMessageRefusalContent(additionalBinaryDataProperties, internalRefusal, @type); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalMessageRefusalContent)} does not support writing '{options.Format}' format."); - } - } - - InternalMessageRefusalContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalMessageRefusalContent)PersistableModelCreateCore(data, options); - - protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalMessageRefusalContent(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalMessageRefusalContent)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalMessageRefusalContent internalMessageRefusalContent) - { - if (internalMessageRefusalContent == null) - { - return null; - } - return BinaryContent.Create(internalMessageRefusalContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalMessageRefusalContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalMessageRefusalContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalMessageRefusalContent.cs b/src/Generated/Models/InternalMessageRefusalContent.cs deleted file mode 100644 index cf5028d08..000000000 --- a/src/Generated/Models/InternalMessageRefusalContent.cs +++ /dev/null @@ -1,26 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalMessageRefusalContent : MessageContent - { - public InternalMessageRefusalContent(string internalRefusal) - { - Argument.AssertNotNull(internalRefusal, nameof(internalRefusal)); - - InternalRefusal = internalRefusal; - } - - internal InternalMessageRefusalContent(IDictionary additionalBinaryDataProperties, string internalRefusal, string @type) : base(additionalBinaryDataProperties) - { - InternalRefusal = internalRefusal; - _type = @type; - } - } -} diff --git a/src/Generated/Models/InternalMessageRequestContentTextObjectType.cs b/src/Generated/Models/InternalMessageRequestContentTextObjectType.cs deleted file mode 100644 index b7caeebc4..000000000 --- a/src/Generated/Models/InternalMessageRequestContentTextObjectType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalMessageRequestContentTextObjectType : IEquatable - { - private readonly string _value; - private const string TextValue = "text"; - - public InternalMessageRequestContentTextObjectType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalMessageRequestContentTextObjectType Text { get; } = new InternalMessageRequestContentTextObjectType(TextValue); - - public static bool operator ==(InternalMessageRequestContentTextObjectType left, InternalMessageRequestContentTextObjectType right) => left.Equals(right); - - public static bool operator !=(InternalMessageRequestContentTextObjectType left, InternalMessageRequestContentTextObjectType right) => !left.Equals(right); - - public static implicit operator InternalMessageRequestContentTextObjectType(string value) => new InternalMessageRequestContentTextObjectType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalMessageRequestContentTextObjectType other && Equals(other); - - public bool Equals(InternalMessageRequestContentTextObjectType 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/InternalMetadataPropertyForRequest.Serialization.cs b/src/Generated/Models/InternalMetadataPropertyForRequest.Serialization.cs new file mode 100644 index 000000000..e336b0619 --- /dev/null +++ b/src/Generated/Models/InternalMetadataPropertyForRequest.Serialization.cs @@ -0,0 +1,155 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalMetadataPropertyForRequest : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMetadataPropertyForRequest)} does not support writing '{format}' format."); + } + if (Optional.IsCollectionDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalMetadataPropertyForRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalMetadataPropertyForRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalMetadataPropertyForRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalMetadataPropertyForRequest(document.RootElement, options); + } + + internal static InternalMetadataPropertyForRequest DeserializeInternalMetadataPropertyForRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IDictionary metadata = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalMetadataPropertyForRequest(metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalMetadataPropertyForRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalMetadataPropertyForRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalMetadataPropertyForRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalMetadataPropertyForRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalMetadataPropertyForRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalMetadataPropertyForRequest.cs b/src/Generated/Models/InternalMetadataPropertyForRequest.cs new file mode 100644 index 000000000..e7309fe1f --- /dev/null +++ b/src/Generated/Models/InternalMetadataPropertyForRequest.cs @@ -0,0 +1,34 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalMetadataPropertyForRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalMetadataPropertyForRequest() : this(null, null) + { + } + + internal InternalMetadataPropertyForRequest(IDictionary metadata, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IDictionary Metadata { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalModelIdsResponses.cs b/src/Generated/Models/InternalModelIdsResponses.cs new file mode 100644 index 000000000..16e2a91cc --- /dev/null +++ b/src/Generated/Models/InternalModelIdsResponses.cs @@ -0,0 +1,221 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalModelIdsResponses : IEquatable + { + private readonly string _value; + private const string Gpt41Value = "gpt-4.1"; + private const string Gpt41MiniValue = "gpt-4.1-mini"; + private const string Gpt41NanoValue = "gpt-4.1-nano"; + private const string Gpt4120250414Value = "gpt-4.1-2025-04-14"; + private const string Gpt41Mini20250414Value = "gpt-4.1-mini-2025-04-14"; + private const string Gpt41Nano20250414Value = "gpt-4.1-nano-2025-04-14"; + private const string O4MiniValue = "o4-mini"; + private const string O4Mini20250416Value = "o4-mini-2025-04-16"; + private const string O3Value = "o3"; + private const string O320250416Value = "o3-2025-04-16"; + private const string O3MiniValue = "o3-mini"; + private const string O3Mini20250131Value = "o3-mini-2025-01-31"; + private const string O1Value = "o1"; + private const string O120241217Value = "o1-2024-12-17"; + private const string O1PreviewValue = "o1-preview"; + private const string O1Preview20240912Value = "o1-preview-2024-09-12"; + private const string O1MiniValue = "o1-mini"; + private const string O1Mini20240912Value = "o1-mini-2024-09-12"; + private const string Gpt4oValue = "gpt-4o"; + private const string Gpt4o20241120Value = "gpt-4o-2024-11-20"; + private const string Gpt4o20240806Value = "gpt-4o-2024-08-06"; + private const string Gpt4o20240513Value = "gpt-4o-2024-05-13"; + private const string Gpt4oAudioPreviewValue = "gpt-4o-audio-preview"; + private const string Gpt4oAudioPreview20241001Value = "gpt-4o-audio-preview-2024-10-01"; + private const string Gpt4oAudioPreview20241217Value = "gpt-4o-audio-preview-2024-12-17"; + private const string Gpt4oAudioPreview20250603Value = "gpt-4o-audio-preview-2025-06-03"; + private const string Gpt4oMiniAudioPreviewValue = "gpt-4o-mini-audio-preview"; + private const string Gpt4oMiniAudioPreview20241217Value = "gpt-4o-mini-audio-preview-2024-12-17"; + private const string Gpt4oSearchPreviewValue = "gpt-4o-search-preview"; + private const string Gpt4oMiniSearchPreviewValue = "gpt-4o-mini-search-preview"; + private const string Gpt4oSearchPreview20250311Value = "gpt-4o-search-preview-2025-03-11"; + private const string Gpt4oMiniSearchPreview20250311Value = "gpt-4o-mini-search-preview-2025-03-11"; + private const string Chatgpt4oLatestValue = "chatgpt-4o-latest"; + private const string CodexMiniLatestValue = "codex-mini-latest"; + private const string Gpt4oMiniValue = "gpt-4o-mini"; + private const string Gpt4oMini20240718Value = "gpt-4o-mini-2024-07-18"; + private const string Gpt4TurboValue = "gpt-4-turbo"; + private const string Gpt4Turbo20240409Value = "gpt-4-turbo-2024-04-09"; + private const string Gpt40125PreviewValue = "gpt-4-0125-preview"; + private const string Gpt4TurboPreviewValue = "gpt-4-turbo-preview"; + private const string Gpt41106PreviewValue = "gpt-4-1106-preview"; + private const string Gpt4VisionPreviewValue = "gpt-4-vision-preview"; + private const string Gpt4Value = "gpt-4"; + private const string Gpt40314Value = "gpt-4-0314"; + private const string Gpt40613Value = "gpt-4-0613"; + private const string Gpt432kValue = "gpt-4-32k"; + private const string Gpt432k0314Value = "gpt-4-32k-0314"; + private const string Gpt432k0613Value = "gpt-4-32k-0613"; + private const string Gpt35TurboValue = "gpt-3.5-turbo"; + private const string Gpt35Turbo16kValue = "gpt-3.5-turbo-16k"; + private const string Gpt35Turbo0301Value = "gpt-3.5-turbo-0301"; + private const string Gpt35Turbo0613Value = "gpt-3.5-turbo-0613"; + private const string Gpt35Turbo1106Value = "gpt-3.5-turbo-1106"; + private const string Gpt35Turbo0125Value = "gpt-3.5-turbo-0125"; + private const string Gpt35Turbo16k0613Value = "gpt-3.5-turbo-16k-0613"; + private const string O1ProValue = "o1-pro"; + private const string O1Pro20250319Value = "o1-pro-2025-03-19"; + private const string O3ProValue = "o3-pro"; + private const string O3Pro20250610Value = "o3-pro-2025-06-10"; + private const string ComputerUsePreviewValue = "computer-use-preview"; + private const string ComputerUsePreview20250311Value = "computer-use-preview-2025-03-11"; + + public InternalModelIdsResponses(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalModelIdsResponses Gpt41 { get; } = new InternalModelIdsResponses(Gpt41Value); + + internal static InternalModelIdsResponses Gpt41Mini { get; } = new InternalModelIdsResponses(Gpt41MiniValue); + + internal static InternalModelIdsResponses Gpt41Nano { get; } = new InternalModelIdsResponses(Gpt41NanoValue); + + internal static InternalModelIdsResponses Gpt4120250414 { get; } = new InternalModelIdsResponses(Gpt4120250414Value); + + internal static InternalModelIdsResponses Gpt41Mini20250414 { get; } = new InternalModelIdsResponses(Gpt41Mini20250414Value); + + internal static InternalModelIdsResponses Gpt41Nano20250414 { get; } = new InternalModelIdsResponses(Gpt41Nano20250414Value); + + internal static InternalModelIdsResponses O4Mini { get; } = new InternalModelIdsResponses(O4MiniValue); + + internal static InternalModelIdsResponses O4Mini20250416 { get; } = new InternalModelIdsResponses(O4Mini20250416Value); + + internal static InternalModelIdsResponses O3 { get; } = new InternalModelIdsResponses(O3Value); + + internal static InternalModelIdsResponses O320250416 { get; } = new InternalModelIdsResponses(O320250416Value); + + internal static InternalModelIdsResponses O3Mini { get; } = new InternalModelIdsResponses(O3MiniValue); + + internal static InternalModelIdsResponses O3Mini20250131 { get; } = new InternalModelIdsResponses(O3Mini20250131Value); + + internal static InternalModelIdsResponses O1 { get; } = new InternalModelIdsResponses(O1Value); + + internal static InternalModelIdsResponses O120241217 { get; } = new InternalModelIdsResponses(O120241217Value); + + internal static InternalModelIdsResponses O1Preview { get; } = new InternalModelIdsResponses(O1PreviewValue); + + internal static InternalModelIdsResponses O1Preview20240912 { get; } = new InternalModelIdsResponses(O1Preview20240912Value); + + internal static InternalModelIdsResponses O1Mini { get; } = new InternalModelIdsResponses(O1MiniValue); + + internal static InternalModelIdsResponses O1Mini20240912 { get; } = new InternalModelIdsResponses(O1Mini20240912Value); + + internal static InternalModelIdsResponses Gpt4o { get; } = new InternalModelIdsResponses(Gpt4oValue); + + internal static InternalModelIdsResponses Gpt4o20241120 { get; } = new InternalModelIdsResponses(Gpt4o20241120Value); + + internal static InternalModelIdsResponses Gpt4o20240806 { get; } = new InternalModelIdsResponses(Gpt4o20240806Value); + + internal static InternalModelIdsResponses Gpt4o20240513 { get; } = new InternalModelIdsResponses(Gpt4o20240513Value); + + internal static InternalModelIdsResponses Gpt4oAudioPreview { get; } = new InternalModelIdsResponses(Gpt4oAudioPreviewValue); + + internal static InternalModelIdsResponses Gpt4oAudioPreview20241001 { get; } = new InternalModelIdsResponses(Gpt4oAudioPreview20241001Value); + + internal static InternalModelIdsResponses Gpt4oAudioPreview20241217 { get; } = new InternalModelIdsResponses(Gpt4oAudioPreview20241217Value); + + internal static InternalModelIdsResponses Gpt4oAudioPreview20250603 { get; } = new InternalModelIdsResponses(Gpt4oAudioPreview20250603Value); + + internal static InternalModelIdsResponses Gpt4oMiniAudioPreview { get; } = new InternalModelIdsResponses(Gpt4oMiniAudioPreviewValue); + + internal static InternalModelIdsResponses Gpt4oMiniAudioPreview20241217 { get; } = new InternalModelIdsResponses(Gpt4oMiniAudioPreview20241217Value); + + internal static InternalModelIdsResponses Gpt4oSearchPreview { get; } = new InternalModelIdsResponses(Gpt4oSearchPreviewValue); + + internal static InternalModelIdsResponses Gpt4oMiniSearchPreview { get; } = new InternalModelIdsResponses(Gpt4oMiniSearchPreviewValue); + + internal static InternalModelIdsResponses Gpt4oSearchPreview20250311 { get; } = new InternalModelIdsResponses(Gpt4oSearchPreview20250311Value); + + internal static InternalModelIdsResponses Gpt4oMiniSearchPreview20250311 { get; } = new InternalModelIdsResponses(Gpt4oMiniSearchPreview20250311Value); + + internal static InternalModelIdsResponses Chatgpt4oLatest { get; } = new InternalModelIdsResponses(Chatgpt4oLatestValue); + + internal static InternalModelIdsResponses CodexMiniLatest { get; } = new InternalModelIdsResponses(CodexMiniLatestValue); + + internal static InternalModelIdsResponses Gpt4oMini { get; } = new InternalModelIdsResponses(Gpt4oMiniValue); + + internal static InternalModelIdsResponses Gpt4oMini20240718 { get; } = new InternalModelIdsResponses(Gpt4oMini20240718Value); + + internal static InternalModelIdsResponses Gpt4Turbo { get; } = new InternalModelIdsResponses(Gpt4TurboValue); + + internal static InternalModelIdsResponses Gpt4Turbo20240409 { get; } = new InternalModelIdsResponses(Gpt4Turbo20240409Value); + + internal static InternalModelIdsResponses Gpt40125Preview { get; } = new InternalModelIdsResponses(Gpt40125PreviewValue); + + internal static InternalModelIdsResponses Gpt4TurboPreview { get; } = new InternalModelIdsResponses(Gpt4TurboPreviewValue); + + internal static InternalModelIdsResponses Gpt41106Preview { get; } = new InternalModelIdsResponses(Gpt41106PreviewValue); + + internal static InternalModelIdsResponses Gpt4VisionPreview { get; } = new InternalModelIdsResponses(Gpt4VisionPreviewValue); + + internal static InternalModelIdsResponses Gpt4 { get; } = new InternalModelIdsResponses(Gpt4Value); + + internal static InternalModelIdsResponses Gpt40314 { get; } = new InternalModelIdsResponses(Gpt40314Value); + + internal static InternalModelIdsResponses Gpt40613 { get; } = new InternalModelIdsResponses(Gpt40613Value); + + internal static InternalModelIdsResponses Gpt432k { get; } = new InternalModelIdsResponses(Gpt432kValue); + + internal static InternalModelIdsResponses Gpt432k0314 { get; } = new InternalModelIdsResponses(Gpt432k0314Value); + + internal static InternalModelIdsResponses Gpt432k0613 { get; } = new InternalModelIdsResponses(Gpt432k0613Value); + + internal static InternalModelIdsResponses Gpt35Turbo { get; } = new InternalModelIdsResponses(Gpt35TurboValue); + + internal static InternalModelIdsResponses Gpt35Turbo16k { get; } = new InternalModelIdsResponses(Gpt35Turbo16kValue); + + internal static InternalModelIdsResponses Gpt35Turbo0301 { get; } = new InternalModelIdsResponses(Gpt35Turbo0301Value); + + internal static InternalModelIdsResponses Gpt35Turbo0613 { get; } = new InternalModelIdsResponses(Gpt35Turbo0613Value); + + internal static InternalModelIdsResponses Gpt35Turbo1106 { get; } = new InternalModelIdsResponses(Gpt35Turbo1106Value); + + internal static InternalModelIdsResponses Gpt35Turbo0125 { get; } = new InternalModelIdsResponses(Gpt35Turbo0125Value); + + internal static InternalModelIdsResponses Gpt35Turbo16k0613 { get; } = new InternalModelIdsResponses(Gpt35Turbo16k0613Value); + + internal static InternalModelIdsResponses O1Pro { get; } = new InternalModelIdsResponses(O1ProValue); + + internal static InternalModelIdsResponses O1Pro20250319 { get; } = new InternalModelIdsResponses(O1Pro20250319Value); + + internal static InternalModelIdsResponses O3Pro { get; } = new InternalModelIdsResponses(O3ProValue); + + internal static InternalModelIdsResponses O3Pro20250610 { get; } = new InternalModelIdsResponses(O3Pro20250610Value); + + internal static InternalModelIdsResponses ComputerUsePreview { get; } = new InternalModelIdsResponses(ComputerUsePreviewValue); + + internal static InternalModelIdsResponses ComputerUsePreview20250311 { get; } = new InternalModelIdsResponses(ComputerUsePreview20250311Value); + + public static bool operator ==(InternalModelIdsResponses left, InternalModelIdsResponses right) => left.Equals(right); + + public static bool operator !=(InternalModelIdsResponses left, InternalModelIdsResponses right) => !left.Equals(right); + + public static implicit operator InternalModelIdsResponses(string value) => new InternalModelIdsResponses(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalModelIdsResponses other && Equals(other); + + public bool Equals(InternalModelIdsResponses 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/InternalModelIdsShared.cs b/src/Generated/Models/InternalModelIdsShared.cs new file mode 100644 index 000000000..630873289 --- /dev/null +++ b/src/Generated/Models/InternalModelIdsShared.cs @@ -0,0 +1,203 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Internal +{ + internal readonly partial struct InternalModelIdsShared : IEquatable + { + private readonly string _value; + private const string Gpt41Value = "gpt-4.1"; + private const string Gpt41MiniValue = "gpt-4.1-mini"; + private const string Gpt41NanoValue = "gpt-4.1-nano"; + private const string Gpt4120250414Value = "gpt-4.1-2025-04-14"; + private const string Gpt41Mini20250414Value = "gpt-4.1-mini-2025-04-14"; + private const string Gpt41Nano20250414Value = "gpt-4.1-nano-2025-04-14"; + private const string O4MiniValue = "o4-mini"; + private const string O4Mini20250416Value = "o4-mini-2025-04-16"; + private const string O3Value = "o3"; + private const string O320250416Value = "o3-2025-04-16"; + private const string O3MiniValue = "o3-mini"; + private const string O3Mini20250131Value = "o3-mini-2025-01-31"; + private const string O1Value = "o1"; + private const string O120241217Value = "o1-2024-12-17"; + private const string O1PreviewValue = "o1-preview"; + private const string O1Preview20240912Value = "o1-preview-2024-09-12"; + private const string O1MiniValue = "o1-mini"; + private const string O1Mini20240912Value = "o1-mini-2024-09-12"; + private const string Gpt4oValue = "gpt-4o"; + private const string Gpt4o20241120Value = "gpt-4o-2024-11-20"; + private const string Gpt4o20240806Value = "gpt-4o-2024-08-06"; + private const string Gpt4o20240513Value = "gpt-4o-2024-05-13"; + private const string Gpt4oAudioPreviewValue = "gpt-4o-audio-preview"; + private const string Gpt4oAudioPreview20241001Value = "gpt-4o-audio-preview-2024-10-01"; + private const string Gpt4oAudioPreview20241217Value = "gpt-4o-audio-preview-2024-12-17"; + private const string Gpt4oAudioPreview20250603Value = "gpt-4o-audio-preview-2025-06-03"; + private const string Gpt4oMiniAudioPreviewValue = "gpt-4o-mini-audio-preview"; + private const string Gpt4oMiniAudioPreview20241217Value = "gpt-4o-mini-audio-preview-2024-12-17"; + private const string Gpt4oSearchPreviewValue = "gpt-4o-search-preview"; + private const string Gpt4oMiniSearchPreviewValue = "gpt-4o-mini-search-preview"; + private const string Gpt4oSearchPreview20250311Value = "gpt-4o-search-preview-2025-03-11"; + private const string Gpt4oMiniSearchPreview20250311Value = "gpt-4o-mini-search-preview-2025-03-11"; + private const string Chatgpt4oLatestValue = "chatgpt-4o-latest"; + private const string CodexMiniLatestValue = "codex-mini-latest"; + private const string Gpt4oMiniValue = "gpt-4o-mini"; + private const string Gpt4oMini20240718Value = "gpt-4o-mini-2024-07-18"; + private const string Gpt4TurboValue = "gpt-4-turbo"; + private const string Gpt4Turbo20240409Value = "gpt-4-turbo-2024-04-09"; + private const string Gpt40125PreviewValue = "gpt-4-0125-preview"; + private const string Gpt4TurboPreviewValue = "gpt-4-turbo-preview"; + private const string Gpt41106PreviewValue = "gpt-4-1106-preview"; + private const string Gpt4VisionPreviewValue = "gpt-4-vision-preview"; + private const string Gpt4Value = "gpt-4"; + private const string Gpt40314Value = "gpt-4-0314"; + private const string Gpt40613Value = "gpt-4-0613"; + private const string Gpt432kValue = "gpt-4-32k"; + private const string Gpt432k0314Value = "gpt-4-32k-0314"; + private const string Gpt432k0613Value = "gpt-4-32k-0613"; + private const string Gpt35TurboValue = "gpt-3.5-turbo"; + private const string Gpt35Turbo16kValue = "gpt-3.5-turbo-16k"; + private const string Gpt35Turbo0301Value = "gpt-3.5-turbo-0301"; + private const string Gpt35Turbo0613Value = "gpt-3.5-turbo-0613"; + private const string Gpt35Turbo1106Value = "gpt-3.5-turbo-1106"; + private const string Gpt35Turbo0125Value = "gpt-3.5-turbo-0125"; + private const string Gpt35Turbo16k0613Value = "gpt-3.5-turbo-16k-0613"; + + public InternalModelIdsShared(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalModelIdsShared Gpt41 { get; } = new InternalModelIdsShared(Gpt41Value); + + internal static InternalModelIdsShared Gpt41Mini { get; } = new InternalModelIdsShared(Gpt41MiniValue); + + internal static InternalModelIdsShared Gpt41Nano { get; } = new InternalModelIdsShared(Gpt41NanoValue); + + internal static InternalModelIdsShared Gpt4120250414 { get; } = new InternalModelIdsShared(Gpt4120250414Value); + + internal static InternalModelIdsShared Gpt41Mini20250414 { get; } = new InternalModelIdsShared(Gpt41Mini20250414Value); + + internal static InternalModelIdsShared Gpt41Nano20250414 { get; } = new InternalModelIdsShared(Gpt41Nano20250414Value); + + internal static InternalModelIdsShared O4Mini { get; } = new InternalModelIdsShared(O4MiniValue); + + internal static InternalModelIdsShared O4Mini20250416 { get; } = new InternalModelIdsShared(O4Mini20250416Value); + + internal static InternalModelIdsShared O3 { get; } = new InternalModelIdsShared(O3Value); + + internal static InternalModelIdsShared O320250416 { get; } = new InternalModelIdsShared(O320250416Value); + + internal static InternalModelIdsShared O3Mini { get; } = new InternalModelIdsShared(O3MiniValue); + + internal static InternalModelIdsShared O3Mini20250131 { get; } = new InternalModelIdsShared(O3Mini20250131Value); + + internal static InternalModelIdsShared O1 { get; } = new InternalModelIdsShared(O1Value); + + internal static InternalModelIdsShared O120241217 { get; } = new InternalModelIdsShared(O120241217Value); + + internal static InternalModelIdsShared O1Preview { get; } = new InternalModelIdsShared(O1PreviewValue); + + internal static InternalModelIdsShared O1Preview20240912 { get; } = new InternalModelIdsShared(O1Preview20240912Value); + + internal static InternalModelIdsShared O1Mini { get; } = new InternalModelIdsShared(O1MiniValue); + + internal static InternalModelIdsShared O1Mini20240912 { get; } = new InternalModelIdsShared(O1Mini20240912Value); + + internal static InternalModelIdsShared Gpt4o { get; } = new InternalModelIdsShared(Gpt4oValue); + + internal static InternalModelIdsShared Gpt4o20241120 { get; } = new InternalModelIdsShared(Gpt4o20241120Value); + + internal static InternalModelIdsShared Gpt4o20240806 { get; } = new InternalModelIdsShared(Gpt4o20240806Value); + + internal static InternalModelIdsShared Gpt4o20240513 { get; } = new InternalModelIdsShared(Gpt4o20240513Value); + + internal static InternalModelIdsShared Gpt4oAudioPreview { get; } = new InternalModelIdsShared(Gpt4oAudioPreviewValue); + + internal static InternalModelIdsShared Gpt4oAudioPreview20241001 { get; } = new InternalModelIdsShared(Gpt4oAudioPreview20241001Value); + + internal static InternalModelIdsShared Gpt4oAudioPreview20241217 { get; } = new InternalModelIdsShared(Gpt4oAudioPreview20241217Value); + + internal static InternalModelIdsShared Gpt4oAudioPreview20250603 { get; } = new InternalModelIdsShared(Gpt4oAudioPreview20250603Value); + + internal static InternalModelIdsShared Gpt4oMiniAudioPreview { get; } = new InternalModelIdsShared(Gpt4oMiniAudioPreviewValue); + + internal static InternalModelIdsShared Gpt4oMiniAudioPreview20241217 { get; } = new InternalModelIdsShared(Gpt4oMiniAudioPreview20241217Value); + + internal static InternalModelIdsShared Gpt4oSearchPreview { get; } = new InternalModelIdsShared(Gpt4oSearchPreviewValue); + + internal static InternalModelIdsShared Gpt4oMiniSearchPreview { get; } = new InternalModelIdsShared(Gpt4oMiniSearchPreviewValue); + + internal static InternalModelIdsShared Gpt4oSearchPreview20250311 { get; } = new InternalModelIdsShared(Gpt4oSearchPreview20250311Value); + + internal static InternalModelIdsShared Gpt4oMiniSearchPreview20250311 { get; } = new InternalModelIdsShared(Gpt4oMiniSearchPreview20250311Value); + + internal static InternalModelIdsShared Chatgpt4oLatest { get; } = new InternalModelIdsShared(Chatgpt4oLatestValue); + + internal static InternalModelIdsShared CodexMiniLatest { get; } = new InternalModelIdsShared(CodexMiniLatestValue); + + internal static InternalModelIdsShared Gpt4oMini { get; } = new InternalModelIdsShared(Gpt4oMiniValue); + + internal static InternalModelIdsShared Gpt4oMini20240718 { get; } = new InternalModelIdsShared(Gpt4oMini20240718Value); + + internal static InternalModelIdsShared Gpt4Turbo { get; } = new InternalModelIdsShared(Gpt4TurboValue); + + internal static InternalModelIdsShared Gpt4Turbo20240409 { get; } = new InternalModelIdsShared(Gpt4Turbo20240409Value); + + internal static InternalModelIdsShared Gpt40125Preview { get; } = new InternalModelIdsShared(Gpt40125PreviewValue); + + internal static InternalModelIdsShared Gpt4TurboPreview { get; } = new InternalModelIdsShared(Gpt4TurboPreviewValue); + + internal static InternalModelIdsShared Gpt41106Preview { get; } = new InternalModelIdsShared(Gpt41106PreviewValue); + + internal static InternalModelIdsShared Gpt4VisionPreview { get; } = new InternalModelIdsShared(Gpt4VisionPreviewValue); + + internal static InternalModelIdsShared Gpt4 { get; } = new InternalModelIdsShared(Gpt4Value); + + internal static InternalModelIdsShared Gpt40314 { get; } = new InternalModelIdsShared(Gpt40314Value); + + internal static InternalModelIdsShared Gpt40613 { get; } = new InternalModelIdsShared(Gpt40613Value); + + internal static InternalModelIdsShared Gpt432k { get; } = new InternalModelIdsShared(Gpt432kValue); + + internal static InternalModelIdsShared Gpt432k0314 { get; } = new InternalModelIdsShared(Gpt432k0314Value); + + internal static InternalModelIdsShared Gpt432k0613 { get; } = new InternalModelIdsShared(Gpt432k0613Value); + + internal static InternalModelIdsShared Gpt35Turbo { get; } = new InternalModelIdsShared(Gpt35TurboValue); + + internal static InternalModelIdsShared Gpt35Turbo16k { get; } = new InternalModelIdsShared(Gpt35Turbo16kValue); + + internal static InternalModelIdsShared Gpt35Turbo0301 { get; } = new InternalModelIdsShared(Gpt35Turbo0301Value); + + internal static InternalModelIdsShared Gpt35Turbo0613 { get; } = new InternalModelIdsShared(Gpt35Turbo0613Value); + + internal static InternalModelIdsShared Gpt35Turbo1106 { get; } = new InternalModelIdsShared(Gpt35Turbo1106Value); + + internal static InternalModelIdsShared Gpt35Turbo0125 { get; } = new InternalModelIdsShared(Gpt35Turbo0125Value); + + internal static InternalModelIdsShared Gpt35Turbo16k0613 { get; } = new InternalModelIdsShared(Gpt35Turbo16k0613Value); + + public static bool operator ==(InternalModelIdsShared left, InternalModelIdsShared right) => left.Equals(right); + + public static bool operator !=(InternalModelIdsShared left, InternalModelIdsShared right) => !left.Equals(right); + + public static implicit operator InternalModelIdsShared(string value) => new InternalModelIdsShared(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalModelIdsShared other && Equals(other); + + public bool Equals(InternalModelIdsShared 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/InternalModelObject.cs b/src/Generated/Models/InternalModelObject.cs deleted file mode 100644 index eac208570..000000000 --- a/src/Generated/Models/InternalModelObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Models -{ - internal readonly partial struct InternalModelObject : IEquatable - { - private readonly string _value; - private const string ModelValue = "model"; - - public InternalModelObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalModelObject Model { get; } = new InternalModelObject(ModelValue); - - public static bool operator ==(InternalModelObject left, InternalModelObject right) => left.Equals(right); - - public static bool operator !=(InternalModelObject left, InternalModelObject right) => !left.Equals(right); - - public static implicit operator InternalModelObject(string value) => new InternalModelObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalModelObject other && Equals(other); - - public bool Equals(InternalModelObject 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/InternalModerationCategories.Serialization.cs b/src/Generated/Models/InternalModerationCategories.Serialization.cs index f1cf80c42..88be5666d 100644 --- a/src/Generated/Models/InternalModerationCategories.Serialization.cs +++ b/src/Generated/Models/InternalModerationCategories.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +97,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("violence/graphic"u8); writer.WriteBooleanValue(ViolenceGraphic); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -119,6 +121,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalModerationCategories IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalModerationCategories JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -217,6 +220,7 @@ internal static InternalModerationCategories DeserializeInternalModerationCatego violenceGraphic = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModerationCategories( @@ -238,13 +242,14 @@ internal static InternalModerationCategories DeserializeInternalModerationCatego BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalModerationCategories)} does not support writing '{options.Format}' format."); } @@ -252,6 +257,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalModerationCategories IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalModerationCategories PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -268,21 +274,5 @@ protected virtual InternalModerationCategories PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalModerationCategories internalModerationCategories) - { - if (internalModerationCategories == null) - { - return null; - } - return BinaryContent.Create(internalModerationCategories, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalModerationCategories(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalModerationCategories(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalModerationCategoryScores.Serialization.cs b/src/Generated/Models/InternalModerationCategoryScores.Serialization.cs index 46badb7f8..9bf4ed9c9 100644 --- a/src/Generated/Models/InternalModerationCategoryScores.Serialization.cs +++ b/src/Generated/Models/InternalModerationCategoryScores.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +97,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("violence/graphic"u8); writer.WriteNumberValue(ViolenceGraphic); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -119,6 +121,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalModerationCategoryScores IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalModerationCategoryScores JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -217,6 +220,7 @@ internal static InternalModerationCategoryScores DeserializeInternalModerationCa violenceGraphic = prop.Value.GetSingle(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModerationCategoryScores( @@ -238,13 +242,14 @@ internal static InternalModerationCategoryScores DeserializeInternalModerationCa BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalModerationCategoryScores)} does not support writing '{options.Format}' format."); } @@ -252,6 +257,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalModerationCategoryScores IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalModerationCategoryScores PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -268,21 +274,5 @@ protected virtual InternalModerationCategoryScores PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalModerationCategoryScores internalModerationCategoryScores) - { - if (internalModerationCategoryScores == null) - { - return null; - } - return BinaryContent.Create(internalModerationCategoryScores, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalModerationCategoryScores(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalModerationCategoryScores(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResources.Serialization.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResources.Serialization.cs index 0955b384b..a7f996194 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalModifyAssistantRequestToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalModifyAssistantRequestToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static InternalModifyAssistantRequestToolResources DeserializeInternalM fileSearch = InternalToolResourcesFileSearchIdsOnly.DeserializeInternalToolResourcesFileSearchIdsOnly(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModifyAssistantRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static InternalModifyAssistantRequestToolResources DeserializeInternalM BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalModifyAssistantRequestToolResources)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalModifyAssistantRequestToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalModifyAssistantRequestToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalModifyAssistantRequestToolResources PersistableModelCr } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalModifyAssistantRequestToolResources internalModifyAssistantRequestToolResources) - { - if (internalModifyAssistantRequestToolResources == null) - { - return null; - } - return BinaryContent.Create(internalModifyAssistantRequestToolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalModifyAssistantRequestToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalModifyAssistantRequestToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResources.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResources.cs index 661400bd6..207bbe241 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResources.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResources.cs @@ -22,9 +22,9 @@ internal InternalModifyAssistantRequestToolResources(InternalModifyAssistantRequ _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalModifyAssistantRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } + internal InternalModifyAssistantRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } - public InternalToolResourcesFileSearchIdsOnly FileSearch { get; set; } + internal InternalToolResourcesFileSearchIdsOnly FileSearch { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs index 978cc3c4a..664ccc15f 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalModifyAssistantRequestToolResourcesCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalModifyAssistantRequestToolResourcesCodeInterpreter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalModifyAssistantRequestToolResourcesCodeInterpreter Deser fileIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModifyAssistantRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalModifyAssistantRequestToolResourcesCodeInterpreter Deser BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalModifyAssistantRequestToolResourcesCodeInterpreter)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalModifyAssistantRequestToolResourcesCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalModifyAssistantRequestToolResourcesCodeInterpreter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalModifyAssistantRequestToolResourcesCodeInterpreter Per } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalModifyAssistantRequestToolResourcesCodeInterpreter internalModifyAssistantRequestToolResourcesCodeInterpreter) - { - if (internalModifyAssistantRequestToolResourcesCodeInterpreter == null) - { - return null; - } - return BinaryContent.Create(internalModifyAssistantRequestToolResourcesCodeInterpreter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalModifyAssistantRequestToolResourcesCodeInterpreter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalModifyAssistantRequestToolResourcesCodeInterpreter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.cs index 76eac7d76..b90f594a2 100644 --- a/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalModifyAssistantRequestToolResourcesCodeInterpreter.cs @@ -12,14 +12,14 @@ internal partial class InternalModifyAssistantRequestToolResourcesCodeInterprete { private protected IDictionary _additionalBinaryDataProperties; - public InternalModifyAssistantRequestToolResourcesCodeInterpreter() + public InternalModifyAssistantRequestToolResourcesCodeInterpreter() : this(null, null) { - FileIds = new ChangeTrackingList(); } internal InternalModifyAssistantRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs b/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs index 3c01499f4..bc2f8a880 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalModifyThreadRequestToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalModifyThreadRequestToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static InternalModifyThreadRequestToolResources DeserializeInternalModi fileSearch = InternalToolResourcesFileSearchIdsOnly.DeserializeInternalToolResourcesFileSearchIdsOnly(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModifyThreadRequestToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static InternalModifyThreadRequestToolResources DeserializeInternalModi BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalModifyThreadRequestToolResources)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalModifyThreadRequestToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalModifyThreadRequestToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalModifyThreadRequestToolResources PersistableModelCreat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalModifyThreadRequestToolResources internalModifyThreadRequestToolResources) - { - if (internalModifyThreadRequestToolResources == null) - { - return null; - } - return BinaryContent.Create(internalModifyThreadRequestToolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalModifyThreadRequestToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalModifyThreadRequestToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResources.cs b/src/Generated/Models/InternalModifyThreadRequestToolResources.cs index 9a84e3744..4568f9e29 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResources.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResources.cs @@ -22,9 +22,9 @@ internal InternalModifyThreadRequestToolResources(InternalModifyThreadRequestToo _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalModifyThreadRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } + internal InternalModifyThreadRequestToolResourcesCodeInterpreter CodeInterpreter { get; set; } - public InternalToolResourcesFileSearchIdsOnly FileSearch { get; set; } + internal InternalToolResourcesFileSearchIdsOnly FileSearch { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs index 58de40eb3..5fb404d3a 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(U writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalModifyThreadRequestToolResourcesCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalModifyThreadRequestToolResourcesCodeInterpreter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalModifyThreadRequestToolResourcesCodeInterpreter Deserial fileIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalModifyThreadRequestToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalModifyThreadRequestToolResourcesCodeInterpreter Deserial BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalModifyThreadRequestToolResourcesCodeInterpreter)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalModifyThreadRequestToolResourcesCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalModifyThreadRequestToolResourcesCodeInterpreter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalModifyThreadRequestToolResourcesCodeInterpreter Persis } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalModifyThreadRequestToolResourcesCodeInterpreter internalModifyThreadRequestToolResourcesCodeInterpreter) - { - if (internalModifyThreadRequestToolResourcesCodeInterpreter == null) - { - return null; - } - return BinaryContent.Create(internalModifyThreadRequestToolResourcesCodeInterpreter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalModifyThreadRequestToolResourcesCodeInterpreter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalModifyThreadRequestToolResourcesCodeInterpreter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.cs index 6946e8662..6cde6c208 100644 --- a/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalModifyThreadRequestToolResourcesCodeInterpreter.cs @@ -12,14 +12,14 @@ internal partial class InternalModifyThreadRequestToolResourcesCodeInterpreter { private protected IDictionary _additionalBinaryDataProperties; - public InternalModifyThreadRequestToolResourcesCodeInterpreter() + public InternalModifyThreadRequestToolResourcesCodeInterpreter() : this(null, null) { - FileIds = new ChangeTrackingList(); } internal InternalModifyThreadRequestToolResourcesCodeInterpreter(IList fileIds, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalOmniTypedResponseFormat.Serialization.cs b/src/Generated/Models/InternalOmniTypedResponseFormat.Serialization.cs deleted file mode 100644 index 2fdf94b48..000000000 --- a/src/Generated/Models/InternalOmniTypedResponseFormat.Serialization.cs +++ /dev/null @@ -1,143 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Internal -{ - [PersistableModelProxy(typeof(InternalUnknownOmniTypedResponseFormat))] - internal abstract partial class InternalOmniTypedResponseFormat : IJsonModel - { - internal InternalOmniTypedResponseFormat() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalOmniTypedResponseFormat)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalOmniTypedResponseFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalOmniTypedResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalOmniTypedResponseFormat)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalOmniTypedResponseFormat(document.RootElement, options); - } - - internal static InternalOmniTypedResponseFormat DeserializeInternalOmniTypedResponseFormat(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - if (element.TryGetProperty("type"u8, out JsonElement discriminator)) - { - switch (discriminator.GetString()) - { - case "text": - return InternalResponseFormatText.DeserializeInternalResponseFormatText(element, options); - case "json_object": - return InternalResponseFormatJsonObject.DeserializeInternalResponseFormatJsonObject(element, options); - case "json_schema": - return InternalResponseFormatJsonSchema.DeserializeInternalResponseFormatJsonSchema(element, options); - } - } - return InternalUnknownOmniTypedResponseFormat.DeserializeInternalUnknownOmniTypedResponseFormat(element, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalOmniTypedResponseFormat)} does not support writing '{options.Format}' format."); - } - } - - InternalOmniTypedResponseFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalOmniTypedResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalOmniTypedResponseFormat(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalOmniTypedResponseFormat)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalOmniTypedResponseFormat internalOmniTypedResponseFormat) - { - if (internalOmniTypedResponseFormat == null) - { - return null; - } - return BinaryContent.Create(internalOmniTypedResponseFormat, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalOmniTypedResponseFormat(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalOmniTypedResponseFormat(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalOmniTypedResponseFormat.cs b/src/Generated/Models/InternalOmniTypedResponseFormat.cs deleted file mode 100644 index 5415880b5..000000000 --- a/src/Generated/Models/InternalOmniTypedResponseFormat.cs +++ /dev/null @@ -1,33 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Internal -{ - internal abstract partial class InternalOmniTypedResponseFormat - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected InternalOmniTypedResponseFormat(string @type) - { - Type = @type; - } - - internal InternalOmniTypedResponseFormat(string @type, IDictionary additionalBinaryDataProperties) - { - Type = @type; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - internal string Type { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalOpenAIFileObject.cs b/src/Generated/Models/InternalOpenAIFileObject.cs deleted file mode 100644 index 4d201bd7b..000000000 --- a/src/Generated/Models/InternalOpenAIFileObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Files -{ - internal readonly partial struct InternalOpenAIFileObject : IEquatable - { - private readonly string _value; - private const string FileValue = "file"; - - public InternalOpenAIFileObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalOpenAIFileObject File { get; } = new InternalOpenAIFileObject(FileValue); - - public static bool operator ==(InternalOpenAIFileObject left, InternalOpenAIFileObject right) => left.Equals(right); - - public static bool operator !=(InternalOpenAIFileObject left, InternalOpenAIFileObject right) => !left.Equals(right); - - public static implicit operator InternalOpenAIFileObject(string value) => new InternalOpenAIFileObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalOpenAIFileObject other && Equals(other); - - public bool Equals(InternalOpenAIFileObject 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/InternalOtherChunkingStrategyResponseParam.Serialization.cs b/src/Generated/Models/InternalOtherChunkingStrategyResponseParam.Serialization.cs new file mode 100644 index 000000000..5960394a8 --- /dev/null +++ b/src/Generated/Models/InternalOtherChunkingStrategyResponseParam.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalOtherChunkingStrategyResponseParam : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalOtherChunkingStrategyResponseParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalOtherChunkingStrategyResponseParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalOtherChunkingStrategyResponseParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyResponseParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalOtherChunkingStrategyResponseParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalOtherChunkingStrategyResponseParam(document.RootElement, options); + } + + internal static InternalOtherChunkingStrategyResponseParam DeserializeInternalOtherChunkingStrategyResponseParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalChunkingStrategyResponseParamType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalChunkingStrategyResponseParamType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalOtherChunkingStrategyResponseParam(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalOtherChunkingStrategyResponseParam)} does not support writing '{options.Format}' format."); + } + } + + InternalOtherChunkingStrategyResponseParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalOtherChunkingStrategyResponseParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyResponseParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalOtherChunkingStrategyResponseParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalOtherChunkingStrategyResponseParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalOtherChunkingStrategyResponseParam.cs b/src/Generated/Models/InternalOtherChunkingStrategyResponseParam.cs new file mode 100644 index 000000000..2ed2bf5c4 --- /dev/null +++ b/src/Generated/Models/InternalOtherChunkingStrategyResponseParam.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalOtherChunkingStrategyResponseParam : InternalChunkingStrategyResponseParam + { + internal InternalOtherChunkingStrategyResponseParam() : this(InternalChunkingStrategyResponseParamType.Other, null) + { + } + + internal InternalOtherChunkingStrategyResponseParam(InternalChunkingStrategyResponseParamType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalRealtimeAudioFarFieldNoiseReduction.Serialization.cs b/src/Generated/Models/InternalRealtimeAudioFarFieldNoiseReduction.Serialization.cs new file mode 100644 index 000000000..8938b38ed --- /dev/null +++ b/src/Generated/Models/InternalRealtimeAudioFarFieldNoiseReduction.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeAudioFarFieldNoiseReduction : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeAudioFarFieldNoiseReduction)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalRealtimeAudioFarFieldNoiseReduction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeAudioFarFieldNoiseReduction)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InputNoiseReductionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeAudioFarFieldNoiseReduction)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeAudioFarFieldNoiseReduction(document.RootElement, options); + } + + internal static InternalRealtimeAudioFarFieldNoiseReduction DeserializeInternalRealtimeAudioFarFieldNoiseReduction(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InputNoiseReductionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToInputNoiseReductionKind(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeAudioFarFieldNoiseReduction(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeAudioFarFieldNoiseReduction)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeAudioFarFieldNoiseReduction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeAudioFarFieldNoiseReduction)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InputNoiseReductionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeAudioFarFieldNoiseReduction(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeAudioFarFieldNoiseReduction)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeAudioFarFieldNoiseReduction.cs b/src/Generated/Models/InternalRealtimeAudioFarFieldNoiseReduction.cs new file mode 100644 index 000000000..86acc7ffd --- /dev/null +++ b/src/Generated/Models/InternalRealtimeAudioFarFieldNoiseReduction.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeAudioFarFieldNoiseReduction : InputNoiseReductionOptions + { + public InternalRealtimeAudioFarFieldNoiseReduction() : this(InputNoiseReductionKind.FarField, null) + { + } + + internal InternalRealtimeAudioFarFieldNoiseReduction(InputNoiseReductionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalRealtimeAudioNearFieldNoiseReduction.Serialization.cs b/src/Generated/Models/InternalRealtimeAudioNearFieldNoiseReduction.Serialization.cs new file mode 100644 index 000000000..c3422e577 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeAudioNearFieldNoiseReduction.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeAudioNearFieldNoiseReduction : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeAudioNearFieldNoiseReduction)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalRealtimeAudioNearFieldNoiseReduction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeAudioNearFieldNoiseReduction)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InputNoiseReductionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeAudioNearFieldNoiseReduction)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeAudioNearFieldNoiseReduction(document.RootElement, options); + } + + internal static InternalRealtimeAudioNearFieldNoiseReduction DeserializeInternalRealtimeAudioNearFieldNoiseReduction(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InputNoiseReductionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToInputNoiseReductionKind(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeAudioNearFieldNoiseReduction(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeAudioNearFieldNoiseReduction)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeAudioNearFieldNoiseReduction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeAudioNearFieldNoiseReduction)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InputNoiseReductionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeAudioNearFieldNoiseReduction(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeAudioNearFieldNoiseReduction)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeAudioNearFieldNoiseReduction.cs b/src/Generated/Models/InternalRealtimeAudioNearFieldNoiseReduction.cs new file mode 100644 index 000000000..a6c63cfcc --- /dev/null +++ b/src/Generated/Models/InternalRealtimeAudioNearFieldNoiseReduction.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeAudioNearFieldNoiseReduction : InputNoiseReductionOptions + { + public InternalRealtimeAudioNearFieldNoiseReduction() : this(InputNoiseReductionKind.NearField, null) + { + } + + internal InternalRealtimeAudioNearFieldNoiseReduction(InputNoiseReductionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalRealtimeClientEvent.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEvent.Serialization.cs index 264d439dc..c29d61655 100644 --- a/src/Generated/Models/InternalRealtimeClientEvent.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEvent.Serialization.cs @@ -3,12 +3,12 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { [PersistableModelProxy(typeof(UnknownRealtimeClientEvent))] internal abstract partial class InternalRealtimeClientEvent : IJsonModel @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("event_id"u8); writer.WriteStringValue(EventId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeClientEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -93,6 +96,8 @@ internal static InternalRealtimeClientEvent DeserializeInternalRealtimeClientEve return InternalRealtimeClientEventInputAudioBufferCommit.DeserializeInternalRealtimeClientEventInputAudioBufferCommit(element, options); case "input_audio_buffer.clear": return InternalRealtimeClientEventInputAudioBufferClear.DeserializeInternalRealtimeClientEventInputAudioBufferClear(element, options); + case "output_audio_buffer.clear": + return InternalRealtimeClientEventOutputAudioBufferClear.DeserializeInternalRealtimeClientEventOutputAudioBufferClear(element, options); case "conversation.item.create": return InternalRealtimeClientEventConversationItemCreate.DeserializeInternalRealtimeClientEventConversationItemCreate(element, options); case "conversation.item.truncate": @@ -103,6 +108,10 @@ internal static InternalRealtimeClientEvent DeserializeInternalRealtimeClientEve return InternalRealtimeClientEventResponseCreate.DeserializeInternalRealtimeClientEventResponseCreate(element, options); case "response.cancel": return InternalRealtimeClientEventResponseCancel.DeserializeInternalRealtimeClientEventResponseCancel(element, options); + case "conversation.item.retrieve": + return InternalRealtimeClientEventConversationItemRetrieve.DeserializeInternalRealtimeClientEventConversationItemRetrieve(element, options); + case "transcription_session.update": + return InternalRealtimeClientEventTranscriptionSessionUpdate.DeserializeInternalRealtimeClientEventTranscriptionSessionUpdate(element, options); } } return UnknownRealtimeClientEvent.DeserializeUnknownRealtimeClientEvent(element, options); @@ -110,13 +119,14 @@ internal static InternalRealtimeClientEvent DeserializeInternalRealtimeClientEve BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEvent)} does not support writing '{options.Format}' format."); } @@ -124,6 +134,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -140,21 +151,5 @@ protected virtual InternalRealtimeClientEvent PersistableModelCreateCore(BinaryD } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEvent internalRealtimeClientEvent) - { - if (internalRealtimeClientEvent == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEvent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEvent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEvent(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEvent.cs b/src/Generated/Models/InternalRealtimeClientEvent.cs index 0b986d83d..07f9efb0c 100644 --- a/src/Generated/Models/InternalRealtimeClientEvent.cs +++ b/src/Generated/Models/InternalRealtimeClientEvent.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal abstract partial class InternalRealtimeClientEvent { diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.Serialization.cs index 283fcfe37..bee1f7ee2 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventConversationItemCreate : IJsonModel { - internal InternalRealtimeClientEventConversationItemCreate() + internal InternalRealtimeClientEventConversationItemCreate() : this(InternalRealtimeClientEventType.ConversationItemCreate, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Jso writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventConversationItemCreate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventConversationItemCreate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -67,7 +69,7 @@ internal static InternalRealtimeClientEventConversationItemCreate DeserializeInt string eventId = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string previousItemId = default; - ConversationItem item = default; + RealtimeItem item = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) @@ -87,9 +89,10 @@ internal static InternalRealtimeClientEventConversationItemCreate DeserializeInt } if (prop.NameEquals("item"u8)) { - item = ConversationItem.DeserializeConversationItem(prop.Value, options); + item = RealtimeItem.DeserializeRealtimeItem(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventConversationItemCreate(kind, eventId, additionalBinaryDataProperties, previousItemId, item); @@ -97,13 +100,14 @@ internal static InternalRealtimeClientEventConversationItemCreate DeserializeInt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventConversationItemCreate)} does not support writing '{options.Format}' format."); } @@ -111,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventConversationItemCreate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventConversationItemCreate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -127,21 +132,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventConversationItemCreate internalRealtimeClientEventConversationItemCreate) - { - if (internalRealtimeClientEventConversationItemCreate == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventConversationItemCreate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventConversationItemCreate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventConversationItemCreate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.cs index 22c21466f..5889ea2db 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemCreate.cs @@ -6,18 +6,18 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventConversationItemCreate : InternalRealtimeClientEvent { - public InternalRealtimeClientEventConversationItemCreate(ConversationItem item) : base(InternalRealtimeClientEventType.ConversationItemCreate) + public InternalRealtimeClientEventConversationItemCreate(RealtimeItem item) : base(InternalRealtimeClientEventType.ConversationItemCreate) { Argument.AssertNotNull(item, nameof(item)); Item = item; } - internal InternalRealtimeClientEventConversationItemCreate(InternalRealtimeClientEventType kind, string eventId, IDictionary additionalBinaryDataProperties, string previousItemId, ConversationItem item) : base(kind, eventId, additionalBinaryDataProperties) + internal InternalRealtimeClientEventConversationItemCreate(InternalRealtimeClientEventType kind, string eventId, IDictionary additionalBinaryDataProperties, string previousItemId, RealtimeItem item) : base(kind, eventId, additionalBinaryDataProperties) { PreviousItemId = previousItemId; Item = item; @@ -25,6 +25,6 @@ internal InternalRealtimeClientEventConversationItemCreate(InternalRealtimeClien public string PreviousItemId { get; set; } - public ConversationItem Item { get; } + public RealtimeItem Item { get; } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.Serialization.cs index 299927753..483042940 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventConversationItemDelete : IJsonModel { - internal InternalRealtimeClientEventConversationItemDelete() + internal InternalRealtimeClientEventConversationItemDelete() : this(InternalRealtimeClientEventType.ConversationItemDelete, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Jso writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventConversationItemDelete IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventConversationItemDelete)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -79,6 +81,7 @@ internal static InternalRealtimeClientEventConversationItemDelete DeserializeInt itemId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventConversationItemDelete(kind, eventId, additionalBinaryDataProperties, itemId); @@ -86,13 +89,14 @@ internal static InternalRealtimeClientEventConversationItemDelete DeserializeInt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventConversationItemDelete)} does not support writing '{options.Format}' format."); } @@ -100,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventConversationItemDelete IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventConversationItemDelete)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,21 +121,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventConversationItemDelete internalRealtimeClientEventConversationItemDelete) - { - if (internalRealtimeClientEventConversationItemDelete == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventConversationItemDelete, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventConversationItemDelete(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventConversationItemDelete(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.cs index a0db8bcba..d3526ec91 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemDelete.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventConversationItemDelete : InternalRealtimeClientEvent { diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemRetrieve.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemRetrieve.Serialization.cs new file mode 100644 index 000000000..bcc53f91b --- /dev/null +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemRetrieve.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeClientEventConversationItemRetrieve : IJsonModel + { + internal InternalRealtimeClientEventConversationItemRetrieve() : this(InternalRealtimeClientEventType.ConversationItemRetrieve, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeClientEventConversationItemRetrieve)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + } + + InternalRealtimeClientEventConversationItemRetrieve IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventConversationItemRetrieve)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeClientEventConversationItemRetrieve)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeClientEventConversationItemRetrieve(document.RootElement, options); + } + + internal static InternalRealtimeClientEventConversationItemRetrieve DeserializeInternalRealtimeClientEventConversationItemRetrieve(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeClientEventType kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalRealtimeClientEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeClientEventConversationItemRetrieve(kind, eventId, additionalBinaryDataProperties, itemId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeClientEventConversationItemRetrieve)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeClientEventConversationItemRetrieve IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventConversationItemRetrieve)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeClientEventConversationItemRetrieve(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeClientEventConversationItemRetrieve)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemRetrieve.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemRetrieve.cs new file mode 100644 index 000000000..2ecb43ce7 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemRetrieve.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeClientEventConversationItemRetrieve : InternalRealtimeClientEvent + { + public InternalRealtimeClientEventConversationItemRetrieve(string itemId) : base(InternalRealtimeClientEventType.ConversationItemRetrieve) + { + Argument.AssertNotNull(itemId, nameof(itemId)); + + ItemId = itemId; + } + + internal InternalRealtimeClientEventConversationItemRetrieve(InternalRealtimeClientEventType kind, string eventId, IDictionary additionalBinaryDataProperties, string itemId) : base(kind, eventId, additionalBinaryDataProperties) + { + ItemId = itemId; + } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.Serialization.cs index 472d16249..3b9f0b0bf 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventConversationItemTruncate : IJsonModel { - internal InternalRealtimeClientEventConversationItemTruncate() + internal InternalRealtimeClientEventConversationItemTruncate() : this(InternalRealtimeClientEventType.ConversationItemTruncate, null, null, null, default, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8J writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventConversationItemTruncate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventConversationItemTruncate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,6 +103,7 @@ internal static InternalRealtimeClientEventConversationItemTruncate DeserializeI audioEndMs = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventConversationItemTruncate( @@ -114,13 +117,14 @@ internal static InternalRealtimeClientEventConversationItemTruncate DeserializeI BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventConversationItemTruncate)} does not support writing '{options.Format}' format."); } @@ -128,6 +132,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventConversationItemTruncate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventConversationItemTruncate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +149,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventConversationItemTruncate internalRealtimeClientEventConversationItemTruncate) - { - if (internalRealtimeClientEventConversationItemTruncate == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventConversationItemTruncate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventConversationItemTruncate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventConversationItemTruncate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.cs b/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.cs index 89f7e749a..740528269 100644 --- a/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.cs +++ b/src/Generated/Models/InternalRealtimeClientEventConversationItemTruncate.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventConversationItemTruncate : InternalRealtimeClientEvent { diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.Serialization.cs index d6e048071..433955967 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventInputAudioBufferAppend : IJsonModel { - internal InternalRealtimeClientEventInputAudioBufferAppend() + internal InternalRealtimeClientEventInputAudioBufferAppend() : this(InternalRealtimeClientEventType.InputAudioBufferAppend, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Jso writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventInputAudioBufferAppend IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventInputAudioBufferAppend)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -79,6 +81,7 @@ internal static InternalRealtimeClientEventInputAudioBufferAppend DeserializeInt audio = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventInputAudioBufferAppend(kind, eventId, additionalBinaryDataProperties, audio); @@ -86,13 +89,14 @@ internal static InternalRealtimeClientEventInputAudioBufferAppend DeserializeInt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventInputAudioBufferAppend)} does not support writing '{options.Format}' format."); } @@ -100,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventInputAudioBufferAppend IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventInputAudioBufferAppend)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,21 +121,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventInputAudioBufferAppend internalRealtimeClientEventInputAudioBufferAppend) - { - if (internalRealtimeClientEventInputAudioBufferAppend == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventInputAudioBufferAppend, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventInputAudioBufferAppend(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventInputAudioBufferAppend(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.cs index 0dab151c5..32b1bd745 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferAppend.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventInputAudioBufferAppend : InternalRealtimeClientEvent { diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.Serialization.cs index 773c850b9..a80746645 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventInputAudioBufferClear : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8Json writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventInputAudioBufferClear IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventInputAudioBufferClear)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -64,6 +66,7 @@ internal static InternalRealtimeClientEventInputAudioBufferClear DeserializeInte eventId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventInputAudioBufferClear(kind, eventId, additionalBinaryDataProperties); @@ -71,13 +74,14 @@ internal static InternalRealtimeClientEventInputAudioBufferClear DeserializeInte BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventInputAudioBufferClear)} does not support writing '{options.Format}' format."); } @@ -85,6 +89,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventInputAudioBufferClear IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventInputAudioBufferClear)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,21 +106,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventInputAudioBufferClear internalRealtimeClientEventInputAudioBufferClear) - { - if (internalRealtimeClientEventInputAudioBufferClear == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventInputAudioBufferClear, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventInputAudioBufferClear(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventInputAudioBufferClear(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.cs index 0838f1d6f..3a176e795 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferClear.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventInputAudioBufferClear : InternalRealtimeClientEvent { - public InternalRealtimeClientEventInputAudioBufferClear() : base(InternalRealtimeClientEventType.InputAudioBufferClear) + public InternalRealtimeClientEventInputAudioBufferClear() : this(InternalRealtimeClientEventType.InputAudioBufferClear, null, null) { } diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.Serialization.cs index 02658a229..855b5a86f 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventInputAudioBufferCommit : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8Jso writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventInputAudioBufferCommit IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventInputAudioBufferCommit)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -64,6 +66,7 @@ internal static InternalRealtimeClientEventInputAudioBufferCommit DeserializeInt eventId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventInputAudioBufferCommit(kind, eventId, additionalBinaryDataProperties); @@ -71,13 +74,14 @@ internal static InternalRealtimeClientEventInputAudioBufferCommit DeserializeInt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventInputAudioBufferCommit)} does not support writing '{options.Format}' format."); } @@ -85,6 +89,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventInputAudioBufferCommit IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventInputAudioBufferCommit)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,21 +106,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventInputAudioBufferCommit internalRealtimeClientEventInputAudioBufferCommit) - { - if (internalRealtimeClientEventInputAudioBufferCommit == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventInputAudioBufferCommit, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventInputAudioBufferCommit(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventInputAudioBufferCommit(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.cs b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.cs index 5e13b96b1..a1d06b8fb 100644 --- a/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.cs +++ b/src/Generated/Models/InternalRealtimeClientEventInputAudioBufferCommit.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventInputAudioBufferCommit : InternalRealtimeClientEvent { - public InternalRealtimeClientEventInputAudioBufferCommit() : base(InternalRealtimeClientEventType.InputAudioBufferCommit) + public InternalRealtimeClientEventInputAudioBufferCommit() : this(InternalRealtimeClientEventType.InputAudioBufferCommit, null, null) { } diff --git a/src/Generated/Models/InternalRealtimeClientEventOutputAudioBufferClear.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventOutputAudioBufferClear.Serialization.cs new file mode 100644 index 000000000..ced0b2f8f --- /dev/null +++ b/src/Generated/Models/InternalRealtimeClientEventOutputAudioBufferClear.Serialization.cs @@ -0,0 +1,110 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeClientEventOutputAudioBufferClear : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeClientEventOutputAudioBufferClear)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalRealtimeClientEventOutputAudioBufferClear IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventOutputAudioBufferClear)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeClientEventOutputAudioBufferClear)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeClientEventOutputAudioBufferClear(document.RootElement, options); + } + + internal static InternalRealtimeClientEventOutputAudioBufferClear DeserializeInternalRealtimeClientEventOutputAudioBufferClear(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeClientEventType kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalRealtimeClientEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeClientEventOutputAudioBufferClear(kind, eventId, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeClientEventOutputAudioBufferClear)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeClientEventOutputAudioBufferClear IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventOutputAudioBufferClear)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeClientEventOutputAudioBufferClear(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeClientEventOutputAudioBufferClear)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeClientEventOutputAudioBufferClear.cs b/src/Generated/Models/InternalRealtimeClientEventOutputAudioBufferClear.cs new file mode 100644 index 000000000..d0c3d904a --- /dev/null +++ b/src/Generated/Models/InternalRealtimeClientEventOutputAudioBufferClear.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeClientEventOutputAudioBufferClear : InternalRealtimeClientEvent + { + public InternalRealtimeClientEventOutputAudioBufferClear() : this(InternalRealtimeClientEventType.OutputAudioBufferClear, null, null) + { + } + + internal InternalRealtimeClientEventOutputAudioBufferClear(InternalRealtimeClientEventType kind, string eventId, IDictionary additionalBinaryDataProperties) : base(kind, eventId, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalRealtimeClientEventResponseCancel.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventResponseCancel.Serialization.cs index b3bfbd067..99b4065dd 100644 --- a/src/Generated/Models/InternalRealtimeClientEventResponseCancel.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventResponseCancel.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventResponseCancel : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventResponseCancel IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventResponseCancel)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -75,6 +77,7 @@ internal static InternalRealtimeClientEventResponseCancel DeserializeInternalRea responseId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventResponseCancel(kind, eventId, additionalBinaryDataProperties, responseId); @@ -82,13 +85,14 @@ internal static InternalRealtimeClientEventResponseCancel DeserializeInternalRea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventResponseCancel)} does not support writing '{options.Format}' format."); } @@ -96,6 +100,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventResponseCancel IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventResponseCancel)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -112,21 +117,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventResponseCancel internalRealtimeClientEventResponseCancel) - { - if (internalRealtimeClientEventResponseCancel == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventResponseCancel, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventResponseCancel(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventResponseCancel(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventResponseCancel.cs b/src/Generated/Models/InternalRealtimeClientEventResponseCancel.cs index 3694fdd28..0b8d738a0 100644 --- a/src/Generated/Models/InternalRealtimeClientEventResponseCancel.cs +++ b/src/Generated/Models/InternalRealtimeClientEventResponseCancel.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventResponseCancel : InternalRealtimeClientEvent { - public InternalRealtimeClientEventResponseCancel() : base(InternalRealtimeClientEventType.ResponseCancel) + public InternalRealtimeClientEventResponseCancel() : this(InternalRealtimeClientEventType.ResponseCancel, null, null, null) { } diff --git a/src/Generated/Models/InternalRealtimeClientEventResponseCreate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventResponseCreate.Serialization.cs index fcbe3d7ad..c6828f2a7 100644 --- a/src/Generated/Models/InternalRealtimeClientEventResponseCreate.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventResponseCreate.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventResponseCreate : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventResponseCreate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventResponseCreate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -79,6 +81,7 @@ internal static InternalRealtimeClientEventResponseCreate DeserializeInternalRea response = ConversationResponseOptions.DeserializeConversationResponseOptions(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventResponseCreate(kind, eventId, additionalBinaryDataProperties, response); @@ -86,13 +89,14 @@ internal static InternalRealtimeClientEventResponseCreate DeserializeInternalRea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventResponseCreate)} does not support writing '{options.Format}' format."); } @@ -100,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventResponseCreate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventResponseCreate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,21 +121,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventResponseCreate internalRealtimeClientEventResponseCreate) - { - if (internalRealtimeClientEventResponseCreate == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventResponseCreate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventResponseCreate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventResponseCreate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventResponseCreate.cs b/src/Generated/Models/InternalRealtimeClientEventResponseCreate.cs index 9c358bf6e..53a8c152b 100644 --- a/src/Generated/Models/InternalRealtimeClientEventResponseCreate.cs +++ b/src/Generated/Models/InternalRealtimeClientEventResponseCreate.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventResponseCreate : InternalRealtimeClientEvent { - public InternalRealtimeClientEventResponseCreate() : base(InternalRealtimeClientEventType.ResponseCreate) + public InternalRealtimeClientEventResponseCreate() : this(InternalRealtimeClientEventType.ResponseCreate, null, null, null) { } diff --git a/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.Serialization.cs index 3fbb40a6c..483391424 100644 --- a/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventSessionUpdate : IJsonModel { - internal InternalRealtimeClientEventSessionUpdate() + internal InternalRealtimeClientEventSessionUpdate() : this(InternalRealtimeClientEventType.SessionUpdate, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEventSessionUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventSessionUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -79,6 +81,7 @@ internal static InternalRealtimeClientEventSessionUpdate DeserializeInternalReal session = ConversationSessionOptions.DeserializeConversationSessionOptions(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeClientEventSessionUpdate(kind, eventId, additionalBinaryDataProperties, session); @@ -86,13 +89,14 @@ internal static InternalRealtimeClientEventSessionUpdate DeserializeInternalReal BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEventSessionUpdate)} does not support writing '{options.Format}' format."); } @@ -100,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEventSessionUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventSessionUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,21 +121,5 @@ protected override InternalRealtimeClientEvent PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeClientEventSessionUpdate internalRealtimeClientEventSessionUpdate) - { - if (internalRealtimeClientEventSessionUpdate == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeClientEventSessionUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeClientEventSessionUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeClientEventSessionUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.cs b/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.cs index 8787b40d4..e126ca605 100644 --- a/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.cs +++ b/src/Generated/Models/InternalRealtimeClientEventSessionUpdate.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeClientEventSessionUpdate : InternalRealtimeClientEvent { diff --git a/src/Generated/Models/InternalRealtimeClientEventTranscriptionSessionUpdate.Serialization.cs b/src/Generated/Models/InternalRealtimeClientEventTranscriptionSessionUpdate.Serialization.cs new file mode 100644 index 000000000..9fda7c75f --- /dev/null +++ b/src/Generated/Models/InternalRealtimeClientEventTranscriptionSessionUpdate.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeClientEventTranscriptionSessionUpdate : IJsonModel + { + internal InternalRealtimeClientEventTranscriptionSessionUpdate() : this(InternalRealtimeClientEventType.TranscriptionSessionUpdate, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeClientEventTranscriptionSessionUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("session") != true) + { + writer.WritePropertyName("session"u8); + writer.WriteObjectValue(Session, options); + } + } + + InternalRealtimeClientEventTranscriptionSessionUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeClientEventTranscriptionSessionUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeClientEventTranscriptionSessionUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeClientEventTranscriptionSessionUpdate(document.RootElement, options); + } + + internal static InternalRealtimeClientEventTranscriptionSessionUpdate DeserializeInternalRealtimeClientEventTranscriptionSessionUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeClientEventType kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + TranscriptionSessionOptions session = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalRealtimeClientEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("session"u8)) + { + session = TranscriptionSessionOptions.DeserializeTranscriptionSessionOptions(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeClientEventTranscriptionSessionUpdate(kind, eventId, additionalBinaryDataProperties, session); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeClientEventTranscriptionSessionUpdate)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeClientEventTranscriptionSessionUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeClientEventTranscriptionSessionUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeClientEventTranscriptionSessionUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeClientEventTranscriptionSessionUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeClientEventTranscriptionSessionUpdate.cs b/src/Generated/Models/InternalRealtimeClientEventTranscriptionSessionUpdate.cs new file mode 100644 index 000000000..86603e2e9 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeClientEventTranscriptionSessionUpdate.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeClientEventTranscriptionSessionUpdate : InternalRealtimeClientEvent + { + public InternalRealtimeClientEventTranscriptionSessionUpdate(TranscriptionSessionOptions session) : base(InternalRealtimeClientEventType.TranscriptionSessionUpdate) + { + Argument.AssertNotNull(session, nameof(session)); + + Session = session; + } + + internal InternalRealtimeClientEventTranscriptionSessionUpdate(InternalRealtimeClientEventType kind, string eventId, IDictionary additionalBinaryDataProperties, TranscriptionSessionOptions session) : base(kind, eventId, additionalBinaryDataProperties) + { + Session = session; + } + + public TranscriptionSessionOptions Session { get; } + } +} diff --git a/src/Generated/Models/InternalRealtimeClientEventType.cs b/src/Generated/Models/InternalRealtimeClientEventType.cs index c59b899e9..85c33c9fe 100644 --- a/src/Generated/Models/InternalRealtimeClientEventType.cs +++ b/src/Generated/Models/InternalRealtimeClientEventType.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal readonly partial struct InternalRealtimeClientEventType : IEquatable { @@ -15,11 +15,14 @@ namespace OpenAI.RealtimeConversation private const string InputAudioBufferAppendValue = "input_audio_buffer.append"; private const string InputAudioBufferCommitValue = "input_audio_buffer.commit"; private const string InputAudioBufferClearValue = "input_audio_buffer.clear"; + private const string OutputAudioBufferClearValue = "output_audio_buffer.clear"; private const string ConversationItemCreateValue = "conversation.item.create"; - private const string ConversationItemDeleteValue = "conversation.item.delete"; + private const string ConversationItemRetrieveValue = "conversation.item.retrieve"; private const string ConversationItemTruncateValue = "conversation.item.truncate"; + private const string ConversationItemDeleteValue = "conversation.item.delete"; private const string ResponseCreateValue = "response.create"; private const string ResponseCancelValue = "response.cancel"; + private const string TranscriptionSessionUpdateValue = "transcription_session.update"; public InternalRealtimeClientEventType(string value) { @@ -28,23 +31,29 @@ public InternalRealtimeClientEventType(string value) _value = value; } - public static InternalRealtimeClientEventType SessionUpdate { get; } = new InternalRealtimeClientEventType(SessionUpdateValue); + internal static InternalRealtimeClientEventType SessionUpdate { get; } = new InternalRealtimeClientEventType(SessionUpdateValue); + + internal static InternalRealtimeClientEventType InputAudioBufferAppend { get; } = new InternalRealtimeClientEventType(InputAudioBufferAppendValue); + + internal static InternalRealtimeClientEventType InputAudioBufferCommit { get; } = new InternalRealtimeClientEventType(InputAudioBufferCommitValue); + + internal static InternalRealtimeClientEventType InputAudioBufferClear { get; } = new InternalRealtimeClientEventType(InputAudioBufferClearValue); - public static InternalRealtimeClientEventType InputAudioBufferAppend { get; } = new InternalRealtimeClientEventType(InputAudioBufferAppendValue); + internal static InternalRealtimeClientEventType OutputAudioBufferClear { get; } = new InternalRealtimeClientEventType(OutputAudioBufferClearValue); - public static InternalRealtimeClientEventType InputAudioBufferCommit { get; } = new InternalRealtimeClientEventType(InputAudioBufferCommitValue); + internal static InternalRealtimeClientEventType ConversationItemCreate { get; } = new InternalRealtimeClientEventType(ConversationItemCreateValue); - public static InternalRealtimeClientEventType InputAudioBufferClear { get; } = new InternalRealtimeClientEventType(InputAudioBufferClearValue); + internal static InternalRealtimeClientEventType ConversationItemRetrieve { get; } = new InternalRealtimeClientEventType(ConversationItemRetrieveValue); - public static InternalRealtimeClientEventType ConversationItemCreate { get; } = new InternalRealtimeClientEventType(ConversationItemCreateValue); + internal static InternalRealtimeClientEventType ConversationItemTruncate { get; } = new InternalRealtimeClientEventType(ConversationItemTruncateValue); - public static InternalRealtimeClientEventType ConversationItemDelete { get; } = new InternalRealtimeClientEventType(ConversationItemDeleteValue); + internal static InternalRealtimeClientEventType ConversationItemDelete { get; } = new InternalRealtimeClientEventType(ConversationItemDeleteValue); - public static InternalRealtimeClientEventType ConversationItemTruncate { get; } = new InternalRealtimeClientEventType(ConversationItemTruncateValue); + internal static InternalRealtimeClientEventType ResponseCreate { get; } = new InternalRealtimeClientEventType(ResponseCreateValue); - public static InternalRealtimeClientEventType ResponseCreate { get; } = new InternalRealtimeClientEventType(ResponseCreateValue); + internal static InternalRealtimeClientEventType ResponseCancel { get; } = new InternalRealtimeClientEventType(ResponseCancelValue); - public static InternalRealtimeClientEventType ResponseCancel { get; } = new InternalRealtimeClientEventType(ResponseCancelValue); + internal static InternalRealtimeClientEventType TranscriptionSessionUpdate { get; } = new InternalRealtimeClientEventType(TranscriptionSessionUpdateValue); public static bool operator ==(InternalRealtimeClientEventType left, InternalRealtimeClientEventType right) => left.Equals(right); diff --git a/src/Generated/Models/InternalRealtimeConversationResponseItem.Serialization.cs b/src/Generated/Models/InternalRealtimeConversationResponseItem.Serialization.cs deleted file mode 100644 index ae49f8109..000000000 --- a/src/Generated/Models/InternalRealtimeConversationResponseItem.Serialization.cs +++ /dev/null @@ -1,160 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - [PersistableModelProxy(typeof(UnknownRealtimeResponseItem))] - internal abstract partial class InternalRealtimeConversationResponseItem : IJsonModel - { - internal InternalRealtimeConversationResponseItem() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalRealtimeConversationResponseItem)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("object") != true) - { - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("id") != true) - { - if (Optional.IsDefined(Id)) - { - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - } - else - { - writer.WriteNull("id"u8); - } - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalRealtimeConversationResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalRealtimeConversationResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalRealtimeConversationResponseItem)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalRealtimeConversationResponseItem(document.RootElement, options); - } - - internal static InternalRealtimeConversationResponseItem DeserializeInternalRealtimeConversationResponseItem(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - if (element.TryGetProperty("type"u8, out JsonElement discriminator)) - { - switch (discriminator.GetString()) - { - case "message": - return InternalRealtimeResponseMessageItem.DeserializeInternalRealtimeResponseMessageItem(element, options); - case "function_call": - return InternalRealtimeResponseFunctionCallItem.DeserializeInternalRealtimeResponseFunctionCallItem(element, options); - case "function_call_output": - return InternalRealtimeResponseFunctionCallOutputItem.DeserializeInternalRealtimeResponseFunctionCallOutputItem(element, options); - } - } - return UnknownRealtimeResponseItem.DeserializeUnknownRealtimeResponseItem(element, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalRealtimeConversationResponseItem)} does not support writing '{options.Format}' format."); - } - } - - InternalRealtimeConversationResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalRealtimeConversationResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalRealtimeConversationResponseItem(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalRealtimeConversationResponseItem)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeConversationResponseItem internalRealtimeConversationResponseItem) - { - if (internalRealtimeConversationResponseItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeConversationResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeConversationResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeConversationResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalRealtimeConversationResponseItem.cs b/src/Generated/Models/InternalRealtimeConversationResponseItem.cs deleted file mode 100644 index c9ba6aa6e..000000000 --- a/src/Generated/Models/InternalRealtimeConversationResponseItem.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.RealtimeConversation -{ - internal abstract partial class InternalRealtimeConversationResponseItem - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected InternalRealtimeConversationResponseItem(InternalRealtimeItemType @type, string id) - { - Type = @type; - Id = id; - } - - internal InternalRealtimeConversationResponseItem(InternalRealtimeConversationResponseItemObject @object, InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties) - { - Object = @object; - Type = @type; - Id = id; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalRealtimeConversationResponseItemObject Object { get; } = "realtime.item"; - - internal InternalRealtimeItemType Type { get; set; } - - public string Id { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalRealtimeConversationResponseItemObject.cs b/src/Generated/Models/InternalRealtimeConversationResponseItemObject.cs deleted file mode 100644 index 1d2497d7c..000000000 --- a/src/Generated/Models/InternalRealtimeConversationResponseItemObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - internal readonly partial struct InternalRealtimeConversationResponseItemObject : IEquatable - { - private readonly string _value; - private const string RealtimeItemValue = "realtime.item"; - - public InternalRealtimeConversationResponseItemObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRealtimeConversationResponseItemObject RealtimeItem { get; } = new InternalRealtimeConversationResponseItemObject(RealtimeItemValue); - - public static bool operator ==(InternalRealtimeConversationResponseItemObject left, InternalRealtimeConversationResponseItemObject right) => left.Equals(right); - - public static bool operator !=(InternalRealtimeConversationResponseItemObject left, InternalRealtimeConversationResponseItemObject right) => !left.Equals(right); - - public static implicit operator InternalRealtimeConversationResponseItemObject(string value) => new InternalRealtimeConversationResponseItemObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRealtimeConversationResponseItemObject other && Equals(other); - - public bool Equals(InternalRealtimeConversationResponseItemObject 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/InternalRealtimeItemType.cs b/src/Generated/Models/InternalRealtimeItemType.cs index 23bc8f6eb..c803cd0e0 100644 --- a/src/Generated/Models/InternalRealtimeItemType.cs +++ b/src/Generated/Models/InternalRealtimeItemType.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal readonly partial struct InternalRealtimeItemType : IEquatable { @@ -22,11 +22,11 @@ public InternalRealtimeItemType(string value) _value = value; } - public static InternalRealtimeItemType Message { get; } = new InternalRealtimeItemType(MessageValue); + internal static InternalRealtimeItemType Message { get; } = new InternalRealtimeItemType(MessageValue); - public static InternalRealtimeItemType FunctionCall { get; } = new InternalRealtimeItemType(FunctionCallValue); + internal static InternalRealtimeItemType FunctionCall { get; } = new InternalRealtimeItemType(FunctionCallValue); - public static InternalRealtimeItemType FunctionCallOutput { get; } = new InternalRealtimeItemType(FunctionCallOutputValue); + internal static InternalRealtimeItemType FunctionCallOutput { get; } = new InternalRealtimeItemType(FunctionCallOutputValue); public static bool operator ==(InternalRealtimeItemType left, InternalRealtimeItemType right) => left.Equals(right); diff --git a/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.Serialization.cs index becafcca8..3162950dc 100644 --- a/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestAssistantMessageItem : IJsonModel { - internal InternalRealtimeRequestAssistantMessageItem() + internal InternalRealtimeRequestAssistantMessageItem() : this(default, null, null, ConversationMessageRole.Assistant, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,7 +47,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestAssistantMessageItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeRequestAssistantMessageItem)JsonModelCreateCore(ref reader, options); - protected override ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -63,7 +65,7 @@ internal static InternalRealtimeRequestAssistantMessageItem DeserializeInternalR { return null; } - InternalRealtimeItemType @type = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); ConversationMessageRole role = default; @@ -73,7 +75,7 @@ internal static InternalRealtimeRequestAssistantMessageItem DeserializeInternalR { if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -105,10 +107,11 @@ internal static InternalRealtimeRequestAssistantMessageItem DeserializeInternalR content = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestAssistantMessageItem( - @type, + kind, id, additionalBinaryDataProperties, role, @@ -118,13 +121,14 @@ internal static InternalRealtimeRequestAssistantMessageItem DeserializeInternalR BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestAssistantMessageItem)} does not support writing '{options.Format}' format."); } @@ -132,7 +136,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestAssistantMessageItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeRequestAssistantMessageItem)PersistableModelCreateCore(data, options); - protected override ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -148,21 +153,5 @@ protected override ConversationItem PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeRequestAssistantMessageItem internalRealtimeRequestAssistantMessageItem) - { - if (internalRealtimeRequestAssistantMessageItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeRequestAssistantMessageItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeRequestAssistantMessageItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeRequestAssistantMessageItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.cs b/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.cs index a3fa292b3..d20534890 100644 --- a/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.cs +++ b/src/Generated/Models/InternalRealtimeRequestAssistantMessageItem.cs @@ -4,14 +4,16 @@ using System; using System.Collections.Generic; +using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestAssistantMessageItem : InternalRealtimeRequestMessageItem { - internal InternalRealtimeRequestAssistantMessageItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status, IList content) : base(@type, id, additionalBinaryDataProperties, role, status) + internal InternalRealtimeRequestAssistantMessageItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status, IList content) : base(kind, id, additionalBinaryDataProperties, role, status) { - Content = content; + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); } } } diff --git a/src/Generated/Models/InternalRealtimeRequestAudioContentPart.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestAudioContentPart.Serialization.cs index 717e79492..8ec9587e9 100644 --- a/src/Generated/Models/InternalRealtimeRequestAudioContentPart.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestAudioContentPart.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestAudioContentPart : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -28,11 +29,6 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(InternalRealtimeRequestAudioContentPart)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } if (Optional.IsDefined(InternalTranscriptValue) && _additionalBinaryDataProperties?.ContainsKey("transcript") != true) { writer.WritePropertyName("transcript"u8); @@ -42,6 +38,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestAudioContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeRequestAudioContentPart)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ConversationContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +58,6 @@ internal static InternalRealtimeRequestAudioContentPart DeserializeInternalRealt } ConversationContentPartKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string @type = "input_audio"; string internalTranscriptValue = default; foreach (var prop in element.EnumerateObject()) { @@ -70,30 +66,27 @@ internal static InternalRealtimeRequestAudioContentPart DeserializeInternalRealt kind = new ConversationContentPartKind(prop.Value.GetString()); continue; } - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } if (prop.NameEquals("transcript"u8)) { internalTranscriptValue = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeRequestAudioContentPart(kind, additionalBinaryDataProperties, @type, internalTranscriptValue); + return new InternalRealtimeRequestAudioContentPart(kind, additionalBinaryDataProperties, internalTranscriptValue); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestAudioContentPart)} does not support writing '{options.Format}' format."); } @@ -101,6 +94,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestAudioContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeRequestAudioContentPart)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ConversationContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -117,21 +111,5 @@ protected override ConversationContentPart PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeRequestAudioContentPart internalRealtimeRequestAudioContentPart) - { - if (internalRealtimeRequestAudioContentPart == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeRequestAudioContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeRequestAudioContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeRequestAudioContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeRequestAudioContentPart.cs b/src/Generated/Models/InternalRealtimeRequestAudioContentPart.cs index b2d6153b0..bedb1c1cf 100644 --- a/src/Generated/Models/InternalRealtimeRequestAudioContentPart.cs +++ b/src/Generated/Models/InternalRealtimeRequestAudioContentPart.cs @@ -5,20 +5,17 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestAudioContentPart : ConversationContentPart { - public InternalRealtimeRequestAudioContentPart() : base(ConversationContentPartKind.InputAudio) + public InternalRealtimeRequestAudioContentPart() : this(ConversationContentPartKind.InputAudio, null, null) { } - internal InternalRealtimeRequestAudioContentPart(ConversationContentPartKind kind, IDictionary additionalBinaryDataProperties, string @type, string internalTranscriptValue) : base(kind, additionalBinaryDataProperties) + internal InternalRealtimeRequestAudioContentPart(ConversationContentPartKind kind, IDictionary additionalBinaryDataProperties, string internalTranscriptValue) : base(kind, additionalBinaryDataProperties) { - Type = @type; InternalTranscriptValue = internalTranscriptValue; } - - internal string Type { get; set; } = "input_audio"; } } diff --git a/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.Serialization.cs index 0941a66dd..6e02e0ede 100644 --- a/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestFunctionCallItem : IJsonModel { - internal InternalRealtimeRequestFunctionCallItem() + internal InternalRealtimeRequestFunctionCallItem() : this(InternalRealtimeItemType.FunctionCall, null, null, null, null, null, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,7 +57,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestFunctionCallItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeRequestFunctionCallItem)JsonModelCreateCore(ref reader, options); - protected override ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -73,7 +75,7 @@ internal static InternalRealtimeRequestFunctionCallItem DeserializeInternalRealt { return null; } - InternalRealtimeItemType @type = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string name = default; @@ -84,7 +86,7 @@ internal static InternalRealtimeRequestFunctionCallItem DeserializeInternalRealt { if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -116,10 +118,11 @@ internal static InternalRealtimeRequestFunctionCallItem DeserializeInternalRealt status = new ConversationItemStatus(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestFunctionCallItem( - @type, + kind, id, additionalBinaryDataProperties, name, @@ -130,13 +133,14 @@ internal static InternalRealtimeRequestFunctionCallItem DeserializeInternalRealt BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestFunctionCallItem)} does not support writing '{options.Format}' format."); } @@ -144,7 +148,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestFunctionCallItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeRequestFunctionCallItem)PersistableModelCreateCore(data, options); - protected override ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -160,21 +165,5 @@ protected override ConversationItem PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeRequestFunctionCallItem internalRealtimeRequestFunctionCallItem) - { - if (internalRealtimeRequestFunctionCallItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeRequestFunctionCallItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeRequestFunctionCallItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeRequestFunctionCallItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.cs b/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.cs index da0da8dbe..1d51d9eea 100644 --- a/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.cs +++ b/src/Generated/Models/InternalRealtimeRequestFunctionCallItem.cs @@ -6,9 +6,9 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeRequestFunctionCallItem : ConversationItem + internal partial class InternalRealtimeRequestFunctionCallItem : RealtimeItem { public InternalRealtimeRequestFunctionCallItem(string name, string callId, string arguments) : base(InternalRealtimeItemType.FunctionCall) { @@ -21,7 +21,7 @@ public InternalRealtimeRequestFunctionCallItem(string name, string callId, strin Arguments = arguments; } - internal InternalRealtimeRequestFunctionCallItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, string name, string callId, string arguments, ConversationItemStatus? status) : base(@type, id, additionalBinaryDataProperties) + internal InternalRealtimeRequestFunctionCallItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, string name, string callId, string arguments, ConversationItemStatus? status) : base(kind, id, additionalBinaryDataProperties) { Name = name; CallId = callId; diff --git a/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.Serialization.cs index fd148021b..40b000800 100644 --- a/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestFunctionCallOutputItem : IJsonModel { - internal InternalRealtimeRequestFunctionCallOutputItem() + internal InternalRealtimeRequestFunctionCallOutputItem() : this(InternalRealtimeItemType.FunctionCallOutput, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,7 +47,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestFunctionCallOutputItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeRequestFunctionCallOutputItem)JsonModelCreateCore(ref reader, options); - protected override ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -63,7 +65,7 @@ internal static InternalRealtimeRequestFunctionCallOutputItem DeserializeInterna { return null; } - InternalRealtimeItemType @type = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string callId = default; @@ -72,7 +74,7 @@ internal static InternalRealtimeRequestFunctionCallOutputItem DeserializeInterna { if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -90,20 +92,22 @@ internal static InternalRealtimeRequestFunctionCallOutputItem DeserializeInterna output = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeRequestFunctionCallOutputItem(@type, id, additionalBinaryDataProperties, callId, output); + return new InternalRealtimeRequestFunctionCallOutputItem(kind, id, additionalBinaryDataProperties, callId, output); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestFunctionCallOutputItem)} does not support writing '{options.Format}' format."); } @@ -111,7 +115,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestFunctionCallOutputItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeRequestFunctionCallOutputItem)PersistableModelCreateCore(data, options); - protected override ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -127,21 +132,5 @@ protected override ConversationItem PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeRequestFunctionCallOutputItem internalRealtimeRequestFunctionCallOutputItem) - { - if (internalRealtimeRequestFunctionCallOutputItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeRequestFunctionCallOutputItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeRequestFunctionCallOutputItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeRequestFunctionCallOutputItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.cs b/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.cs index 1a65bed0c..4b3eba320 100644 --- a/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.cs +++ b/src/Generated/Models/InternalRealtimeRequestFunctionCallOutputItem.cs @@ -6,9 +6,9 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeRequestFunctionCallOutputItem : ConversationItem + internal partial class InternalRealtimeRequestFunctionCallOutputItem : RealtimeItem { public InternalRealtimeRequestFunctionCallOutputItem(string callId, string output) : base(InternalRealtimeItemType.FunctionCallOutput) { @@ -19,7 +19,7 @@ public InternalRealtimeRequestFunctionCallOutputItem(string callId, string outpu Output = output; } - internal InternalRealtimeRequestFunctionCallOutputItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, string callId, string output) : base(@type, id, additionalBinaryDataProperties) + internal InternalRealtimeRequestFunctionCallOutputItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, string callId, string output) : base(kind, id, additionalBinaryDataProperties) { CallId = callId; Output = output; diff --git a/src/Generated/Models/InternalRealtimeRequestMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestMessageItem.Serialization.cs index 33ef849ee..48166759c 100644 --- a/src/Generated/Models/InternalRealtimeRequestMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestMessageItem.Serialization.cs @@ -3,16 +3,16 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestMessageItem : IJsonModel { - internal InternalRealtimeRequestMessageItem() + internal InternalRealtimeRequestMessageItem() : this(InternalRealtimeItemType.Message, null, null, default, default) { } @@ -23,6 +23,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -45,7 +46,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestMessageItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeRequestMessageItem)JsonModelCreateCore(ref reader, options); - protected override ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -79,13 +81,14 @@ internal static InternalRealtimeRequestMessageItem DeserializeInternalRealtimeRe BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestMessageItem)} does not support writing '{options.Format}' format."); } @@ -93,7 +96,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestMessageItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeRequestMessageItem)PersistableModelCreateCore(data, options); - protected override ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -109,21 +113,5 @@ protected override ConversationItem PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeRequestMessageItem internalRealtimeRequestMessageItem) - { - if (internalRealtimeRequestMessageItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeRequestMessageItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeRequestMessageItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeRequestMessageItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeRequestMessageItem.cs b/src/Generated/Models/InternalRealtimeRequestMessageItem.cs index c1b1befef..61ecdd872 100644 --- a/src/Generated/Models/InternalRealtimeRequestMessageItem.cs +++ b/src/Generated/Models/InternalRealtimeRequestMessageItem.cs @@ -5,16 +5,16 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeRequestMessageItem : ConversationItem + internal partial class InternalRealtimeRequestMessageItem : RealtimeItem { public InternalRealtimeRequestMessageItem(ConversationMessageRole role) : base(InternalRealtimeItemType.Message) { Role = role; } - internal InternalRealtimeRequestMessageItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status) : base(@type, id, additionalBinaryDataProperties) + internal InternalRealtimeRequestMessageItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status) : base(kind, id, additionalBinaryDataProperties) { Role = role; Status = status; diff --git a/src/Generated/Models/InternalRealtimeRequestSessionModality.cs b/src/Generated/Models/InternalRealtimeRequestSessionModality.cs index 2fd764039..497862c0b 100644 --- a/src/Generated/Models/InternalRealtimeRequestSessionModality.cs +++ b/src/Generated/Models/InternalRealtimeRequestSessionModality.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal readonly partial struct InternalRealtimeRequestSessionModality : IEquatable { @@ -21,9 +21,9 @@ public InternalRealtimeRequestSessionModality(string value) _value = value; } - public static InternalRealtimeRequestSessionModality Text { get; } = new InternalRealtimeRequestSessionModality(TextValue); + internal static InternalRealtimeRequestSessionModality Text { get; } = new InternalRealtimeRequestSessionModality(TextValue); - public static InternalRealtimeRequestSessionModality Audio { get; } = new InternalRealtimeRequestSessionModality(AudioValue); + internal static InternalRealtimeRequestSessionModality Audio { get; } = new InternalRealtimeRequestSessionModality(AudioValue); public static bool operator ==(InternalRealtimeRequestSessionModality left, InternalRealtimeRequestSessionModality right) => left.Equals(right); diff --git a/src/Generated/Models/InternalRealtimeRequestSessionModel.cs b/src/Generated/Models/InternalRealtimeRequestSessionModel.cs index b9a74844a..6c8ae3c93 100644 --- a/src/Generated/Models/InternalRealtimeRequestSessionModel.cs +++ b/src/Generated/Models/InternalRealtimeRequestSessionModel.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal readonly partial struct InternalRealtimeRequestSessionModel : IEquatable { @@ -24,15 +24,15 @@ public InternalRealtimeRequestSessionModel(string value) _value = value; } - public static InternalRealtimeRequestSessionModel Gpt4oRealtimePreview { get; } = new InternalRealtimeRequestSessionModel(Gpt4oRealtimePreviewValue); + internal static InternalRealtimeRequestSessionModel Gpt4oRealtimePreview { get; } = new InternalRealtimeRequestSessionModel(Gpt4oRealtimePreviewValue); - public static InternalRealtimeRequestSessionModel Gpt4oRealtimePreview20241001 { get; } = new InternalRealtimeRequestSessionModel(Gpt4oRealtimePreview20241001Value); + internal static InternalRealtimeRequestSessionModel Gpt4oRealtimePreview20241001 { get; } = new InternalRealtimeRequestSessionModel(Gpt4oRealtimePreview20241001Value); - public static InternalRealtimeRequestSessionModel Gpt4oRealtimePreview20241217 { get; } = new InternalRealtimeRequestSessionModel(Gpt4oRealtimePreview20241217Value); + internal static InternalRealtimeRequestSessionModel Gpt4oRealtimePreview20241217 { get; } = new InternalRealtimeRequestSessionModel(Gpt4oRealtimePreview20241217Value); - public static InternalRealtimeRequestSessionModel Gpt4oMiniRealtimePreview { get; } = new InternalRealtimeRequestSessionModel(Gpt4oMiniRealtimePreviewValue); + internal static InternalRealtimeRequestSessionModel Gpt4oMiniRealtimePreview { get; } = new InternalRealtimeRequestSessionModel(Gpt4oMiniRealtimePreviewValue); - public static InternalRealtimeRequestSessionModel Gpt4oMiniRealtimePreview20241217 { get; } = new InternalRealtimeRequestSessionModel(Gpt4oMiniRealtimePreview20241217Value); + internal static InternalRealtimeRequestSessionModel Gpt4oMiniRealtimePreview20241217 { get; } = new InternalRealtimeRequestSessionModel(Gpt4oMiniRealtimePreview20241217Value); public static bool operator ==(InternalRealtimeRequestSessionModel left, InternalRealtimeRequestSessionModel right) => left.Equals(right); diff --git a/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.Serialization.cs index 46c7d7a1b..81cd0edc8 100644 --- a/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestSystemMessageItem : IJsonModel { - internal InternalRealtimeRequestSystemMessageItem() + internal InternalRealtimeRequestSystemMessageItem() : this(default, null, null, ConversationMessageRole.System, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,7 +47,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestSystemMessageItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeRequestSystemMessageItem)JsonModelCreateCore(ref reader, options); - protected override ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -63,7 +65,7 @@ internal static InternalRealtimeRequestSystemMessageItem DeserializeInternalReal { return null; } - InternalRealtimeItemType @type = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); ConversationMessageRole role = default; @@ -73,7 +75,7 @@ internal static InternalRealtimeRequestSystemMessageItem DeserializeInternalReal { if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -105,10 +107,11 @@ internal static InternalRealtimeRequestSystemMessageItem DeserializeInternalReal content = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestSystemMessageItem( - @type, + kind, id, additionalBinaryDataProperties, role, @@ -118,13 +121,14 @@ internal static InternalRealtimeRequestSystemMessageItem DeserializeInternalReal BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestSystemMessageItem)} does not support writing '{options.Format}' format."); } @@ -132,7 +136,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestSystemMessageItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeRequestSystemMessageItem)PersistableModelCreateCore(data, options); - protected override ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -148,21 +153,5 @@ protected override ConversationItem PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeRequestSystemMessageItem internalRealtimeRequestSystemMessageItem) - { - if (internalRealtimeRequestSystemMessageItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeRequestSystemMessageItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeRequestSystemMessageItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeRequestSystemMessageItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.cs b/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.cs index ac11a9ce9..94ec4223a 100644 --- a/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.cs +++ b/src/Generated/Models/InternalRealtimeRequestSystemMessageItem.cs @@ -4,14 +4,16 @@ using System; using System.Collections.Generic; +using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestSystemMessageItem : InternalRealtimeRequestMessageItem { - internal InternalRealtimeRequestSystemMessageItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status, IList content) : base(@type, id, additionalBinaryDataProperties, role, status) + internal InternalRealtimeRequestSystemMessageItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status, IList content) : base(kind, id, additionalBinaryDataProperties, role, status) { - Content = content; + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); } } } diff --git a/src/Generated/Models/InternalRealtimeRequestTextContentPart.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestTextContentPart.Serialization.cs index 082a74e2c..5f4dff3e1 100644 --- a/src/Generated/Models/InternalRealtimeRequestTextContentPart.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestTextContentPart.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestTextContentPart : IJsonModel { - internal InternalRealtimeRequestTextContentPart() + internal InternalRealtimeRequestTextContentPart() : this(ConversationContentPartKind.InputText, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(InternalRealtimeRequestTextContentPart)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } if (_additionalBinaryDataProperties?.ContainsKey("text") != true) { writer.WritePropertyName("text"u8); @@ -46,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestTextContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeRequestTextContentPart)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ConversationContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -65,7 +62,6 @@ internal static InternalRealtimeRequestTextContentPart DeserializeInternalRealti } ConversationContentPartKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string @type = "input_text"; string internalTextValue = default; foreach (var prop in element.EnumerateObject()) { @@ -74,30 +70,27 @@ internal static InternalRealtimeRequestTextContentPart DeserializeInternalRealti kind = new ConversationContentPartKind(prop.Value.GetString()); continue; } - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } if (prop.NameEquals("text"u8)) { internalTextValue = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeRequestTextContentPart(kind, additionalBinaryDataProperties, @type, internalTextValue); + return new InternalRealtimeRequestTextContentPart(kind, additionalBinaryDataProperties, internalTextValue); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestTextContentPart)} does not support writing '{options.Format}' format."); } @@ -105,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestTextContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeRequestTextContentPart)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ConversationContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +115,5 @@ protected override ConversationContentPart PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeRequestTextContentPart internalRealtimeRequestTextContentPart) - { - if (internalRealtimeRequestTextContentPart == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeRequestTextContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeRequestTextContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeRequestTextContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeRequestTextContentPart.cs b/src/Generated/Models/InternalRealtimeRequestTextContentPart.cs index 072b1dc59..121dcb5e5 100644 --- a/src/Generated/Models/InternalRealtimeRequestTextContentPart.cs +++ b/src/Generated/Models/InternalRealtimeRequestTextContentPart.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestTextContentPart : ConversationContentPart { @@ -17,12 +17,9 @@ public InternalRealtimeRequestTextContentPart(string internalTextValue) : base(C InternalTextValue = internalTextValue; } - internal InternalRealtimeRequestTextContentPart(ConversationContentPartKind kind, IDictionary additionalBinaryDataProperties, string @type, string internalTextValue) : base(kind, additionalBinaryDataProperties) + internal InternalRealtimeRequestTextContentPart(ConversationContentPartKind kind, IDictionary additionalBinaryDataProperties, string internalTextValue) : base(kind, additionalBinaryDataProperties) { - Type = @type; InternalTextValue = internalTextValue; } - - internal string Type { get; set; } = "input_text"; } } diff --git a/src/Generated/Models/InternalRealtimeRequestUserMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeRequestUserMessageItem.Serialization.cs index 9c01cdc3c..e2a20ffd0 100644 --- a/src/Generated/Models/InternalRealtimeRequestUserMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeRequestUserMessageItem.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestUserMessageItem : IJsonModel { - internal InternalRealtimeRequestUserMessageItem() + internal InternalRealtimeRequestUserMessageItem() : this(default, null, null, ConversationMessageRole.User, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,7 +47,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestUserMessageItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeRequestUserMessageItem)JsonModelCreateCore(ref reader, options); - protected override ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -63,7 +65,7 @@ internal static InternalRealtimeRequestUserMessageItem DeserializeInternalRealti { return null; } - InternalRealtimeItemType @type = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); ConversationMessageRole role = default; @@ -73,7 +75,7 @@ internal static InternalRealtimeRequestUserMessageItem DeserializeInternalRealti { if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -105,10 +107,11 @@ internal static InternalRealtimeRequestUserMessageItem DeserializeInternalRealti content = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeRequestUserMessageItem( - @type, + kind, id, additionalBinaryDataProperties, role, @@ -118,13 +121,14 @@ internal static InternalRealtimeRequestUserMessageItem DeserializeInternalRealti BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestUserMessageItem)} does not support writing '{options.Format}' format."); } @@ -132,7 +136,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestUserMessageItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeRequestUserMessageItem)PersistableModelCreateCore(data, options); - protected override ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -148,21 +153,5 @@ protected override ConversationItem PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeRequestUserMessageItem internalRealtimeRequestUserMessageItem) - { - if (internalRealtimeRequestUserMessageItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeRequestUserMessageItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeRequestUserMessageItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeRequestUserMessageItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeRequestUserMessageItem.cs b/src/Generated/Models/InternalRealtimeRequestUserMessageItem.cs index 8ef4a6272..14907b15d 100644 --- a/src/Generated/Models/InternalRealtimeRequestUserMessageItem.cs +++ b/src/Generated/Models/InternalRealtimeRequestUserMessageItem.cs @@ -4,14 +4,16 @@ using System; using System.Collections.Generic; +using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeRequestUserMessageItem : InternalRealtimeRequestMessageItem { - internal InternalRealtimeRequestUserMessageItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status, IList content) : base(@type, id, additionalBinaryDataProperties, role, status) + internal InternalRealtimeRequestUserMessageItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status, IList content) : base(kind, id, additionalBinaryDataProperties, role, status) { - Content = content; + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); } } } diff --git a/src/Generated/Models/InternalRealtimeResponse.Serialization.cs b/src/Generated/Models/InternalRealtimeResponse.Serialization.cs index 1ca40fd68..d2d1146c7 100644 --- a/src/Generated/Models/InternalRealtimeResponse.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponse.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponse : IJsonModel { - internal InternalRealtimeResponse() + internal InternalRealtimeResponse() : this(null, null, default, null, null, null, null, default, null, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -39,7 +40,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(Object) && _additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.Value.ToString()); + writer.WriteStringValue(Object); } if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) { @@ -105,7 +106,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { writer.WritePropertyName("output"u8); writer.WriteStartArray(); - foreach (ConversationItem item in Output) + foreach (RealtimeItem item in Output) { writer.WriteObjectValue(item, options); } @@ -131,6 +132,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("output_audio_format"u8); writer.WriteStringValue(OutputAudioFormat.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -154,6 +156,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -172,7 +175,7 @@ internal static InternalRealtimeResponse DeserializeInternalRealtimeResponse(Jso return null; } string id = default; - InternalRealtimeResponseObject? @object = default; + string @object = default; ConversationStatus? status = default; ConversationStatusDetails statusDetails = default; IDictionary metadata = default; @@ -180,10 +183,10 @@ internal static InternalRealtimeResponse DeserializeInternalRealtimeResponse(Jso string conversationId = default; float? temperature = default; BinaryData maxOutputTokens = default; - IReadOnlyList output = default; + IReadOnlyList output = default; IReadOnlyList modalities = default; ConversationVoice? voice = default; - ConversationAudioFormat? outputAudioFormat = default; + RealtimeAudioFormat? outputAudioFormat = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -194,11 +197,7 @@ internal static InternalRealtimeResponse DeserializeInternalRealtimeResponse(Jso } if (prop.NameEquals("object"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - @object = new InternalRealtimeResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("status"u8)) @@ -279,10 +278,10 @@ internal static InternalRealtimeResponse DeserializeInternalRealtimeResponse(Jso { continue; } - List array = new List(); + List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { - array.Add(ConversationItem.DeserializeConversationItem(item, options)); + array.Add(RealtimeItem.DeserializeRealtimeItem(item, options)); } output = array; continue; @@ -316,9 +315,10 @@ internal static InternalRealtimeResponse DeserializeInternalRealtimeResponse(Jso { continue; } - outputAudioFormat = new ConversationAudioFormat(prop.Value.GetString()); + outputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponse( @@ -331,7 +331,7 @@ internal static InternalRealtimeResponse DeserializeInternalRealtimeResponse(Jso conversationId, temperature, maxOutputTokens, - output ?? new ChangeTrackingList(), + output ?? new ChangeTrackingList(), modalities ?? new ChangeTrackingList(), voice, outputAudioFormat, @@ -340,13 +340,14 @@ internal static InternalRealtimeResponse DeserializeInternalRealtimeResponse(Jso BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeResponse)} does not support writing '{options.Format}' format."); } @@ -354,6 +355,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -370,21 +372,5 @@ protected virtual InternalRealtimeResponse PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeResponse internalRealtimeResponse) - { - if (internalRealtimeResponse == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeResponse.cs b/src/Generated/Models/InternalRealtimeResponse.cs index a2a824d41..71011eb7c 100644 --- a/src/Generated/Models/InternalRealtimeResponse.cs +++ b/src/Generated/Models/InternalRealtimeResponse.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponse { @@ -14,24 +14,26 @@ internal partial class InternalRealtimeResponse internal InternalRealtimeResponse(IDictionary metadata) { - Metadata = metadata; - Output = new ChangeTrackingList(); + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Output = new ChangeTrackingList(); Modalities = new ChangeTrackingList(); } - internal InternalRealtimeResponse(string id, InternalRealtimeResponseObject? @object, ConversationStatus? status, ConversationStatusDetails statusDetails, IDictionary metadata, ConversationTokenUsage usage, string conversationId, float? temperature, BinaryData maxOutputTokens, IReadOnlyList output, IReadOnlyList modalities, ConversationVoice? voice, ConversationAudioFormat? outputAudioFormat, IDictionary additionalBinaryDataProperties) + internal InternalRealtimeResponse(string id, string @object, ConversationStatus? status, ConversationStatusDetails statusDetails, IDictionary metadata, ConversationTokenUsage usage, string conversationId, float? temperature, BinaryData maxOutputTokens, IReadOnlyList output, IReadOnlyList modalities, ConversationVoice? voice, RealtimeAudioFormat? outputAudioFormat, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; Object = @object; Status = status; StatusDetails = statusDetails; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); Usage = usage; ConversationId = conversationId; Temperature = temperature; MaxOutputTokens = maxOutputTokens; - Output = output; - Modalities = modalities; + Output = output ?? new ChangeTrackingList(); + Modalities = modalities ?? new ChangeTrackingList(); Voice = voice; OutputAudioFormat = outputAudioFormat; _additionalBinaryDataProperties = additionalBinaryDataProperties; @@ -39,7 +41,7 @@ internal InternalRealtimeResponse(string id, InternalRealtimeResponseObject? @ob public string Id { get; } - public InternalRealtimeResponseObject? Object { get; } + public string Object { get; } public ConversationStatus? Status { get; } diff --git a/src/Generated/Models/InternalRealtimeResponseAudioContentPart.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseAudioContentPart.Serialization.cs index 60e114cb3..c988582a8 100644 --- a/src/Generated/Models/InternalRealtimeResponseAudioContentPart.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseAudioContentPart.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseAudioContentPart : IJsonModel { - internal InternalRealtimeResponseAudioContentPart() + internal InternalRealtimeResponseAudioContentPart() : this(ConversationContentPartKind.OutputAudio, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(InternalRealtimeResponseAudioContentPart)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } if (_additionalBinaryDataProperties?.ContainsKey("transcript") != true) { if (Optional.IsDefined(InternalTranscriptValue)) @@ -53,6 +49,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeResponseAudioContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeResponseAudioContentPart)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ConversationContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -72,7 +69,6 @@ internal static InternalRealtimeResponseAudioContentPart DeserializeInternalReal } ConversationContentPartKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string @type = "audio"; string internalTranscriptValue = default; foreach (var prop in element.EnumerateObject()) { @@ -81,11 +77,6 @@ internal static InternalRealtimeResponseAudioContentPart DeserializeInternalReal kind = new ConversationContentPartKind(prop.Value.GetString()); continue; } - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } if (prop.NameEquals("transcript"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -96,20 +87,22 @@ internal static InternalRealtimeResponseAudioContentPart DeserializeInternalReal internalTranscriptValue = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeResponseAudioContentPart(kind, additionalBinaryDataProperties, @type, internalTranscriptValue); + return new InternalRealtimeResponseAudioContentPart(kind, additionalBinaryDataProperties, internalTranscriptValue); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeResponseAudioContentPart)} does not support writing '{options.Format}' format."); } @@ -117,6 +110,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeResponseAudioContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeResponseAudioContentPart)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ConversationContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +127,5 @@ protected override ConversationContentPart PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeResponseAudioContentPart internalRealtimeResponseAudioContentPart) - { - if (internalRealtimeResponseAudioContentPart == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeResponseAudioContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeResponseAudioContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeResponseAudioContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeResponseAudioContentPart.cs b/src/Generated/Models/InternalRealtimeResponseAudioContentPart.cs index f533cc688..5c2d85b15 100644 --- a/src/Generated/Models/InternalRealtimeResponseAudioContentPart.cs +++ b/src/Generated/Models/InternalRealtimeResponseAudioContentPart.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseAudioContentPart : ConversationContentPart { @@ -14,12 +14,9 @@ internal InternalRealtimeResponseAudioContentPart(string internalTranscriptValue InternalTranscriptValue = internalTranscriptValue; } - internal InternalRealtimeResponseAudioContentPart(ConversationContentPartKind kind, IDictionary additionalBinaryDataProperties, string @type, string internalTranscriptValue) : base(kind, additionalBinaryDataProperties) + internal InternalRealtimeResponseAudioContentPart(ConversationContentPartKind kind, IDictionary additionalBinaryDataProperties, string internalTranscriptValue) : base(kind, additionalBinaryDataProperties) { - Type = @type; InternalTranscriptValue = internalTranscriptValue; } - - internal string Type { get; set; } = "audio"; } } diff --git a/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.Serialization.cs index d5409e675..28672e436 100644 --- a/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseFunctionCallItem : IJsonModel { - internal InternalRealtimeResponseFunctionCallItem() + internal InternalRealtimeResponseFunctionCallItem() : this(null, InternalRealtimeItemType.FunctionCall, null, null, null, null, null, default) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,7 +57,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeResponseFunctionCallItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeResponseFunctionCallItem)JsonModelCreateCore(ref reader, options); - protected override InternalRealtimeConversationResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalRealtimeResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -73,8 +75,8 @@ internal static InternalRealtimeResponseFunctionCallItem DeserializeInternalReal { return null; } - InternalRealtimeConversationResponseItemObject @object = default; - InternalRealtimeItemType @type = default; + string @object = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string name = default; @@ -85,12 +87,12 @@ internal static InternalRealtimeResponseFunctionCallItem DeserializeInternalReal { if (prop.NameEquals("object"u8)) { - @object = new InternalRealtimeConversationResponseItemObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -123,11 +125,12 @@ internal static InternalRealtimeResponseFunctionCallItem DeserializeInternalReal status = new ConversationItemStatus(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseFunctionCallItem( @object, - @type, + kind, id, additionalBinaryDataProperties, name, @@ -138,13 +141,14 @@ internal static InternalRealtimeResponseFunctionCallItem DeserializeInternalReal BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeResponseFunctionCallItem)} does not support writing '{options.Format}' format."); } @@ -152,7 +156,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeResponseFunctionCallItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeResponseFunctionCallItem)PersistableModelCreateCore(data, options); - protected override InternalRealtimeConversationResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalRealtimeResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -168,21 +173,5 @@ protected override InternalRealtimeConversationResponseItem PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeResponseFunctionCallItem internalRealtimeResponseFunctionCallItem) - { - if (internalRealtimeResponseFunctionCallItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeResponseFunctionCallItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeResponseFunctionCallItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeResponseFunctionCallItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.cs b/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.cs index f89f19c94..2152f3995 100644 --- a/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.cs +++ b/src/Generated/Models/InternalRealtimeResponseFunctionCallItem.cs @@ -5,9 +5,9 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeResponseFunctionCallItem : InternalRealtimeConversationResponseItem + internal partial class InternalRealtimeResponseFunctionCallItem : InternalRealtimeResponseItem { internal InternalRealtimeResponseFunctionCallItem(string id, string name, string callId, string arguments, ConversationItemStatus status) : base(InternalRealtimeItemType.FunctionCall, id) { @@ -17,7 +17,7 @@ internal InternalRealtimeResponseFunctionCallItem(string id, string name, string Status = status; } - internal InternalRealtimeResponseFunctionCallItem(InternalRealtimeConversationResponseItemObject @object, InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, string name, string callId, string arguments, ConversationItemStatus status) : base(@object, @type, id, additionalBinaryDataProperties) + internal InternalRealtimeResponseFunctionCallItem(string @object, InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, string name, string callId, string arguments, ConversationItemStatus status) : base(@object, kind, id, additionalBinaryDataProperties) { Name = name; CallId = callId; diff --git a/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.Serialization.cs index 30e632d63..33f34732c 100644 --- a/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseFunctionCallOutputItem : IJsonModel { - internal InternalRealtimeResponseFunctionCallOutputItem() + internal InternalRealtimeResponseFunctionCallOutputItem() : this(null, InternalRealtimeItemType.FunctionCallOutput, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,7 +47,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeResponseFunctionCallOutputItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeResponseFunctionCallOutputItem)JsonModelCreateCore(ref reader, options); - protected override InternalRealtimeConversationResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalRealtimeResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -63,8 +65,8 @@ internal static InternalRealtimeResponseFunctionCallOutputItem DeserializeIntern { return null; } - InternalRealtimeConversationResponseItemObject @object = default; - InternalRealtimeItemType @type = default; + string @object = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string callId = default; @@ -73,12 +75,12 @@ internal static InternalRealtimeResponseFunctionCallOutputItem DeserializeIntern { if (prop.NameEquals("object"u8)) { - @object = new InternalRealtimeConversationResponseItemObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -101,11 +103,12 @@ internal static InternalRealtimeResponseFunctionCallOutputItem DeserializeIntern output = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseFunctionCallOutputItem( @object, - @type, + kind, id, additionalBinaryDataProperties, callId, @@ -114,13 +117,14 @@ internal static InternalRealtimeResponseFunctionCallOutputItem DeserializeIntern BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeResponseFunctionCallOutputItem)} does not support writing '{options.Format}' format."); } @@ -128,7 +132,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeResponseFunctionCallOutputItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeResponseFunctionCallOutputItem)PersistableModelCreateCore(data, options); - protected override InternalRealtimeConversationResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalRealtimeResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -144,21 +149,5 @@ protected override InternalRealtimeConversationResponseItem PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeResponseFunctionCallOutputItem internalRealtimeResponseFunctionCallOutputItem) - { - if (internalRealtimeResponseFunctionCallOutputItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeResponseFunctionCallOutputItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeResponseFunctionCallOutputItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeResponseFunctionCallOutputItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.cs b/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.cs index babadf19c..9f1039160 100644 --- a/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.cs +++ b/src/Generated/Models/InternalRealtimeResponseFunctionCallOutputItem.cs @@ -5,9 +5,9 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeResponseFunctionCallOutputItem : InternalRealtimeConversationResponseItem + internal partial class InternalRealtimeResponseFunctionCallOutputItem : InternalRealtimeResponseItem { internal InternalRealtimeResponseFunctionCallOutputItem(string id, string callId, string output) : base(InternalRealtimeItemType.FunctionCallOutput, id) { @@ -15,7 +15,7 @@ internal InternalRealtimeResponseFunctionCallOutputItem(string id, string callId Output = output; } - internal InternalRealtimeResponseFunctionCallOutputItem(InternalRealtimeConversationResponseItemObject @object, InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, string callId, string output) : base(@object, @type, id, additionalBinaryDataProperties) + internal InternalRealtimeResponseFunctionCallOutputItem(string @object, InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, string callId, string output) : base(@object, kind, id, additionalBinaryDataProperties) { CallId = callId; Output = output; diff --git a/src/Generated/Models/InternalRealtimeResponseItem.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseItem.Serialization.cs new file mode 100644 index 000000000..b0d85d3ee --- /dev/null +++ b/src/Generated/Models/InternalRealtimeResponseItem.Serialization.cs @@ -0,0 +1,149 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + [PersistableModelProxy(typeof(UnknownRealtimeResponseItem))] + internal abstract partial class InternalRealtimeResponseItem : IJsonModel + { + internal InternalRealtimeResponseItem() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeResponseItem)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + if (Optional.IsDefined(Id)) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + else + { + writer.WriteNull("id"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeResponseItem(document.RootElement, options); + } + + internal static InternalRealtimeResponseItem DeserializeInternalRealtimeResponseItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "message": + return InternalRealtimeResponseMessageItem.DeserializeInternalRealtimeResponseMessageItem(element, options); + case "function_call": + return InternalRealtimeResponseFunctionCallItem.DeserializeInternalRealtimeResponseFunctionCallItem(element, options); + case "function_call_output": + return InternalRealtimeResponseFunctionCallOutputItem.DeserializeInternalRealtimeResponseFunctionCallOutputItem(element, options); + } + } + return UnknownRealtimeResponseItem.DeserializeUnknownRealtimeResponseItem(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeResponseItem)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeResponseItem)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeResponseItem.cs b/src/Generated/Models/InternalRealtimeResponseItem.cs new file mode 100644 index 000000000..6de2a2c31 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeResponseItem.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal abstract partial class InternalRealtimeResponseItem + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalRealtimeResponseItem(InternalRealtimeItemType kind, string id) + { + Kind = kind; + Id = id; + } + + internal InternalRealtimeResponseItem(string @object, InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties) + { + Object = @object; + Kind = kind; + Id = id; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "realtime.item"; + + internal InternalRealtimeItemType Kind { get; set; } + + public string Id { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeResponseMessageItem.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseMessageItem.Serialization.cs index 0292e134d..cefd61c57 100644 --- a/src/Generated/Models/InternalRealtimeResponseMessageItem.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseMessageItem.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseMessageItem : IJsonModel { - internal InternalRealtimeResponseMessageItem() + internal InternalRealtimeResponseMessageItem() : this(null, InternalRealtimeItemType.Message, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,7 +57,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeResponseMessageItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeResponseMessageItem)JsonModelCreateCore(ref reader, options); - protected override InternalRealtimeConversationResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalRealtimeResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -73,8 +75,8 @@ internal static InternalRealtimeResponseMessageItem DeserializeInternalRealtimeR { return null; } - InternalRealtimeConversationResponseItemObject @object = default; - InternalRealtimeItemType @type = default; + string @object = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); ConversationItemStatus status = default; @@ -84,12 +86,12 @@ internal static InternalRealtimeResponseMessageItem DeserializeInternalRealtimeR { if (prop.NameEquals("object"u8)) { - @object = new InternalRealtimeConversationResponseItemObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -122,11 +124,12 @@ internal static InternalRealtimeResponseMessageItem DeserializeInternalRealtimeR content = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseMessageItem( @object, - @type, + kind, id, additionalBinaryDataProperties, status, @@ -136,13 +139,14 @@ internal static InternalRealtimeResponseMessageItem DeserializeInternalRealtimeR BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeResponseMessageItem)} does not support writing '{options.Format}' format."); } @@ -150,7 +154,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeResponseMessageItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeResponseMessageItem)PersistableModelCreateCore(data, options); - protected override InternalRealtimeConversationResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalRealtimeResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -166,21 +171,5 @@ protected override InternalRealtimeConversationResponseItem PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeResponseMessageItem internalRealtimeResponseMessageItem) - { - if (internalRealtimeResponseMessageItem == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeResponseMessageItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeResponseMessageItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeResponseMessageItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeResponseMessageItem.cs b/src/Generated/Models/InternalRealtimeResponseMessageItem.cs index 87bf3c1ad..0f9b2fa8d 100644 --- a/src/Generated/Models/InternalRealtimeResponseMessageItem.cs +++ b/src/Generated/Models/InternalRealtimeResponseMessageItem.cs @@ -4,24 +4,26 @@ using System; using System.Collections.Generic; +using System.Linq; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeResponseMessageItem : InternalRealtimeConversationResponseItem + internal partial class InternalRealtimeResponseMessageItem : InternalRealtimeResponseItem { - internal InternalRealtimeResponseMessageItem(string id, ConversationItemStatus status, ConversationMessageRole role) : base(InternalRealtimeItemType.Message, id) + internal InternalRealtimeResponseMessageItem(string id, ConversationItemStatus status, ConversationMessageRole role, IEnumerable content) : base(InternalRealtimeItemType.Message, id) { Status = status; Role = role; - Content = new ChangeTrackingList(); + Content = content.ToList(); } - internal InternalRealtimeResponseMessageItem(InternalRealtimeConversationResponseItemObject @object, InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, ConversationItemStatus status, ConversationMessageRole role, IReadOnlyList content) : base(@object, @type, id, additionalBinaryDataProperties) + internal InternalRealtimeResponseMessageItem(string @object, InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, ConversationItemStatus status, ConversationMessageRole role, IReadOnlyList content) : base(@object, kind, id, additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Status = status; Role = role; - Content = content; + Content = content ?? new ChangeTrackingList(); } public ConversationItemStatus Status { get; } diff --git a/src/Generated/Models/InternalRealtimeResponseModality.cs b/src/Generated/Models/InternalRealtimeResponseModality.cs index 363f5e034..9c7a6570b 100644 --- a/src/Generated/Models/InternalRealtimeResponseModality.cs +++ b/src/Generated/Models/InternalRealtimeResponseModality.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal readonly partial struct InternalRealtimeResponseModality : IEquatable { @@ -21,9 +21,9 @@ public InternalRealtimeResponseModality(string value) _value = value; } - public static InternalRealtimeResponseModality Text { get; } = new InternalRealtimeResponseModality(TextValue); + internal static InternalRealtimeResponseModality Text { get; } = new InternalRealtimeResponseModality(TextValue); - public static InternalRealtimeResponseModality Audio { get; } = new InternalRealtimeResponseModality(AudioValue); + internal static InternalRealtimeResponseModality Audio { get; } = new InternalRealtimeResponseModality(AudioValue); public static bool operator ==(InternalRealtimeResponseModality left, InternalRealtimeResponseModality right) => left.Equals(right); diff --git a/src/Generated/Models/InternalRealtimeResponseObject.cs b/src/Generated/Models/InternalRealtimeResponseObject.cs deleted file mode 100644 index 113343549..000000000 --- a/src/Generated/Models/InternalRealtimeResponseObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - internal readonly partial struct InternalRealtimeResponseObject : IEquatable - { - private readonly string _value; - private const string RealtimeResponseValue = "realtime.response"; - - public InternalRealtimeResponseObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRealtimeResponseObject RealtimeResponse { get; } = new InternalRealtimeResponseObject(RealtimeResponseValue); - - public static bool operator ==(InternalRealtimeResponseObject left, InternalRealtimeResponseObject right) => left.Equals(right); - - public static bool operator !=(InternalRealtimeResponseObject left, InternalRealtimeResponseObject right) => !left.Equals(right); - - public static implicit operator InternalRealtimeResponseObject(string value) => new InternalRealtimeResponseObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRealtimeResponseObject other && Equals(other); - - public bool Equals(InternalRealtimeResponseObject 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/InternalRealtimeResponseOutputAudioFormat.cs b/src/Generated/Models/InternalRealtimeResponseOutputAudioFormat.cs index 3eed3ffa9..915e1cac4 100644 --- a/src/Generated/Models/InternalRealtimeResponseOutputAudioFormat.cs +++ b/src/Generated/Models/InternalRealtimeResponseOutputAudioFormat.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal readonly partial struct InternalRealtimeResponseOutputAudioFormat : IEquatable { @@ -22,11 +22,11 @@ public InternalRealtimeResponseOutputAudioFormat(string value) _value = value; } - public static InternalRealtimeResponseOutputAudioFormat Pcm16 { get; } = new InternalRealtimeResponseOutputAudioFormat(Pcm16Value); + internal static InternalRealtimeResponseOutputAudioFormat Pcm16 { get; } = new InternalRealtimeResponseOutputAudioFormat(Pcm16Value); - public static InternalRealtimeResponseOutputAudioFormat G711Ulaw { get; } = new InternalRealtimeResponseOutputAudioFormat(G711UlawValue); + internal static InternalRealtimeResponseOutputAudioFormat G711Ulaw { get; } = new InternalRealtimeResponseOutputAudioFormat(G711UlawValue); - public static InternalRealtimeResponseOutputAudioFormat G711Alaw { get; } = new InternalRealtimeResponseOutputAudioFormat(G711AlawValue); + internal static InternalRealtimeResponseOutputAudioFormat G711Alaw { get; } = new InternalRealtimeResponseOutputAudioFormat(G711AlawValue); public static bool operator ==(InternalRealtimeResponseOutputAudioFormat left, InternalRealtimeResponseOutputAudioFormat right) => left.Equals(right); diff --git a/src/Generated/Models/InternalRealtimeResponseSession.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseSession.Serialization.cs index 55f5d0818..0df20934a 100644 --- a/src/Generated/Models/InternalRealtimeResponseSession.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseSession.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseSession : IJsonModel { - internal InternalRealtimeResponseSession() + internal InternalRealtimeResponseSession() : this(null, null, null, null, null, default, default, null, null, null, null, null, default, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,7 +35,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("id") != true) { @@ -61,11 +62,6 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("instructions"u8); writer.WriteStringValue(Instructions); } - if (_additionalBinaryDataProperties?.ContainsKey("voice") != true) - { - writer.WritePropertyName("voice"u8); - writer.WriteStringValue(Voice.ToString()); - } if (_additionalBinaryDataProperties?.ContainsKey("input_audio_format") != true) { writer.WritePropertyName("input_audio_format"u8); @@ -93,6 +89,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("turn_detection"u8); writer.WriteObjectValue(TurnDetection, options); } + if (_additionalBinaryDataProperties?.ContainsKey("input_audio_noise_reduction") != true) + { + writer.WritePropertyName("input_audio_noise_reduction"u8); + writer.WriteObjectValue(InputAudioNoiseReduction, options); + } if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); @@ -120,6 +121,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("temperature"u8); writer.WriteNumberValue(Temperature); } + if (_additionalBinaryDataProperties?.ContainsKey("voice") != true) + { + writer.WritePropertyName("voice"u8); + writer.WriteStringValue(Voice.ToString()); + } if (_additionalBinaryDataProperties?.ContainsKey("max_response_output_tokens") != true) { if (Optional.IsDefined(_maxResponseOutputTokens)) @@ -139,6 +145,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("max_response_output_tokens"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -162,6 +169,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeResponseSession IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeResponseSession JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -179,26 +187,27 @@ internal static InternalRealtimeResponseSession DeserializeInternalRealtimeRespo { return null; } - InternalRealtimeResponseSessionObject @object = default; + string @object = default; string id = default; string model = default; IList modalities = default; string instructions = default; - ConversationVoice voice = default; - ConversationAudioFormat inputAudioFormat = default; - ConversationAudioFormat outputAudioFormat = default; - ConversationInputTranscriptionOptions inputAudioTranscription = default; - ConversationTurnDetectionOptions turnDetection = default; - IReadOnlyList tools = default; + RealtimeAudioFormat inputAudioFormat = default; + RealtimeAudioFormat outputAudioFormat = default; + InputTranscriptionOptions inputAudioTranscription = default; + TurnDetectionOptions turnDetection = default; + InputNoiseReductionOptions inputAudioNoiseReduction = default; + IList tools = default; BinaryData toolChoice = default; float temperature = default; + ConversationVoice voice = default; BinaryData maxResponseOutputTokens = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("object"u8)) { - @object = new InternalRealtimeResponseSessionObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("id"u8)) @@ -226,19 +235,14 @@ internal static InternalRealtimeResponseSession DeserializeInternalRealtimeRespo instructions = prop.Value.GetString(); continue; } - if (prop.NameEquals("voice"u8)) - { - voice = new ConversationVoice(prop.Value.GetString()); - continue; - } if (prop.NameEquals("input_audio_format"u8)) { - inputAudioFormat = new ConversationAudioFormat(prop.Value.GetString()); + inputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); continue; } if (prop.NameEquals("output_audio_format"u8)) { - outputAudioFormat = new ConversationAudioFormat(prop.Value.GetString()); + outputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); continue; } if (prop.NameEquals("input_audio_transcription"u8)) @@ -248,12 +252,17 @@ internal static InternalRealtimeResponseSession DeserializeInternalRealtimeRespo inputAudioTranscription = null; continue; } - inputAudioTranscription = ConversationInputTranscriptionOptions.DeserializeConversationInputTranscriptionOptions(prop.Value, options); + inputAudioTranscription = InputTranscriptionOptions.DeserializeInputTranscriptionOptions(prop.Value, options); continue; } if (prop.NameEquals("turn_detection"u8)) { - turnDetection = ConversationTurnDetectionOptions.DeserializeConversationTurnDetectionOptions(prop.Value, options); + turnDetection = TurnDetectionOptions.DeserializeTurnDetectionOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("input_audio_noise_reduction"u8)) + { + inputAudioNoiseReduction = InputNoiseReductionOptions.DeserializeInputNoiseReductionOptions(prop.Value, options); continue; } if (prop.NameEquals("tools"u8)) @@ -276,6 +285,11 @@ internal static InternalRealtimeResponseSession DeserializeInternalRealtimeRespo temperature = prop.Value.GetSingle(); continue; } + if (prop.NameEquals("voice"u8)) + { + voice = new ConversationVoice(prop.Value.GetString()); + continue; + } if (prop.NameEquals("max_response_output_tokens"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -286,6 +300,7 @@ internal static InternalRealtimeResponseSession DeserializeInternalRealtimeRespo maxResponseOutputTokens = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeResponseSession( @@ -294,27 +309,29 @@ internal static InternalRealtimeResponseSession DeserializeInternalRealtimeRespo model, modalities, instructions, - voice, inputAudioFormat, outputAudioFormat, inputAudioTranscription, turnDetection, + inputAudioNoiseReduction, tools, toolChoice, temperature, + voice, maxResponseOutputTokens, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeResponseSession)} does not support writing '{options.Format}' format."); } @@ -322,6 +339,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeResponseSession IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeResponseSession PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -338,21 +356,5 @@ protected virtual InternalRealtimeResponseSession PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeResponseSession internalRealtimeResponseSession) - { - if (internalRealtimeResponseSession == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeResponseSession, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeResponseSession(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeResponseSession(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeResponseSession.cs b/src/Generated/Models/InternalRealtimeResponseSession.cs index f6eb7e92a..8a64539e8 100644 --- a/src/Generated/Models/InternalRealtimeResponseSession.cs +++ b/src/Generated/Models/InternalRealtimeResponseSession.cs @@ -7,69 +7,72 @@ using System.Linq; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseSession { private protected IDictionary _additionalBinaryDataProperties; - internal InternalRealtimeResponseSession(string id, string model, IEnumerable modalities, string instructions, ConversationVoice voice, ConversationAudioFormat inputAudioFormat, ConversationAudioFormat outputAudioFormat, ConversationInputTranscriptionOptions inputAudioTranscription, ConversationTurnDetectionOptions turnDetection, BinaryData toolChoice, float temperature, BinaryData maxResponseOutputTokens) + internal InternalRealtimeResponseSession(string id, string model, IEnumerable modalities, string instructions, RealtimeAudioFormat inputAudioFormat, RealtimeAudioFormat outputAudioFormat, InputTranscriptionOptions inputAudioTranscription, TurnDetectionOptions turnDetection, InputNoiseReductionOptions inputAudioNoiseReduction, IEnumerable tools, BinaryData toolChoice, float temperature, ConversationVoice voice, BinaryData maxResponseOutputTokens) { Id = id; Model = model; Modalities = modalities.ToList(); Instructions = instructions; - Voice = voice; InputAudioFormat = inputAudioFormat; OutputAudioFormat = outputAudioFormat; InputAudioTranscription = inputAudioTranscription; TurnDetection = turnDetection; - Tools = new ChangeTrackingList(); + InputAudioNoiseReduction = inputAudioNoiseReduction; + Tools = tools.ToList(); ToolChoice = toolChoice; Temperature = temperature; + Voice = voice; _maxResponseOutputTokens = maxResponseOutputTokens; } - internal InternalRealtimeResponseSession(InternalRealtimeResponseSessionObject @object, string id, string model, IList modalities, string instructions, ConversationVoice voice, ConversationAudioFormat inputAudioFormat, ConversationAudioFormat outputAudioFormat, ConversationInputTranscriptionOptions inputAudioTranscription, ConversationTurnDetectionOptions turnDetection, IReadOnlyList tools, BinaryData toolChoice, float temperature, BinaryData maxResponseOutputTokens, IDictionary additionalBinaryDataProperties) + internal InternalRealtimeResponseSession(string @object, string id, string model, IList modalities, string instructions, RealtimeAudioFormat inputAudioFormat, RealtimeAudioFormat outputAudioFormat, InputTranscriptionOptions inputAudioTranscription, TurnDetectionOptions turnDetection, InputNoiseReductionOptions inputAudioNoiseReduction, IList tools, BinaryData toolChoice, float temperature, ConversationVoice voice, BinaryData maxResponseOutputTokens, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Object = @object; Id = id; Model = model; - Modalities = modalities; + Modalities = modalities ?? new ChangeTrackingList(); Instructions = instructions; - Voice = voice; InputAudioFormat = inputAudioFormat; OutputAudioFormat = outputAudioFormat; InputAudioTranscription = inputAudioTranscription; TurnDetection = turnDetection; - Tools = tools; + InputAudioNoiseReduction = inputAudioNoiseReduction; + Tools = tools ?? new ChangeTrackingList(); ToolChoice = toolChoice; Temperature = temperature; + Voice = voice; _maxResponseOutputTokens = maxResponseOutputTokens; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalRealtimeResponseSessionObject Object { get; } = "realtime.session"; + public string Object { get; } = "realtime.session"; public string Id { get; } public string Model { get; } - public IList Modalities { get; } + internal IList Modalities { get; } public string Instructions { get; } - public ConversationVoice Voice { get; } + public RealtimeAudioFormat InputAudioFormat { get; } - public ConversationAudioFormat InputAudioFormat { get; } + public RealtimeAudioFormat OutputAudioFormat { get; } - public ConversationAudioFormat OutputAudioFormat { get; } + public InputTranscriptionOptions InputAudioTranscription { get; } - public ConversationInputTranscriptionOptions InputAudioTranscription { get; } + public TurnDetectionOptions TurnDetection { get; } - public ConversationTurnDetectionOptions TurnDetection { get; } + public InputNoiseReductionOptions InputAudioNoiseReduction { get; } - public IReadOnlyList Tools { get; } + public IList Tools { get; } public BinaryData ToolChoice { get; } diff --git a/src/Generated/Models/InternalRealtimeResponseSessionObject.cs b/src/Generated/Models/InternalRealtimeResponseSessionObject.cs deleted file mode 100644 index e73181f01..000000000 --- a/src/Generated/Models/InternalRealtimeResponseSessionObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - internal readonly partial struct InternalRealtimeResponseSessionObject : IEquatable - { - private readonly string _value; - private const string RealtimeSessionValue = "realtime.session"; - - public InternalRealtimeResponseSessionObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRealtimeResponseSessionObject RealtimeSession { get; } = new InternalRealtimeResponseSessionObject(RealtimeSessionValue); - - public static bool operator ==(InternalRealtimeResponseSessionObject left, InternalRealtimeResponseSessionObject right) => left.Equals(right); - - public static bool operator !=(InternalRealtimeResponseSessionObject left, InternalRealtimeResponseSessionObject right) => !left.Equals(right); - - public static implicit operator InternalRealtimeResponseSessionObject(string value) => new InternalRealtimeResponseSessionObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRealtimeResponseSessionObject other && Equals(other); - - public bool Equals(InternalRealtimeResponseSessionObject 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/InternalRealtimeResponseStatusDetailsError.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.Serialization.cs index 3c700dc24..17662e016 100644 --- a/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseStatusDetailsError : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,16 +28,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRealtimeResponseStatusDetailsError)} does not support writing '{format}' format."); } - if (Optional.IsDefined(Type) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind); } if (Optional.IsDefined(Code) && _additionalBinaryDataProperties?.ContainsKey("code") != true) { writer.WritePropertyName("code"u8); writer.WriteStringValue(Code); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeResponseStatusDetailsError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeResponseStatusDetailsError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -77,14 +80,14 @@ internal static InternalRealtimeResponseStatusDetailsError DeserializeInternalRe { return null; } - string @type = default; + string kind = default; string code = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = prop.Value.GetString(); continue; } if (prop.NameEquals("code"u8)) @@ -92,20 +95,22 @@ internal static InternalRealtimeResponseStatusDetailsError DeserializeInternalRe code = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeResponseStatusDetailsError(@type, code, additionalBinaryDataProperties); + return new InternalRealtimeResponseStatusDetailsError(kind, code, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeResponseStatusDetailsError)} does not support writing '{options.Format}' format."); } @@ -113,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeResponseStatusDetailsError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeResponseStatusDetailsError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,21 +135,5 @@ protected virtual InternalRealtimeResponseStatusDetailsError PersistableModelCre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeResponseStatusDetailsError internalRealtimeResponseStatusDetailsError) - { - if (internalRealtimeResponseStatusDetailsError == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeResponseStatusDetailsError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeResponseStatusDetailsError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeResponseStatusDetailsError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.cs b/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.cs index 6a93dd32e..672f18545 100644 --- a/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.cs +++ b/src/Generated/Models/InternalRealtimeResponseStatusDetailsError.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseStatusDetailsError { @@ -15,14 +15,14 @@ internal InternalRealtimeResponseStatusDetailsError() { } - internal InternalRealtimeResponseStatusDetailsError(string @type, string code, IDictionary additionalBinaryDataProperties) + internal InternalRealtimeResponseStatusDetailsError(string kind, string code, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; Code = code; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public string Type { get; } + public string Kind { get; } public string Code { get; } diff --git a/src/Generated/Models/InternalRealtimeResponseStatusDetailsType.cs b/src/Generated/Models/InternalRealtimeResponseStatusDetailsType.cs index 19492c908..b164b8d35 100644 --- a/src/Generated/Models/InternalRealtimeResponseStatusDetailsType.cs +++ b/src/Generated/Models/InternalRealtimeResponseStatusDetailsType.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal readonly partial struct InternalRealtimeResponseStatusDetailsType : IEquatable { @@ -23,13 +23,13 @@ public InternalRealtimeResponseStatusDetailsType(string value) _value = value; } - public static InternalRealtimeResponseStatusDetailsType Completed { get; } = new InternalRealtimeResponseStatusDetailsType(CompletedValue); + internal static InternalRealtimeResponseStatusDetailsType Completed { get; } = new InternalRealtimeResponseStatusDetailsType(CompletedValue); - public static InternalRealtimeResponseStatusDetailsType Cancelled { get; } = new InternalRealtimeResponseStatusDetailsType(CancelledValue); + internal static InternalRealtimeResponseStatusDetailsType Cancelled { get; } = new InternalRealtimeResponseStatusDetailsType(CancelledValue); - public static InternalRealtimeResponseStatusDetailsType Failed { get; } = new InternalRealtimeResponseStatusDetailsType(FailedValue); + internal static InternalRealtimeResponseStatusDetailsType Failed { get; } = new InternalRealtimeResponseStatusDetailsType(FailedValue); - public static InternalRealtimeResponseStatusDetailsType Incomplete { get; } = new InternalRealtimeResponseStatusDetailsType(IncompleteValue); + internal static InternalRealtimeResponseStatusDetailsType Incomplete { get; } = new InternalRealtimeResponseStatusDetailsType(IncompleteValue); public static bool operator ==(InternalRealtimeResponseStatusDetailsType left, InternalRealtimeResponseStatusDetailsType right) => left.Equals(right); diff --git a/src/Generated/Models/InternalRealtimeResponseTextContentPart.Serialization.cs b/src/Generated/Models/InternalRealtimeResponseTextContentPart.Serialization.cs index d463cdcd0..156c29821 100644 --- a/src/Generated/Models/InternalRealtimeResponseTextContentPart.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeResponseTextContentPart.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseTextContentPart : IJsonModel { - internal InternalRealtimeResponseTextContentPart() + internal InternalRealtimeResponseTextContentPart() : this(ConversationContentPartKind.OutputText, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(InternalRealtimeResponseTextContentPart)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } if (_additionalBinaryDataProperties?.ContainsKey("text") != true) { writer.WritePropertyName("text"u8); @@ -46,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeResponseTextContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeResponseTextContentPart)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ConversationContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -65,7 +62,6 @@ internal static InternalRealtimeResponseTextContentPart DeserializeInternalRealt } ConversationContentPartKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string @type = "text"; string internalTextValue = default; foreach (var prop in element.EnumerateObject()) { @@ -74,30 +70,27 @@ internal static InternalRealtimeResponseTextContentPart DeserializeInternalRealt kind = new ConversationContentPartKind(prop.Value.GetString()); continue; } - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } if (prop.NameEquals("text"u8)) { internalTextValue = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeResponseTextContentPart(kind, additionalBinaryDataProperties, @type, internalTextValue); + return new InternalRealtimeResponseTextContentPart(kind, additionalBinaryDataProperties, internalTextValue); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeResponseTextContentPart)} does not support writing '{options.Format}' format."); } @@ -105,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeResponseTextContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeResponseTextContentPart)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ConversationContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +115,5 @@ protected override ConversationContentPart PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeResponseTextContentPart internalRealtimeResponseTextContentPart) - { - if (internalRealtimeResponseTextContentPart == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeResponseTextContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeResponseTextContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeResponseTextContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeResponseTextContentPart.cs b/src/Generated/Models/InternalRealtimeResponseTextContentPart.cs index ea8649803..c641ad8d0 100644 --- a/src/Generated/Models/InternalRealtimeResponseTextContentPart.cs +++ b/src/Generated/Models/InternalRealtimeResponseTextContentPart.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeResponseTextContentPart : ConversationContentPart { @@ -14,12 +14,9 @@ internal InternalRealtimeResponseTextContentPart(string internalTextValue) : bas InternalTextValue = internalTextValue; } - internal InternalRealtimeResponseTextContentPart(ConversationContentPartKind kind, IDictionary additionalBinaryDataProperties, string @type, string internalTextValue) : base(kind, additionalBinaryDataProperties) + internal InternalRealtimeResponseTextContentPart(ConversationContentPartKind kind, IDictionary additionalBinaryDataProperties, string internalTextValue) : base(kind, additionalBinaryDataProperties) { - Type = @type; InternalTextValue = internalTextValue; } - - internal string Type { get; set; } = "text"; } } diff --git a/src/Generated/Models/InternalRealtimeResponseVoice.cs b/src/Generated/Models/InternalRealtimeResponseVoice.cs deleted file mode 100644 index 488f38252..000000000 --- a/src/Generated/Models/InternalRealtimeResponseVoice.cs +++ /dev/null @@ -1,62 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.RealtimeConversation -{ - internal readonly partial struct InternalRealtimeResponseVoice : IEquatable - { - private readonly string _value; - private const string AlloyValue = "alloy"; - private const string AshValue = "ash"; - private const string BalladValue = "ballad"; - private const string CoralValue = "coral"; - private const string EchoValue = "echo"; - private const string SageValue = "sage"; - private const string ShimmerValue = "shimmer"; - private const string VerseValue = "verse"; - - public InternalRealtimeResponseVoice(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRealtimeResponseVoice Alloy { get; } = new InternalRealtimeResponseVoice(AlloyValue); - - public static InternalRealtimeResponseVoice Ash { get; } = new InternalRealtimeResponseVoice(AshValue); - - public static InternalRealtimeResponseVoice Ballad { get; } = new InternalRealtimeResponseVoice(BalladValue); - - public static InternalRealtimeResponseVoice Coral { get; } = new InternalRealtimeResponseVoice(CoralValue); - - public static InternalRealtimeResponseVoice Echo { get; } = new InternalRealtimeResponseVoice(EchoValue); - - public static InternalRealtimeResponseVoice Sage { get; } = new InternalRealtimeResponseVoice(SageValue); - - public static InternalRealtimeResponseVoice Shimmer { get; } = new InternalRealtimeResponseVoice(ShimmerValue); - - public static InternalRealtimeResponseVoice Verse { get; } = new InternalRealtimeResponseVoice(VerseValue); - - public static bool operator ==(InternalRealtimeResponseVoice left, InternalRealtimeResponseVoice right) => left.Equals(right); - - public static bool operator !=(InternalRealtimeResponseVoice left, InternalRealtimeResponseVoice right) => !left.Equals(right); - - public static implicit operator InternalRealtimeResponseVoice(string value) => new InternalRealtimeResponseVoice(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRealtimeResponseVoice other && Equals(other); - - public bool Equals(InternalRealtimeResponseVoice 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/InternalRealtimeSemanticVadTurnDetection.Serialization.cs b/src/Generated/Models/InternalRealtimeSemanticVadTurnDetection.Serialization.cs new file mode 100644 index 000000000..9faf721af --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSemanticVadTurnDetection.Serialization.cs @@ -0,0 +1,139 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSemanticVadTurnDetection : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSemanticVadTurnDetection)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(Eagerness) && _additionalBinaryDataProperties?.ContainsKey("eagerness") != true) + { + writer.WritePropertyName("eagerness"u8); + writer.WriteStringValue(Eagerness.Value.ToString()); + } + } + + InternalRealtimeSemanticVadTurnDetection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeSemanticVadTurnDetection)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override TurnDetectionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSemanticVadTurnDetection)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSemanticVadTurnDetection(document.RootElement, options); + } + + internal static InternalRealtimeSemanticVadTurnDetection DeserializeInternalRealtimeSemanticVadTurnDetection(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + TurnDetectionKind kind = default; + bool? responseCreationEnabled = default; + bool? responseInterruptionEnabled = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalRealtimeSemanticVadTurnDetectionEagerness? eagerness = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToTurnDetectionKind(); + continue; + } + if (prop.NameEquals("create_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseCreationEnabled = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("interrupt_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseInterruptionEnabled = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("eagerness"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + eagerness = new InternalRealtimeSemanticVadTurnDetectionEagerness(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSemanticVadTurnDetection(kind, responseCreationEnabled, responseInterruptionEnabled, additionalBinaryDataProperties, eagerness); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSemanticVadTurnDetection)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSemanticVadTurnDetection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeSemanticVadTurnDetection)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override TurnDetectionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSemanticVadTurnDetection(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSemanticVadTurnDetection)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSemanticVadTurnDetection.cs b/src/Generated/Models/InternalRealtimeSemanticVadTurnDetection.cs new file mode 100644 index 000000000..4be69a310 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSemanticVadTurnDetection.cs @@ -0,0 +1,23 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSemanticVadTurnDetection : TurnDetectionOptions + { + public InternalRealtimeSemanticVadTurnDetection() : this(TurnDetectionKind.SemanticVoiceActivityDetection, default, default, null, default) + { + } + + internal InternalRealtimeSemanticVadTurnDetection(TurnDetectionKind kind, bool? responseCreationEnabled, bool? responseInterruptionEnabled, IDictionary additionalBinaryDataProperties, InternalRealtimeSemanticVadTurnDetectionEagerness? eagerness) : base(kind, responseCreationEnabled, responseInterruptionEnabled, additionalBinaryDataProperties) + { + Eagerness = eagerness; + } + + internal InternalRealtimeSemanticVadTurnDetectionEagerness? Eagerness { get; set; } + } +} diff --git a/src/Generated/Models/InternalRealtimeSemanticVadTurnDetectionEagerness.cs b/src/Generated/Models/InternalRealtimeSemanticVadTurnDetectionEagerness.cs new file mode 100644 index 000000000..c8b423001 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSemanticVadTurnDetectionEagerness.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeSemanticVadTurnDetectionEagerness : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + private const string AutoValue = "auto"; + + public InternalRealtimeSemanticVadTurnDetectionEagerness(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeSemanticVadTurnDetectionEagerness Low { get; } = new InternalRealtimeSemanticVadTurnDetectionEagerness(LowValue); + + internal static InternalRealtimeSemanticVadTurnDetectionEagerness Medium { get; } = new InternalRealtimeSemanticVadTurnDetectionEagerness(MediumValue); + + internal static InternalRealtimeSemanticVadTurnDetectionEagerness High { get; } = new InternalRealtimeSemanticVadTurnDetectionEagerness(HighValue); + + internal static InternalRealtimeSemanticVadTurnDetectionEagerness Auto { get; } = new InternalRealtimeSemanticVadTurnDetectionEagerness(AutoValue); + + public static bool operator ==(InternalRealtimeSemanticVadTurnDetectionEagerness left, InternalRealtimeSemanticVadTurnDetectionEagerness right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeSemanticVadTurnDetectionEagerness left, InternalRealtimeSemanticVadTurnDetectionEagerness right) => !left.Equals(right); + + public static implicit operator InternalRealtimeSemanticVadTurnDetectionEagerness(string value) => new InternalRealtimeSemanticVadTurnDetectionEagerness(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeSemanticVadTurnDetectionEagerness other && Equals(other); + + public bool Equals(InternalRealtimeSemanticVadTurnDetectionEagerness 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/InternalRealtimeServerEventConversationCreated.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventConversationCreated.Serialization.cs index b58973e1e..1ed00da1a 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationCreated.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationCreated.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventConversationCreated : IJsonModel { - internal InternalRealtimeServerEventConversationCreated() + internal InternalRealtimeServerEventConversationCreated() : this(RealtimeUpdateKind.ConversationCreated, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,7 +42,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeServerEventConversationCreated IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventConversationCreated)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -58,20 +60,20 @@ internal static InternalRealtimeServerEventConversationCreated DeserializeIntern { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeServerEventConversationCreatedConversation conversation = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("conversation"u8)) @@ -79,20 +81,22 @@ internal static InternalRealtimeServerEventConversationCreated DeserializeIntern conversation = InternalRealtimeServerEventConversationCreatedConversation.DeserializeInternalRealtimeServerEventConversationCreatedConversation(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeServerEventConversationCreated(eventId, kind, additionalBinaryDataProperties, conversation); + return new InternalRealtimeServerEventConversationCreated(kind, eventId, additionalBinaryDataProperties, conversation); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventConversationCreated)} does not support writing '{options.Format}' format."); } @@ -100,7 +104,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventConversationCreated IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventConversationCreated)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -116,21 +121,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventConversationCreated internalRealtimeServerEventConversationCreated) - { - if (internalRealtimeServerEventConversationCreated == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventConversationCreated, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventConversationCreated(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventConversationCreated(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationCreated.cs b/src/Generated/Models/InternalRealtimeServerEventConversationCreated.cs index f8af7f093..b30d2101a 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationCreated.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationCreated.cs @@ -5,20 +5,20 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerEventConversationCreated : ConversationUpdate + internal partial class InternalRealtimeServerEventConversationCreated : RealtimeUpdate { - internal InternalRealtimeServerEventConversationCreated(string eventId, InternalRealtimeServerEventConversationCreatedConversation conversation) : base(eventId, ConversationUpdateKind.ConversationCreated) + internal InternalRealtimeServerEventConversationCreated(InternalRealtimeServerEventConversationCreatedConversation conversation) : base(RealtimeUpdateKind.ConversationCreated) { Conversation = conversation; } - internal InternalRealtimeServerEventConversationCreated(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeServerEventConversationCreatedConversation conversation) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventConversationCreated(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, InternalRealtimeServerEventConversationCreatedConversation conversation) : base(kind, eventId, additionalBinaryDataProperties) { Conversation = conversation; } - public InternalRealtimeServerEventConversationCreatedConversation Conversation { get; } + internal InternalRealtimeServerEventConversationCreatedConversation Conversation { get; } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.Serialization.cs index 87b84af7b..fd39277e1 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventConversationCreatedConversation : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeServerEventConversationCreatedConversation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeServerEventConversationCreatedConversation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,6 +95,7 @@ internal static InternalRealtimeServerEventConversationCreatedConversation Deser @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventConversationCreatedConversation(id, @object, additionalBinaryDataProperties); @@ -99,13 +103,14 @@ internal static InternalRealtimeServerEventConversationCreatedConversation Deser BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventConversationCreatedConversation)} does not support writing '{options.Format}' format."); } @@ -113,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventConversationCreatedConversation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeServerEventConversationCreatedConversation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,21 +135,5 @@ protected virtual InternalRealtimeServerEventConversationCreatedConversation Per } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventConversationCreatedConversation internalRealtimeServerEventConversationCreatedConversation) - { - if (internalRealtimeServerEventConversationCreatedConversation == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventConversationCreatedConversation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventConversationCreatedConversation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventConversationCreatedConversation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.cs b/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.cs index 53ad76b45..c631c257d 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationCreatedConversation.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventConversationCreatedConversation { diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.Serialization.cs index c60f95601..60c8f9d9b 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,10 +28,10 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError)} does not support writing '{format}' format."); } - if (Optional.IsDefined(Type) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind); } if (Optional.IsDefined(Code) && _additionalBinaryDataProperties?.ContainsKey("code") != true) { @@ -47,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("param"u8); writer.WriteStringValue(Param); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -70,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -87,7 +90,7 @@ internal static InternalRealtimeServerEventConversationItemInputAudioTranscripti { return null; } - string @type = default; + string kind = default; string code = default; string message = default; string @param = default; @@ -96,7 +99,7 @@ internal static InternalRealtimeServerEventConversationItemInputAudioTranscripti { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = prop.Value.GetString(); continue; } if (prop.NameEquals("code"u8)) @@ -114,20 +117,22 @@ internal static InternalRealtimeServerEventConversationItemInputAudioTranscripti @param = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(@type, code, message, @param, additionalBinaryDataProperties); + return new InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(kind, code, message, @param, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError)} does not support writing '{options.Format}' format."); } @@ -135,6 +140,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -151,21 +157,5 @@ protected virtual InternalRealtimeServerEventConversationItemInputAudioTranscrip } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError internalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError) - { - if (internalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.cs b/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.cs index f760303d7..24d206467 100644 --- a/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.cs +++ b/src/Generated/Models/InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError { @@ -15,16 +15,16 @@ internal InternalRealtimeServerEventConversationItemInputAudioTranscriptionFaile { } - internal InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(string @type, string code, string message, string @param, IDictionary additionalBinaryDataProperties) + internal InternalRealtimeServerEventConversationItemInputAudioTranscriptionFailedError(string kind, string code, string message, string @param, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; Code = code; Message = message; Param = @param; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public string Type { get; } + public string Kind { get; } public string Code { get; } diff --git a/src/Generated/Models/InternalRealtimeServerEventErrorError.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventErrorError.Serialization.cs index 60f7f5341..b9f77d0dd 100644 --- a/src/Generated/Models/InternalRealtimeServerEventErrorError.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventErrorError.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventErrorError : IJsonModel { @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,7 +35,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind); } if (Optional.IsDefined(Code) && _additionalBinaryDataProperties?.ContainsKey("code") != true) { @@ -56,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("event_id"u8); writer.WriteStringValue(EventId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -79,6 +81,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeServerEventErrorError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeServerEventErrorError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,7 +99,7 @@ internal static InternalRealtimeServerEventErrorError DeserializeInternalRealtim { return null; } - string @type = default; + string kind = default; string code = default; string message = default; string @param = default; @@ -106,7 +109,7 @@ internal static InternalRealtimeServerEventErrorError DeserializeInternalRealtim { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = prop.Value.GetString(); continue; } if (prop.NameEquals("code"u8)) @@ -144,10 +147,11 @@ internal static InternalRealtimeServerEventErrorError DeserializeInternalRealtim eventId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventErrorError( - @type, + kind, code, message, @param, @@ -157,13 +161,14 @@ internal static InternalRealtimeServerEventErrorError DeserializeInternalRealtim BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventErrorError)} does not support writing '{options.Format}' format."); } @@ -171,6 +176,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventErrorError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeServerEventErrorError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -187,21 +193,5 @@ protected virtual InternalRealtimeServerEventErrorError PersistableModelCreateCo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventErrorError internalRealtimeServerEventErrorError) - { - if (internalRealtimeServerEventErrorError == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventErrorError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventErrorError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventErrorError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventErrorError.cs b/src/Generated/Models/InternalRealtimeServerEventErrorError.cs index 07233ba4a..3aa96e674 100644 --- a/src/Generated/Models/InternalRealtimeServerEventErrorError.cs +++ b/src/Generated/Models/InternalRealtimeServerEventErrorError.cs @@ -5,21 +5,21 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventErrorError { private protected IDictionary _additionalBinaryDataProperties; - internal InternalRealtimeServerEventErrorError(string @type, string message) + internal InternalRealtimeServerEventErrorError(string kind, string message) { - Type = @type; + Kind = kind; Message = message; } - internal InternalRealtimeServerEventErrorError(string @type, string code, string message, string @param, string eventId, IDictionary additionalBinaryDataProperties) + internal InternalRealtimeServerEventErrorError(string kind, string code, string message, string @param, string eventId, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; Code = code; Message = message; Param = @param; @@ -27,7 +27,7 @@ internal InternalRealtimeServerEventErrorError(string @type, string code, string _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public string Type { get; } + public string Kind { get; } public string Code { get; } diff --git a/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferCleared.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferCleared.Serialization.cs new file mode 100644 index 000000000..72a17f15a --- /dev/null +++ b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferCleared.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeServerEventOutputAudioBufferCleared : IJsonModel + { + internal InternalRealtimeServerEventOutputAudioBufferCleared() : this(RealtimeUpdateKind.OutputAudioBufferCleared, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferCleared)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) + { + writer.WritePropertyName("response_id"u8); + writer.WriteStringValue(ResponseId); + } + } + + InternalRealtimeServerEventOutputAudioBufferCleared IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventOutputAudioBufferCleared)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferCleared)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeServerEventOutputAudioBufferCleared(document.RootElement, options); + } + + internal static InternalRealtimeServerEventOutputAudioBufferCleared DeserializeInternalRealtimeServerEventOutputAudioBufferCleared(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string responseId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response_id"u8)) + { + responseId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeServerEventOutputAudioBufferCleared(kind, eventId, additionalBinaryDataProperties, responseId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeServerEventOutputAudioBufferCleared)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeServerEventOutputAudioBufferCleared IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventOutputAudioBufferCleared)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeServerEventOutputAudioBufferCleared(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferCleared)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferCleared.cs b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferCleared.cs new file mode 100644 index 000000000..186963015 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferCleared.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeServerEventOutputAudioBufferCleared : RealtimeUpdate + { + internal InternalRealtimeServerEventOutputAudioBufferCleared(string responseId) : base(RealtimeUpdateKind.OutputAudioBufferCleared) + { + ResponseId = responseId; + } + + internal InternalRealtimeServerEventOutputAudioBufferCleared(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId) : base(kind, eventId, additionalBinaryDataProperties) + { + ResponseId = responseId; + } + + public string ResponseId { get; } + } +} diff --git a/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStarted.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStarted.Serialization.cs new file mode 100644 index 000000000..10e526895 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStarted.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeServerEventOutputAudioBufferStarted : IJsonModel + { + internal InternalRealtimeServerEventOutputAudioBufferStarted() : this(RealtimeUpdateKind.OutputAudioBufferStarted, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferStarted)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) + { + writer.WritePropertyName("response_id"u8); + writer.WriteStringValue(ResponseId); + } + } + + InternalRealtimeServerEventOutputAudioBufferStarted IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventOutputAudioBufferStarted)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferStarted)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeServerEventOutputAudioBufferStarted(document.RootElement, options); + } + + internal static InternalRealtimeServerEventOutputAudioBufferStarted DeserializeInternalRealtimeServerEventOutputAudioBufferStarted(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string responseId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response_id"u8)) + { + responseId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeServerEventOutputAudioBufferStarted(kind, eventId, additionalBinaryDataProperties, responseId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeServerEventOutputAudioBufferStarted)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeServerEventOutputAudioBufferStarted IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventOutputAudioBufferStarted)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeServerEventOutputAudioBufferStarted(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferStarted)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStarted.cs b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStarted.cs new file mode 100644 index 000000000..cd8a1f0d7 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStarted.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeServerEventOutputAudioBufferStarted : RealtimeUpdate + { + internal InternalRealtimeServerEventOutputAudioBufferStarted(string responseId) : base(RealtimeUpdateKind.OutputAudioBufferStarted) + { + ResponseId = responseId; + } + + internal InternalRealtimeServerEventOutputAudioBufferStarted(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId) : base(kind, eventId, additionalBinaryDataProperties) + { + ResponseId = responseId; + } + + public string ResponseId { get; } + } +} diff --git a/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStopped.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStopped.Serialization.cs new file mode 100644 index 000000000..3e2be661f --- /dev/null +++ b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStopped.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeServerEventOutputAudioBufferStopped : IJsonModel + { + internal InternalRealtimeServerEventOutputAudioBufferStopped() : this(RealtimeUpdateKind.OutputAudioBufferStopped, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferStopped)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) + { + writer.WritePropertyName("response_id"u8); + writer.WriteStringValue(ResponseId); + } + } + + InternalRealtimeServerEventOutputAudioBufferStopped IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventOutputAudioBufferStopped)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferStopped)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeServerEventOutputAudioBufferStopped(document.RootElement, options); + } + + internal static InternalRealtimeServerEventOutputAudioBufferStopped DeserializeInternalRealtimeServerEventOutputAudioBufferStopped(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string responseId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response_id"u8)) + { + responseId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeServerEventOutputAudioBufferStopped(kind, eventId, additionalBinaryDataProperties, responseId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeServerEventOutputAudioBufferStopped)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeServerEventOutputAudioBufferStopped IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventOutputAudioBufferStopped)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeServerEventOutputAudioBufferStopped(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeServerEventOutputAudioBufferStopped)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStopped.cs b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStopped.cs new file mode 100644 index 000000000..f43958647 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeServerEventOutputAudioBufferStopped.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeServerEventOutputAudioBufferStopped : RealtimeUpdate + { + internal InternalRealtimeServerEventOutputAudioBufferStopped(string responseId) : base(RealtimeUpdateKind.OutputAudioBufferStopped) + { + ResponseId = responseId; + } + + internal InternalRealtimeServerEventOutputAudioBufferStopped(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId) : base(kind, eventId, additionalBinaryDataProperties) + { + ResponseId = responseId; + } + + public string ResponseId { get; } + } +} diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.Serialization.cs index 0ace35b82..ef85594a8 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventResponseAudioDelta : IJsonModel { - internal InternalRealtimeServerEventResponseAudioDelta() + internal InternalRealtimeServerEventResponseAudioDelta() : this(RealtimeUpdateKind.ItemStreamingPartAudioDelta, null, null, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +62,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeServerEventResponseAudioDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseAudioDelta)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -78,8 +80,8 @@ internal static InternalRealtimeServerEventResponseAudioDelta DeserializeInterna { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -88,14 +90,14 @@ internal static InternalRealtimeServerEventResponseAudioDelta DeserializeInterna BinaryData delta = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("response_id"u8)) @@ -123,11 +125,12 @@ internal static InternalRealtimeServerEventResponseAudioDelta DeserializeInterna delta = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseAudioDelta( - eventId, kind, + eventId, additionalBinaryDataProperties, responseId, itemId, @@ -138,13 +141,14 @@ internal static InternalRealtimeServerEventResponseAudioDelta DeserializeInterna BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventResponseAudioDelta)} does not support writing '{options.Format}' format."); } @@ -152,7 +156,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventResponseAudioDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseAudioDelta)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -168,21 +173,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventResponseAudioDelta internalRealtimeServerEventResponseAudioDelta) - { - if (internalRealtimeServerEventResponseAudioDelta == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventResponseAudioDelta, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventResponseAudioDelta(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventResponseAudioDelta(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.cs b/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.cs index da38f26b6..7e1be560f 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseAudioDelta.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerEventResponseAudioDelta : ConversationUpdate + internal partial class InternalRealtimeServerEventResponseAudioDelta : RealtimeUpdate { - internal InternalRealtimeServerEventResponseAudioDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(eventId, ConversationUpdateKind.ItemStreamingPartAudioDelta) + internal InternalRealtimeServerEventResponseAudioDelta(string responseId, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(RealtimeUpdateKind.ItemStreamingPartAudioDelta) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseAudioDelta(string eventId, string re Delta = delta; } - internal InternalRealtimeServerEventResponseAudioDelta(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseAudioDelta(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(kind, eventId, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.Serialization.cs index 283fb7c21..ac287578f 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventResponseAudioTranscriptDelta : IJsonModel { - internal InternalRealtimeServerEventResponseAudioTranscriptDelta() + internal InternalRealtimeServerEventResponseAudioTranscriptDelta() : this(RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionDelta, null, null, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(U writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +62,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeServerEventResponseAudioTranscriptDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseAudioTranscriptDelta)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -78,8 +80,8 @@ internal static InternalRealtimeServerEventResponseAudioTranscriptDelta Deserial { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -88,14 +90,14 @@ internal static InternalRealtimeServerEventResponseAudioTranscriptDelta Deserial string delta = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("response_id"u8)) @@ -123,11 +125,12 @@ internal static InternalRealtimeServerEventResponseAudioTranscriptDelta Deserial delta = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseAudioTranscriptDelta( - eventId, kind, + eventId, additionalBinaryDataProperties, responseId, itemId, @@ -138,13 +141,14 @@ internal static InternalRealtimeServerEventResponseAudioTranscriptDelta Deserial BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventResponseAudioTranscriptDelta)} does not support writing '{options.Format}' format."); } @@ -152,7 +156,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventResponseAudioTranscriptDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseAudioTranscriptDelta)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -168,21 +173,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventResponseAudioTranscriptDelta internalRealtimeServerEventResponseAudioTranscriptDelta) - { - if (internalRealtimeServerEventResponseAudioTranscriptDelta == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventResponseAudioTranscriptDelta, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventResponseAudioTranscriptDelta(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventResponseAudioTranscriptDelta(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs b/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs index b8291542b..4a2c44105 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseAudioTranscriptDelta.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerEventResponseAudioTranscriptDelta : ConversationUpdate + internal partial class InternalRealtimeServerEventResponseAudioTranscriptDelta : RealtimeUpdate { - internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, ConversationUpdateKind.ItemStreamingPartAudioTranscriptionDelta) + internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionDelta) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string eventId, Delta = delta; } - internal InternalRealtimeServerEventResponseAudioTranscriptDelta(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseAudioTranscriptDelta(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(kind, eventId, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.Serialization.cs index 25d191b59..a968b9e99 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventResponseContentPartAdded : IJsonModel { - internal InternalRealtimeServerEventResponseContentPartAdded() + internal InternalRealtimeServerEventResponseContentPartAdded() : this(RealtimeUpdateKind.ItemContentPartStarted, null, null, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8J writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +62,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeServerEventResponseContentPartAdded IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseContentPartAdded)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -78,8 +80,8 @@ internal static InternalRealtimeServerEventResponseContentPartAdded DeserializeI { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -88,14 +90,14 @@ internal static InternalRealtimeServerEventResponseContentPartAdded DeserializeI ConversationContentPart internalContentPart = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("response_id"u8)) @@ -123,11 +125,12 @@ internal static InternalRealtimeServerEventResponseContentPartAdded DeserializeI internalContentPart = ConversationContentPart.DeserializeConversationContentPart(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseContentPartAdded( - eventId, kind, + eventId, additionalBinaryDataProperties, responseId, itemId, @@ -138,13 +141,14 @@ internal static InternalRealtimeServerEventResponseContentPartAdded DeserializeI BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventResponseContentPartAdded)} does not support writing '{options.Format}' format."); } @@ -152,7 +156,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventResponseContentPartAdded IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseContentPartAdded)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -168,21 +173,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventResponseContentPartAdded internalRealtimeServerEventResponseContentPartAdded) - { - if (internalRealtimeServerEventResponseContentPartAdded == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventResponseContentPartAdded, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventResponseContentPartAdded(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventResponseContentPartAdded(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.cs b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.cs index 8dabfe0c1..e56df366b 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartAdded.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerEventResponseContentPartAdded : ConversationUpdate + internal partial class InternalRealtimeServerEventResponseContentPartAdded : RealtimeUpdate { - internal InternalRealtimeServerEventResponseContentPartAdded(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, ConversationUpdateKind.ItemContentPartStarted) + internal InternalRealtimeServerEventResponseContentPartAdded(string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(RealtimeUpdateKind.ItemContentPartStarted) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseContentPartAdded(string eventId, str _internalContentPart = internalContentPart; } - internal InternalRealtimeServerEventResponseContentPartAdded(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseContentPartAdded(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(kind, eventId, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.Serialization.cs index ee6d9d37c..4f853e6bb 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventResponseContentPartDone : IJsonModel { - internal InternalRealtimeServerEventResponseContentPartDone() + internal InternalRealtimeServerEventResponseContentPartDone() : this(RealtimeUpdateKind.ItemContentPartFinished, null, null, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Js writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +62,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeServerEventResponseContentPartDone IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseContentPartDone)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -78,8 +80,8 @@ internal static InternalRealtimeServerEventResponseContentPartDone DeserializeIn { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -88,14 +90,14 @@ internal static InternalRealtimeServerEventResponseContentPartDone DeserializeIn ConversationContentPart internalContentPart = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("response_id"u8)) @@ -123,11 +125,12 @@ internal static InternalRealtimeServerEventResponseContentPartDone DeserializeIn internalContentPart = ConversationContentPart.DeserializeConversationContentPart(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseContentPartDone( - eventId, kind, + eventId, additionalBinaryDataProperties, responseId, itemId, @@ -138,13 +141,14 @@ internal static InternalRealtimeServerEventResponseContentPartDone DeserializeIn BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventResponseContentPartDone)} does not support writing '{options.Format}' format."); } @@ -152,7 +156,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventResponseContentPartDone IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseContentPartDone)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -168,21 +173,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventResponseContentPartDone internalRealtimeServerEventResponseContentPartDone) - { - if (internalRealtimeServerEventResponseContentPartDone == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventResponseContentPartDone, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventResponseContentPartDone(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventResponseContentPartDone(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.cs b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.cs index 427c1edbf..2a02c40cc 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseContentPartDone.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerEventResponseContentPartDone : ConversationUpdate + internal partial class InternalRealtimeServerEventResponseContentPartDone : RealtimeUpdate { - internal InternalRealtimeServerEventResponseContentPartDone(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, ConversationUpdateKind.ItemContentPartFinished) + internal InternalRealtimeServerEventResponseContentPartDone(string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(RealtimeUpdateKind.ItemContentPartFinished) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseContentPartDone(string eventId, stri _internalContentPart = internalContentPart; } - internal InternalRealtimeServerEventResponseContentPartDone(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseContentPartDone(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, ConversationContentPart internalContentPart) : base(kind, eventId, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.Serialization.cs index 3b5c63a2d..c04e5400c 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDelta : IJsonModel { - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta() + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta() : this(RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsDelta, null, null, null, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.W writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +62,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeServerEventResponseFunctionCallArgumentsDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseFunctionCallArgumentsDelta)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -78,8 +80,8 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDelta De { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -88,14 +90,14 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDelta De string delta = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("response_id"u8)) @@ -123,11 +125,12 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDelta De delta = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseFunctionCallArgumentsDelta( - eventId, kind, + eventId, additionalBinaryDataProperties, responseId, itemId, @@ -138,13 +141,14 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDelta De BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventResponseFunctionCallArgumentsDelta)} does not support writing '{options.Format}' format."); } @@ -152,7 +156,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventResponseFunctionCallArgumentsDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseFunctionCallArgumentsDelta)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -168,21 +173,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventResponseFunctionCallArgumentsDelta internalRealtimeServerEventResponseFunctionCallArgumentsDelta) - { - if (internalRealtimeServerEventResponseFunctionCallArgumentsDelta == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventResponseFunctionCallArgumentsDelta, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventResponseFunctionCallArgumentsDelta(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs index f6db1190b..137e5355a 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDelta.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDelta : ConversationUpdate + internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDelta : RealtimeUpdate { - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string eventId, string responseId, string itemId, int outputIndex, string callId, string delta) : base(eventId, ConversationUpdateKind.ItemStreamingFunctionCallArgumentsDelta) + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string responseId, string itemId, int outputIndex, string callId, string delta) : base(RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsDelta) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string ev Delta = delta; } - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, string callId, string delta) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDelta(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, string callId, string delta) : base(kind, eventId, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.Serialization.cs index 32fbf675b..bdb0d9c69 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDone : IJsonModel { - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone() + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone() : this(RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsFinished, null, null, null, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +62,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeServerEventResponseFunctionCallArgumentsDone IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseFunctionCallArgumentsDone)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -78,8 +80,8 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDone Des { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -88,14 +90,14 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDone Des string arguments = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("response_id"u8)) @@ -123,11 +125,12 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDone Des arguments = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseFunctionCallArgumentsDone( - eventId, kind, + eventId, additionalBinaryDataProperties, responseId, itemId, @@ -138,13 +141,14 @@ internal static InternalRealtimeServerEventResponseFunctionCallArgumentsDone Des BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventResponseFunctionCallArgumentsDone)} does not support writing '{options.Format}' format."); } @@ -152,7 +156,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventResponseFunctionCallArgumentsDone IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseFunctionCallArgumentsDone)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -168,21 +173,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventResponseFunctionCallArgumentsDone internalRealtimeServerEventResponseFunctionCallArgumentsDone) - { - if (internalRealtimeServerEventResponseFunctionCallArgumentsDone == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventResponseFunctionCallArgumentsDone, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventResponseFunctionCallArgumentsDone(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventResponseFunctionCallArgumentsDone(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs index 89697cf0b..85ec4833a 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseFunctionCallArgumentsDone.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDone : ConversationUpdate + internal partial class InternalRealtimeServerEventResponseFunctionCallArgumentsDone : RealtimeUpdate { - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string eventId, string responseId, string itemId, int outputIndex, string callId, string arguments) : base(eventId, ConversationUpdateKind.ItemStreamingFunctionCallArgumentsFinished) + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string responseId, string itemId, int outputIndex, string callId, string arguments) : base(RealtimeUpdateKind.ItemStreamingFunctionCallArgumentsFinished) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string eve Arguments = arguments; } - internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, string callId, string arguments) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseFunctionCallArgumentsDone(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, string callId, string arguments) : base(kind, eventId, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.Serialization.cs b/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.Serialization.cs index 678735b63..2b01874c0 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerEventResponseTextDelta : IJsonModel { - internal InternalRealtimeServerEventResponseTextDelta() + internal InternalRealtimeServerEventResponseTextDelta() : this(RealtimeUpdateKind.ItemStreamingPartTextDelta, null, null, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +62,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeServerEventResponseTextDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseTextDelta)JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -78,8 +80,8 @@ internal static InternalRealtimeServerEventResponseTextDelta DeserializeInternal { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string responseId = default; string itemId = default; @@ -88,14 +90,14 @@ internal static InternalRealtimeServerEventResponseTextDelta DeserializeInternal string delta = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } if (prop.NameEquals("response_id"u8)) @@ -123,11 +125,12 @@ internal static InternalRealtimeServerEventResponseTextDelta DeserializeInternal delta = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerEventResponseTextDelta( - eventId, kind, + eventId, additionalBinaryDataProperties, responseId, itemId, @@ -138,13 +141,14 @@ internal static InternalRealtimeServerEventResponseTextDelta DeserializeInternal BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerEventResponseTextDelta)} does not support writing '{options.Format}' format."); } @@ -152,7 +156,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerEventResponseTextDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerEventResponseTextDelta)PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -168,21 +173,5 @@ protected override ConversationUpdate PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerEventResponseTextDelta internalRealtimeServerEventResponseTextDelta) - { - if (internalRealtimeServerEventResponseTextDelta == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerEventResponseTextDelta, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerEventResponseTextDelta(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerEventResponseTextDelta(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.cs b/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.cs index b07162a8e..a553b8344 100644 --- a/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.cs +++ b/src/Generated/Models/InternalRealtimeServerEventResponseTextDelta.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerEventResponseTextDelta : ConversationUpdate + internal partial class InternalRealtimeServerEventResponseTextDelta : RealtimeUpdate { - internal InternalRealtimeServerEventResponseTextDelta(string eventId, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, ConversationUpdateKind.ItemStreamingPartTextDelta) + internal InternalRealtimeServerEventResponseTextDelta(string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(RealtimeUpdateKind.ItemStreamingPartTextDelta) { ResponseId = responseId; ItemId = itemId; @@ -18,7 +18,7 @@ internal InternalRealtimeServerEventResponseTextDelta(string eventId, string res Delta = delta; } - internal InternalRealtimeServerEventResponseTextDelta(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(eventId, kind, additionalBinaryDataProperties) + internal InternalRealtimeServerEventResponseTextDelta(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string delta) : base(kind, eventId, additionalBinaryDataProperties) { ResponseId = responseId; ItemId = itemId; diff --git a/src/Generated/Models/InternalRealtimeServerVadTurnDetection.Serialization.cs b/src/Generated/Models/InternalRealtimeServerVadTurnDetection.Serialization.cs index 6cf39a3f6..69308501c 100644 --- a/src/Generated/Models/InternalRealtimeServerVadTurnDetection.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeServerVadTurnDetection.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeServerVadTurnDetection : IJsonModel { @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -43,16 +44,12 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri writer.WritePropertyName("silence_duration_ms"u8); SerializeSilenceDurationMs(writer, options); } - if (Optional.IsDefined(CreateResponse) && _additionalBinaryDataProperties?.ContainsKey("create_response") != true) - { - writer.WritePropertyName("create_response"u8); - writer.WriteBooleanValue(CreateResponse.Value); - } } InternalRealtimeServerVadTurnDetection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeServerVadTurnDetection)JsonModelCreateCore(ref reader, options); - protected override ConversationTurnDetectionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override TurnDetectionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -69,17 +66,36 @@ internal static InternalRealtimeServerVadTurnDetection DeserializeInternalRealti { return null; } - ConversationTurnDetectionKind kind = default; + TurnDetectionKind kind = default; + bool? responseCreationEnabled = default; + bool? responseInterruptionEnabled = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); float? threshold = default; TimeSpan? prefixPaddingMs = default; TimeSpan? silenceDurationMs = default; - bool? createResponse = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - kind = prop.Value.GetString().ToConversationTurnDetectionKind(); + kind = prop.Value.GetString().ToTurnDetectionKind(); + continue; + } + if (prop.NameEquals("create_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseCreationEnabled = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("interrupt_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseInterruptionEnabled = prop.Value.GetBoolean(); continue; } if (prop.NameEquals("threshold"u8)) @@ -101,35 +117,29 @@ internal static InternalRealtimeServerVadTurnDetection DeserializeInternalRealti DeserializeMillisecondDuration(prop, ref silenceDurationMs); continue; } - if (prop.NameEquals("create_response"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - createResponse = prop.Value.GetBoolean(); - continue; - } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeServerVadTurnDetection( kind, + responseCreationEnabled, + responseInterruptionEnabled, additionalBinaryDataProperties, threshold, prefixPaddingMs, - silenceDurationMs, - createResponse); + silenceDurationMs); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeServerVadTurnDetection)} does not support writing '{options.Format}' format."); } @@ -137,7 +147,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeServerVadTurnDetection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeServerVadTurnDetection)PersistableModelCreateCore(data, options); - protected override ConversationTurnDetectionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override TurnDetectionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -153,21 +164,5 @@ protected override ConversationTurnDetectionOptions PersistableModelCreateCore(B } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeServerVadTurnDetection internalRealtimeServerVadTurnDetection) - { - if (internalRealtimeServerVadTurnDetection == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeServerVadTurnDetection, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeServerVadTurnDetection(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeServerVadTurnDetection(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeServerVadTurnDetection.cs b/src/Generated/Models/InternalRealtimeServerVadTurnDetection.cs index 45c55b338..d76642e05 100644 --- a/src/Generated/Models/InternalRealtimeServerVadTurnDetection.cs +++ b/src/Generated/Models/InternalRealtimeServerVadTurnDetection.cs @@ -5,20 +5,19 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class InternalRealtimeServerVadTurnDetection : ConversationTurnDetectionOptions + internal partial class InternalRealtimeServerVadTurnDetection : TurnDetectionOptions { - public InternalRealtimeServerVadTurnDetection() : base(ConversationTurnDetectionKind.ServerVoiceActivityDetection) + public InternalRealtimeServerVadTurnDetection() : this(TurnDetectionKind.ServerVoiceActivityDetection, default, default, null, default, default, default) { } - internal InternalRealtimeServerVadTurnDetection(ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties, float? threshold, TimeSpan? prefixPaddingMs, TimeSpan? silenceDurationMs, bool? createResponse) : base(kind, additionalBinaryDataProperties) + internal InternalRealtimeServerVadTurnDetection(TurnDetectionKind kind, bool? responseCreationEnabled, bool? responseInterruptionEnabled, IDictionary additionalBinaryDataProperties, float? threshold, TimeSpan? prefixPaddingMs, TimeSpan? silenceDurationMs) : base(kind, responseCreationEnabled, responseInterruptionEnabled, additionalBinaryDataProperties) { Threshold = threshold; PrefixPaddingMs = prefixPaddingMs; SilenceDurationMs = silenceDurationMs; - CreateResponse = createResponse; } public float? Threshold { get; set; } @@ -26,7 +25,5 @@ internal InternalRealtimeServerVadTurnDetection(ConversationTurnDetectionKind ki public TimeSpan? PrefixPaddingMs { get; set; } public TimeSpan? SilenceDurationMs { get; set; } - - public bool? CreateResponse { get; set; } } } diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequest.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequest.Serialization.cs new file mode 100644 index 000000000..55e2858b8 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequest.Serialization.cs @@ -0,0 +1,402 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequest : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequest)} does not support writing '{format}' format."); + } + if (Optional.IsCollectionDefined(Modalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) + { + writer.WritePropertyName("modalities"u8); + writer.WriteStartArray(); + foreach (InternalRealtimeRequestSessionModality item in Modalities) + { + writer.WriteStringValue(item.ToString()); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.Value.ToString()); + } + if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) + { + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); + } + if (Optional.IsDefined(Voice) && _additionalBinaryDataProperties?.ContainsKey("voice") != true) + { + writer.WritePropertyName("voice"u8); + writer.WriteStringValue(Voice.Value.ToString()); + } + if (Optional.IsDefined(InputAudioFormat) && _additionalBinaryDataProperties?.ContainsKey("input_audio_format") != true) + { + writer.WritePropertyName("input_audio_format"u8); + writer.WriteStringValue(InputAudioFormat.Value.ToString()); + } + if (Optional.IsDefined(OutputAudioFormat) && _additionalBinaryDataProperties?.ContainsKey("output_audio_format") != true) + { + writer.WritePropertyName("output_audio_format"u8); + writer.WriteStringValue(OutputAudioFormat.Value.ToString()); + } + if (Optional.IsDefined(InputAudioTranscription) && _additionalBinaryDataProperties?.ContainsKey("input_audio_transcription") != true) + { + writer.WritePropertyName("input_audio_transcription"u8); + writer.WriteObjectValue(InputAudioTranscription, options); + } + if (Optional.IsDefined(TurnDetection) && _additionalBinaryDataProperties?.ContainsKey("turn_detection") != true) + { + writer.WritePropertyName("turn_detection"u8); + writer.WriteObjectValue(TurnDetection, options); + } + if (Optional.IsDefined(InputAudioNoiseReduction) && _additionalBinaryDataProperties?.ContainsKey("input_audio_noise_reduction") != true) + { + writer.WritePropertyName("input_audio_noise_reduction"u8); + writer.WriteObjectValue(InputAudioNoiseReduction, options); + } + if (Optional.IsDefined(Speed) && _additionalBinaryDataProperties?.ContainsKey("speed") != true) + { + writer.WritePropertyName("speed"u8); + writer.WriteNumberValue(Speed.Value); + } + if (Optional.IsDefined(Tracing) && _additionalBinaryDataProperties?.ContainsKey("tracing") != true) + { + writer.WritePropertyName("tracing"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Tracing); +#else + using (JsonDocument document = JsonDocument.Parse(Tracing)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (ConversationTool item in Tools) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(ToolChoice) && _additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) + { + writer.WritePropertyName("tool_choice"u8); + writer.WriteStringValue(ToolChoice); + } + if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) + { + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); + } + if (Optional.IsDefined(MaxResponseOutputTokens) && _additionalBinaryDataProperties?.ContainsKey("max_response_output_tokens") != true) + { + writer.WritePropertyName("max_response_output_tokens"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(MaxResponseOutputTokens); +#else + using (JsonDocument document = JsonDocument.Parse(MaxResponseOutputTokens)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(ClientSecret) && _additionalBinaryDataProperties?.ContainsKey("client_secret") != true) + { + writer.WritePropertyName("client_secret"u8); + writer.WriteObjectValue(ClientSecret, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateRequest(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateRequest DeserializeInternalRealtimeSessionCreateRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IList modalities = default; + InternalRealtimeSessionCreateRequestModel? model = default; + string instructions = default; + InternalVoiceIdsShared? voice = default; + RealtimeAudioFormat? inputAudioFormat = default; + RealtimeAudioFormat? outputAudioFormat = default; + InternalRealtimeSessionCreateRequestInputAudioTranscription inputAudioTranscription = default; + InternalRealtimeSessionCreateRequestTurnDetection turnDetection = default; + InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 inputAudioNoiseReduction = default; + float? speed = default; + BinaryData tracing = default; + IList tools = default; + string toolChoice = default; + float? temperature = default; + BinaryData maxResponseOutputTokens = default; + InternalRealtimeSessionCreateRequestClientSecret clientSecret = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("modalities"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(new InternalRealtimeRequestSessionModality(item.GetString())); + } + modalities = array; + continue; + } + if (prop.NameEquals("model"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + model = new InternalRealtimeSessionCreateRequestModel(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("instructions"u8)) + { + instructions = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("voice"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + voice = new InternalVoiceIdsShared(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input_audio_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("output_audio_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + outputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input_audio_transcription"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputAudioTranscription = InternalRealtimeSessionCreateRequestInputAudioTranscription.DeserializeInternalRealtimeSessionCreateRequestInputAudioTranscription(prop.Value, options); + continue; + } + if (prop.NameEquals("turn_detection"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + turnDetection = InternalRealtimeSessionCreateRequestTurnDetection.DeserializeInternalRealtimeSessionCreateRequestTurnDetection(prop.Value, options); + continue; + } + if (prop.NameEquals("input_audio_noise_reduction"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + inputAudioNoiseReduction = null; + continue; + } + inputAudioNoiseReduction = InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1.DeserializeInternalRealtimeSessionCreateRequestInputAudioNoiseReduction1(prop.Value, options); + continue; + } + if (prop.NameEquals("speed"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + speed = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("tracing"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + tracing = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("tools"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ConversationTool.DeserializeConversationTool(item, options)); + } + tools = array; + continue; + } + if (prop.NameEquals("tool_choice"u8)) + { + toolChoice = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("temperature"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + temperature = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("max_response_output_tokens"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + maxResponseOutputTokens = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("client_secret"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + clientSecret = InternalRealtimeSessionCreateRequestClientSecret.DeserializeInternalRealtimeSessionCreateRequestClientSecret(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateRequest( + modalities ?? new ChangeTrackingList(), + model, + instructions, + voice, + inputAudioFormat, + outputAudioFormat, + inputAudioTranscription, + turnDetection, + inputAudioNoiseReduction, + speed, + tracing, + tools ?? new ChangeTrackingList(), + toolChoice, + temperature, + maxResponseOutputTokens, + clientSecret, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequest.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequest.cs new file mode 100644 index 000000000..6cc47789c --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequest.cs @@ -0,0 +1,80 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeSessionCreateRequest() : this(null, default, null, default, default, default, null, null, null, default, null, null, null, default, null, null, null) + { + } + + internal InternalRealtimeSessionCreateRequest(IList modalities, InternalRealtimeSessionCreateRequestModel? model, string instructions, InternalVoiceIdsShared? voice, RealtimeAudioFormat? inputAudioFormat, RealtimeAudioFormat? outputAudioFormat, InternalRealtimeSessionCreateRequestInputAudioTranscription inputAudioTranscription, InternalRealtimeSessionCreateRequestTurnDetection turnDetection, InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 inputAudioNoiseReduction, float? speed, BinaryData tracing, IList tools, string toolChoice, float? temperature, BinaryData maxResponseOutputTokens, InternalRealtimeSessionCreateRequestClientSecret clientSecret, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Modalities = modalities ?? new ChangeTrackingList(); + Model = model; + Instructions = instructions; + Voice = voice; + InputAudioFormat = inputAudioFormat; + OutputAudioFormat = outputAudioFormat; + InputAudioTranscription = inputAudioTranscription; + TurnDetection = turnDetection; + InputAudioNoiseReduction = inputAudioNoiseReduction; + Speed = speed; + Tracing = tracing; + Tools = tools ?? new ChangeTrackingList(); + ToolChoice = toolChoice; + Temperature = temperature; + MaxResponseOutputTokens = maxResponseOutputTokens; + ClientSecret = clientSecret; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IList Modalities { get; } + + internal InternalRealtimeSessionCreateRequestModel? Model { get; set; } + + public string Instructions { get; set; } + + internal InternalVoiceIdsShared? Voice { get; set; } + + public RealtimeAudioFormat? InputAudioFormat { get; set; } + + public RealtimeAudioFormat? OutputAudioFormat { get; set; } + + internal InternalRealtimeSessionCreateRequestInputAudioTranscription InputAudioTranscription { get; set; } + + internal InternalRealtimeSessionCreateRequestTurnDetection TurnDetection { get; set; } + + internal InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 InputAudioNoiseReduction { get; set; } + + public float? Speed { get; set; } + + public BinaryData Tracing { get; set; } + + public IList Tools { get; } + + public string ToolChoice { get; set; } + + public float? Temperature { get; set; } + + public BinaryData MaxResponseOutputTokens { get; set; } + + internal InternalRealtimeSessionCreateRequestClientSecret ClientSecret { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecret.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecret.Serialization.cs new file mode 100644 index 000000000..ab8870a72 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecret.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestClientSecret : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestClientSecret)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(ExpiresAt) && _additionalBinaryDataProperties?.ContainsKey("expires_at") != true) + { + writer.WritePropertyName("expires_at"u8); + writer.WriteObjectValue(ExpiresAt, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateRequestClientSecret IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestClientSecret JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestClientSecret)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateRequestClientSecret(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateRequestClientSecret DeserializeInternalRealtimeSessionCreateRequestClientSecret(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeSessionCreateRequestClientSecretExpiresAt expiresAt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("expires_at"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + expiresAt = InternalRealtimeSessionCreateRequestClientSecretExpiresAt.DeserializeInternalRealtimeSessionCreateRequestClientSecretExpiresAt(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateRequestClientSecret(expiresAt, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateRequestClientSecret)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateRequestClientSecret IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestClientSecret PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateRequestClientSecret(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestClientSecret)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecret.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecret.cs new file mode 100644 index 000000000..e2662d0c7 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecret.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestClientSecret + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeSessionCreateRequestClientSecret() + { + } + + internal InternalRealtimeSessionCreateRequestClientSecret(InternalRealtimeSessionCreateRequestClientSecretExpiresAt expiresAt, IDictionary additionalBinaryDataProperties) + { + ExpiresAt = expiresAt; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeSessionCreateRequestClientSecretExpiresAt ExpiresAt { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecretExpiresAt.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecretExpiresAt.Serialization.cs new file mode 100644 index 000000000..c333b8ad8 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecretExpiresAt.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestClientSecretExpiresAt : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestClientSecretExpiresAt)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Anchor) && _additionalBinaryDataProperties?.ContainsKey("anchor") != true) + { + writer.WritePropertyName("anchor"u8); + writer.WriteStringValue(Anchor); + } + if (Optional.IsDefined(Seconds) && _additionalBinaryDataProperties?.ContainsKey("seconds") != true) + { + writer.WritePropertyName("seconds"u8); + writer.WriteNumberValue(Seconds.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateRequestClientSecretExpiresAt IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestClientSecretExpiresAt JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestClientSecretExpiresAt)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateRequestClientSecretExpiresAt(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateRequestClientSecretExpiresAt DeserializeInternalRealtimeSessionCreateRequestClientSecretExpiresAt(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string anchor = default; + int? seconds = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("anchor"u8)) + { + anchor = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("seconds"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + seconds = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateRequestClientSecretExpiresAt(anchor, seconds, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateRequestClientSecretExpiresAt)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateRequestClientSecretExpiresAt IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestClientSecretExpiresAt PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateRequestClientSecretExpiresAt(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestClientSecretExpiresAt)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecretExpiresAt.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecretExpiresAt.cs new file mode 100644 index 000000000..cb44a3bb5 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestClientSecretExpiresAt.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestClientSecretExpiresAt + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeSessionCreateRequestClientSecretExpiresAt() + { + } + + internal InternalRealtimeSessionCreateRequestClientSecretExpiresAt(string anchor, int? seconds, IDictionary additionalBinaryDataProperties) + { + Anchor = anchor; + Seconds = seconds; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Anchor { get; set; } + + public int? Seconds { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1.Serialization.cs new file mode 100644 index 000000000..832066ae0 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.Value.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateRequestInputAudioNoiseReduction1(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 DeserializeInternalRealtimeSessionCreateRequestInputAudioNoiseReduction1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType? kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + kind = new InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateRequestInputAudioNoiseReduction1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1.cs new file mode 100644 index 000000000..7576751d4 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1() + { + } + + internal InternalRealtimeSessionCreateRequestInputAudioNoiseReduction1(InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType? kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType? Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType.cs new file mode 100644 index 000000000..57933b1d6 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType : IEquatable + { + private readonly string _value; + private const string NearFieldValue = "near_field"; + private const string FarFieldValue = "far_field"; + + public InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType NearField { get; } = new InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType(NearFieldValue); + + internal static InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType FarField { get; } = new InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType(FarFieldValue); + + public static bool operator ==(InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType left, InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType left, InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType right) => !left.Equals(right); + + public static implicit operator InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType(string value) => new InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType other && Equals(other); + + public bool Equals(InternalRealtimeSessionCreateRequestInputAudioNoiseReductionType 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/InternalRealtimeSessionCreateRequestInputAudioTranscription.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioTranscription.Serialization.cs new file mode 100644 index 000000000..0537d7ea4 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioTranscription.Serialization.cs @@ -0,0 +1,150 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestInputAudioTranscription : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestInputAudioTranscription)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (Optional.IsDefined(Language) && _additionalBinaryDataProperties?.ContainsKey("language") != true) + { + writer.WritePropertyName("language"u8); + writer.WriteStringValue(Language); + } + if (Optional.IsDefined(Prompt) && _additionalBinaryDataProperties?.ContainsKey("prompt") != true) + { + writer.WritePropertyName("prompt"u8); + writer.WriteStringValue(Prompt); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateRequestInputAudioTranscription IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestInputAudioTranscription JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestInputAudioTranscription)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateRequestInputAudioTranscription(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateRequestInputAudioTranscription DeserializeInternalRealtimeSessionCreateRequestInputAudioTranscription(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string model = default; + string language = default; + string prompt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("language"u8)) + { + language = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("prompt"u8)) + { + prompt = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateRequestInputAudioTranscription(model, language, prompt, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateRequestInputAudioTranscription)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateRequestInputAudioTranscription IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestInputAudioTranscription PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateRequestInputAudioTranscription(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestInputAudioTranscription)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioTranscription.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioTranscription.cs new file mode 100644 index 000000000..86a29ffea --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestInputAudioTranscription.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestInputAudioTranscription + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeSessionCreateRequestInputAudioTranscription() + { + } + + internal InternalRealtimeSessionCreateRequestInputAudioTranscription(string model, string language, string prompt, IDictionary additionalBinaryDataProperties) + { + Model = model; + Language = language; + Prompt = prompt; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Model { get; set; } + + public string Language { get; set; } + + public string Prompt { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestModel.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestModel.cs new file mode 100644 index 000000000..f1bb40335 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestModel.cs @@ -0,0 +1,56 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeSessionCreateRequestModel : IEquatable + { + private readonly string _value; + private const string Gpt4oRealtimePreviewValue = "gpt-4o-realtime-preview"; + private const string Gpt4oRealtimePreview20241001Value = "gpt-4o-realtime-preview-2024-10-01"; + private const string Gpt4oRealtimePreview20241217Value = "gpt-4o-realtime-preview-2024-12-17"; + private const string Gpt4oRealtimePreview20250603Value = "gpt-4o-realtime-preview-2025-06-03"; + private const string Gpt4oMiniRealtimePreviewValue = "gpt-4o-mini-realtime-preview"; + private const string Gpt4oMiniRealtimePreview20241217Value = "gpt-4o-mini-realtime-preview-2024-12-17"; + + public InternalRealtimeSessionCreateRequestModel(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeSessionCreateRequestModel Gpt4oRealtimePreview { get; } = new InternalRealtimeSessionCreateRequestModel(Gpt4oRealtimePreviewValue); + + internal static InternalRealtimeSessionCreateRequestModel Gpt4oRealtimePreview20241001 { get; } = new InternalRealtimeSessionCreateRequestModel(Gpt4oRealtimePreview20241001Value); + + internal static InternalRealtimeSessionCreateRequestModel Gpt4oRealtimePreview20241217 { get; } = new InternalRealtimeSessionCreateRequestModel(Gpt4oRealtimePreview20241217Value); + + internal static InternalRealtimeSessionCreateRequestModel Gpt4oRealtimePreview20250603 { get; } = new InternalRealtimeSessionCreateRequestModel(Gpt4oRealtimePreview20250603Value); + + internal static InternalRealtimeSessionCreateRequestModel Gpt4oMiniRealtimePreview { get; } = new InternalRealtimeSessionCreateRequestModel(Gpt4oMiniRealtimePreviewValue); + + internal static InternalRealtimeSessionCreateRequestModel Gpt4oMiniRealtimePreview20241217 { get; } = new InternalRealtimeSessionCreateRequestModel(Gpt4oMiniRealtimePreview20241217Value); + + public static bool operator ==(InternalRealtimeSessionCreateRequestModel left, InternalRealtimeSessionCreateRequestModel right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeSessionCreateRequestModel left, InternalRealtimeSessionCreateRequestModel right) => !left.Equals(right); + + public static implicit operator InternalRealtimeSessionCreateRequestModel(string value) => new InternalRealtimeSessionCreateRequestModel(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeSessionCreateRequestModel other && Equals(other); + + public bool Equals(InternalRealtimeSessionCreateRequestModel 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/InternalRealtimeSessionCreateRequestTracing1.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestTracing1.Serialization.cs new file mode 100644 index 000000000..f6dff7a69 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestTracing1.Serialization.cs @@ -0,0 +1,161 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestTracing1 : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestTracing1)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(WorkflowName) && _additionalBinaryDataProperties?.ContainsKey("workflow_name") != true) + { + writer.WritePropertyName("workflow_name"u8); + writer.WriteStringValue(WorkflowName); + } + if (Optional.IsDefined(GroupId) && _additionalBinaryDataProperties?.ContainsKey("group_id") != true) + { + writer.WritePropertyName("group_id"u8); + writer.WriteStringValue(GroupId); + } + if (Optional.IsDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Metadata); +#else + using (JsonDocument document = JsonDocument.Parse(Metadata)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateRequestTracing1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestTracing1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestTracing1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateRequestTracing1(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateRequestTracing1 DeserializeInternalRealtimeSessionCreateRequestTracing1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string workflowName = default; + string groupId = default; + BinaryData metadata = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("workflow_name"u8)) + { + workflowName = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("group_id"u8)) + { + groupId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + metadata = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateRequestTracing1(workflowName, groupId, metadata, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateRequestTracing1)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateRequestTracing1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestTracing1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateRequestTracing1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestTracing1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestTracing1.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestTracing1.cs new file mode 100644 index 000000000..40bd6f315 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestTracing1.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestTracing1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeSessionCreateRequestTracing1() + { + } + + internal InternalRealtimeSessionCreateRequestTracing1(string workflowName, string groupId, BinaryData metadata, IDictionary additionalBinaryDataProperties) + { + WorkflowName = workflowName; + GroupId = groupId; + Metadata = metadata; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string WorkflowName { get; set; } + + public string GroupId { get; set; } + + public BinaryData Metadata { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetection.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetection.Serialization.cs new file mode 100644 index 000000000..b74699ac4 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetection.Serialization.cs @@ -0,0 +1,230 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestTurnDetection : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestTurnDetection)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.Value.ToString()); + } + if (Optional.IsDefined(Eagerness) && _additionalBinaryDataProperties?.ContainsKey("eagerness") != true) + { + writer.WritePropertyName("eagerness"u8); + writer.WriteStringValue(Eagerness.Value.ToString()); + } + if (Optional.IsDefined(Threshold) && _additionalBinaryDataProperties?.ContainsKey("threshold") != true) + { + writer.WritePropertyName("threshold"u8); + writer.WriteNumberValue(Threshold.Value); + } + if (Optional.IsDefined(PrefixPaddingMs) && _additionalBinaryDataProperties?.ContainsKey("prefix_padding_ms") != true) + { + writer.WritePropertyName("prefix_padding_ms"u8); + writer.WriteNumberValue(PrefixPaddingMs.Value); + } + if (Optional.IsDefined(SilenceDurationMs) && _additionalBinaryDataProperties?.ContainsKey("silence_duration_ms") != true) + { + writer.WritePropertyName("silence_duration_ms"u8); + writer.WriteNumberValue(SilenceDurationMs.Value); + } + if (Optional.IsDefined(CreateResponse) && _additionalBinaryDataProperties?.ContainsKey("create_response") != true) + { + writer.WritePropertyName("create_response"u8); + writer.WriteBooleanValue(CreateResponse.Value); + } + if (Optional.IsDefined(InterruptResponse) && _additionalBinaryDataProperties?.ContainsKey("interrupt_response") != true) + { + writer.WritePropertyName("interrupt_response"u8); + writer.WriteBooleanValue(InterruptResponse.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateRequestTurnDetection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestTurnDetection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestTurnDetection)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateRequestTurnDetection(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateRequestTurnDetection DeserializeInternalRealtimeSessionCreateRequestTurnDetection(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeSessionCreateRequestTurnDetectionType? kind = default; + InternalRealtimeSessionCreateRequestTurnDetectionEagerness? eagerness = default; + float? threshold = default; + int? prefixPaddingMs = default; + int? silenceDurationMs = default; + bool? createResponse = default; + bool? interruptResponse = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + kind = new InternalRealtimeSessionCreateRequestTurnDetectionType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("eagerness"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + eagerness = new InternalRealtimeSessionCreateRequestTurnDetectionEagerness(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + threshold = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("prefix_padding_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + prefixPaddingMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("silence_duration_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + silenceDurationMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("create_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + createResponse = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("interrupt_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + interruptResponse = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateRequestTurnDetection( + kind, + eagerness, + threshold, + prefixPaddingMs, + silenceDurationMs, + createResponse, + interruptResponse, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateRequestTurnDetection)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateRequestTurnDetection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateRequestTurnDetection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateRequestTurnDetection(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateRequestTurnDetection)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetection.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetection.cs new file mode 100644 index 000000000..216a34be6 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetection.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateRequestTurnDetection + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeSessionCreateRequestTurnDetection() + { + } + + internal InternalRealtimeSessionCreateRequestTurnDetection(InternalRealtimeSessionCreateRequestTurnDetectionType? kind, InternalRealtimeSessionCreateRequestTurnDetectionEagerness? eagerness, float? threshold, int? prefixPaddingMs, int? silenceDurationMs, bool? createResponse, bool? interruptResponse, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Eagerness = eagerness; + Threshold = threshold; + PrefixPaddingMs = prefixPaddingMs; + SilenceDurationMs = silenceDurationMs; + CreateResponse = createResponse; + InterruptResponse = interruptResponse; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeSessionCreateRequestTurnDetectionType? Kind { get; set; } + + internal InternalRealtimeSessionCreateRequestTurnDetectionEagerness? Eagerness { get; set; } + + public float? Threshold { get; set; } + + public int? PrefixPaddingMs { get; set; } + + public int? SilenceDurationMs { get; set; } + + public bool? CreateResponse { get; set; } + + public bool? InterruptResponse { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetectionEagerness.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetectionEagerness.cs new file mode 100644 index 000000000..fb9173f1b --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetectionEagerness.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeSessionCreateRequestTurnDetectionEagerness : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + private const string AutoValue = "auto"; + + public InternalRealtimeSessionCreateRequestTurnDetectionEagerness(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeSessionCreateRequestTurnDetectionEagerness Low { get; } = new InternalRealtimeSessionCreateRequestTurnDetectionEagerness(LowValue); + + internal static InternalRealtimeSessionCreateRequestTurnDetectionEagerness Medium { get; } = new InternalRealtimeSessionCreateRequestTurnDetectionEagerness(MediumValue); + + internal static InternalRealtimeSessionCreateRequestTurnDetectionEagerness High { get; } = new InternalRealtimeSessionCreateRequestTurnDetectionEagerness(HighValue); + + internal static InternalRealtimeSessionCreateRequestTurnDetectionEagerness Auto { get; } = new InternalRealtimeSessionCreateRequestTurnDetectionEagerness(AutoValue); + + public static bool operator ==(InternalRealtimeSessionCreateRequestTurnDetectionEagerness left, InternalRealtimeSessionCreateRequestTurnDetectionEagerness right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeSessionCreateRequestTurnDetectionEagerness left, InternalRealtimeSessionCreateRequestTurnDetectionEagerness right) => !left.Equals(right); + + public static implicit operator InternalRealtimeSessionCreateRequestTurnDetectionEagerness(string value) => new InternalRealtimeSessionCreateRequestTurnDetectionEagerness(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeSessionCreateRequestTurnDetectionEagerness other && Equals(other); + + public bool Equals(InternalRealtimeSessionCreateRequestTurnDetectionEagerness 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/InternalRealtimeSessionCreateRequestTurnDetectionType.cs b/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetectionType.cs new file mode 100644 index 000000000..40dc02e79 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateRequestTurnDetectionType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeSessionCreateRequestTurnDetectionType : IEquatable + { + private readonly string _value; + private const string ServerVadValue = "server_vad"; + private const string SemanticVadValue = "semantic_vad"; + + public InternalRealtimeSessionCreateRequestTurnDetectionType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeSessionCreateRequestTurnDetectionType ServerVad { get; } = new InternalRealtimeSessionCreateRequestTurnDetectionType(ServerVadValue); + + internal static InternalRealtimeSessionCreateRequestTurnDetectionType SemanticVad { get; } = new InternalRealtimeSessionCreateRequestTurnDetectionType(SemanticVadValue); + + public static bool operator ==(InternalRealtimeSessionCreateRequestTurnDetectionType left, InternalRealtimeSessionCreateRequestTurnDetectionType right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeSessionCreateRequestTurnDetectionType left, InternalRealtimeSessionCreateRequestTurnDetectionType right) => !left.Equals(right); + + public static implicit operator InternalRealtimeSessionCreateRequestTurnDetectionType(string value) => new InternalRealtimeSessionCreateRequestTurnDetectionType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeSessionCreateRequestTurnDetectionType other && Equals(other); + + public bool Equals(InternalRealtimeSessionCreateRequestTurnDetectionType 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/InternalRealtimeSessionCreateResponse.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponse.Serialization.cs new file mode 100644 index 000000000..7be358b14 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponse.Serialization.cs @@ -0,0 +1,369 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponse : IJsonModel + { + internal InternalRealtimeSessionCreateResponse() : this(null, null, null, default, default, default, null, default, null, null, null, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("client_secret") != true) + { + writer.WritePropertyName("client_secret"u8); + writer.WriteObjectValue(ClientSecret, options); + } + if (Optional.IsCollectionDefined(Modalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) + { + writer.WritePropertyName("modalities"u8); + writer.WriteStartArray(); + foreach (InternalRealtimeRequestSessionModality item in Modalities) + { + writer.WriteStringValue(item.ToString()); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) + { + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); + } + if (Optional.IsDefined(Voice) && _additionalBinaryDataProperties?.ContainsKey("voice") != true) + { + writer.WritePropertyName("voice"u8); + writer.WriteStringValue(Voice.Value.ToString()); + } + if (Optional.IsDefined(InputAudioFormat) && _additionalBinaryDataProperties?.ContainsKey("input_audio_format") != true) + { + writer.WritePropertyName("input_audio_format"u8); + writer.WriteStringValue(InputAudioFormat.Value.ToString()); + } + if (Optional.IsDefined(OutputAudioFormat) && _additionalBinaryDataProperties?.ContainsKey("output_audio_format") != true) + { + writer.WritePropertyName("output_audio_format"u8); + writer.WriteStringValue(OutputAudioFormat.Value.ToString()); + } + if (Optional.IsDefined(InputAudioTranscription) && _additionalBinaryDataProperties?.ContainsKey("input_audio_transcription") != true) + { + writer.WritePropertyName("input_audio_transcription"u8); + writer.WriteObjectValue(InputAudioTranscription, options); + } + if (Optional.IsDefined(Speed) && _additionalBinaryDataProperties?.ContainsKey("speed") != true) + { + writer.WritePropertyName("speed"u8); + writer.WriteNumberValue(Speed.Value); + } + if (Optional.IsDefined(Tracing) && _additionalBinaryDataProperties?.ContainsKey("tracing") != true) + { + writer.WritePropertyName("tracing"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Tracing); +#else + using (JsonDocument document = JsonDocument.Parse(Tracing)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(TurnDetection) && _additionalBinaryDataProperties?.ContainsKey("turn_detection") != true) + { + writer.WritePropertyName("turn_detection"u8); + writer.WriteObjectValue(TurnDetection, options); + } + if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) + { + writer.WritePropertyName("tools"u8); + writer.WriteStartArray(); + foreach (ConversationTool item in Tools) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (Optional.IsDefined(ToolChoice) && _additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) + { + writer.WritePropertyName("tool_choice"u8); + writer.WriteStringValue(ToolChoice); + } + if (Optional.IsDefined(Temperature) && _additionalBinaryDataProperties?.ContainsKey("temperature") != true) + { + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); + } + if (Optional.IsDefined(MaxResponseOutputTokens) && _additionalBinaryDataProperties?.ContainsKey("max_response_output_tokens") != true) + { + writer.WritePropertyName("max_response_output_tokens"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(MaxResponseOutputTokens); +#else + using (JsonDocument document = JsonDocument.Parse(MaxResponseOutputTokens)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateResponse(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateResponse DeserializeInternalRealtimeSessionCreateResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeSessionCreateResponseClientSecret clientSecret = default; + IList modalities = default; + string instructions = default; + InternalVoiceIdsShared? voice = default; + RealtimeAudioFormat? inputAudioFormat = default; + RealtimeAudioFormat? outputAudioFormat = default; + InternalRealtimeSessionCreateResponseInputAudioTranscription inputAudioTranscription = default; + float? speed = default; + BinaryData tracing = default; + InternalRealtimeSessionCreateResponseTurnDetection turnDetection = default; + IList tools = default; + string toolChoice = default; + float? temperature = default; + BinaryData maxResponseOutputTokens = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("client_secret"u8)) + { + clientSecret = InternalRealtimeSessionCreateResponseClientSecret.DeserializeInternalRealtimeSessionCreateResponseClientSecret(prop.Value, options); + continue; + } + if (prop.NameEquals("modalities"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(new InternalRealtimeRequestSessionModality(item.GetString())); + } + modalities = array; + continue; + } + if (prop.NameEquals("instructions"u8)) + { + instructions = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("voice"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + voice = new InternalVoiceIdsShared(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input_audio_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("output_audio_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + outputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input_audio_transcription"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputAudioTranscription = InternalRealtimeSessionCreateResponseInputAudioTranscription.DeserializeInternalRealtimeSessionCreateResponseInputAudioTranscription(prop.Value, options); + continue; + } + if (prop.NameEquals("speed"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + speed = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("tracing"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + tracing = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("turn_detection"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + turnDetection = InternalRealtimeSessionCreateResponseTurnDetection.DeserializeInternalRealtimeSessionCreateResponseTurnDetection(prop.Value, options); + continue; + } + if (prop.NameEquals("tools"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ConversationTool.DeserializeConversationTool(item, options)); + } + tools = array; + continue; + } + if (prop.NameEquals("tool_choice"u8)) + { + toolChoice = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("temperature"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + temperature = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("max_response_output_tokens"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + maxResponseOutputTokens = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateResponse( + clientSecret, + modalities ?? new ChangeTrackingList(), + instructions, + voice, + inputAudioFormat, + outputAudioFormat, + inputAudioTranscription, + speed, + tracing, + turnDetection, + tools ?? new ChangeTrackingList(), + toolChoice, + temperature, + maxResponseOutputTokens, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponse.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponse.cs new file mode 100644 index 000000000..a27727908 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponse.cs @@ -0,0 +1,77 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeSessionCreateResponse(InternalRealtimeSessionCreateResponseClientSecret clientSecret) + { + ClientSecret = clientSecret; + Modalities = new ChangeTrackingList(); + Tools = new ChangeTrackingList(); + } + + internal InternalRealtimeSessionCreateResponse(InternalRealtimeSessionCreateResponseClientSecret clientSecret, IList modalities, string instructions, InternalVoiceIdsShared? voice, RealtimeAudioFormat? inputAudioFormat, RealtimeAudioFormat? outputAudioFormat, InternalRealtimeSessionCreateResponseInputAudioTranscription inputAudioTranscription, float? speed, BinaryData tracing, InternalRealtimeSessionCreateResponseTurnDetection turnDetection, IList tools, string toolChoice, float? temperature, BinaryData maxResponseOutputTokens, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ClientSecret = clientSecret; + Modalities = modalities ?? new ChangeTrackingList(); + Instructions = instructions; + Voice = voice; + InputAudioFormat = inputAudioFormat; + OutputAudioFormat = outputAudioFormat; + InputAudioTranscription = inputAudioTranscription; + Speed = speed; + Tracing = tracing; + TurnDetection = turnDetection; + Tools = tools ?? new ChangeTrackingList(); + ToolChoice = toolChoice; + Temperature = temperature; + MaxResponseOutputTokens = maxResponseOutputTokens; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeSessionCreateResponseClientSecret ClientSecret { get; } + + internal IList Modalities { get; } + + public string Instructions { get; } + + internal InternalVoiceIdsShared? Voice { get; } + + public RealtimeAudioFormat? InputAudioFormat { get; } + + public RealtimeAudioFormat? OutputAudioFormat { get; } + + internal InternalRealtimeSessionCreateResponseInputAudioTranscription InputAudioTranscription { get; } + + public float? Speed { get; } + + public BinaryData Tracing { get; } + + internal InternalRealtimeSessionCreateResponseTurnDetection TurnDetection { get; } + + public IList Tools { get; } + + public string ToolChoice { get; } + + public float? Temperature { get; } + + public BinaryData MaxResponseOutputTokens { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponseClientSecret.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponseClientSecret.Serialization.cs new file mode 100644 index 000000000..4afc26546 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponseClientSecret.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponseClientSecret : IJsonModel + { + internal InternalRealtimeSessionCreateResponseClientSecret() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseClientSecret)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("value") != true) + { + writer.WritePropertyName("value"u8); + writer.WriteStringValue(Value); + } + if (_additionalBinaryDataProperties?.ContainsKey("expires_at") != true) + { + writer.WritePropertyName("expires_at"u8); + writer.WriteNumberValue(ExpiresAt, "U"); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateResponseClientSecret IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponseClientSecret JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseClientSecret)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateResponseClientSecret(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateResponseClientSecret DeserializeInternalRealtimeSessionCreateResponseClientSecret(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string value = default; + DateTimeOffset expiresAt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("value"u8)) + { + value = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("expires_at"u8)) + { + expiresAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateResponseClientSecret(value, expiresAt, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateResponseClientSecret)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateResponseClientSecret IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponseClientSecret PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateResponseClientSecret(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseClientSecret)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponseClientSecret.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponseClientSecret.cs new file mode 100644 index 000000000..d523d54e4 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponseClientSecret.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponseClientSecret + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeSessionCreateResponseClientSecret(string value, DateTimeOffset expiresAt) + { + Value = value; + ExpiresAt = expiresAt; + } + + internal InternalRealtimeSessionCreateResponseClientSecret(string value, DateTimeOffset expiresAt, IDictionary additionalBinaryDataProperties) + { + Value = value; + ExpiresAt = expiresAt; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Value { get; } + + public DateTimeOffset ExpiresAt { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponseInputAudioTranscription.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponseInputAudioTranscription.Serialization.cs new file mode 100644 index 000000000..ef5062fd6 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponseInputAudioTranscription.Serialization.cs @@ -0,0 +1,128 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponseInputAudioTranscription : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseInputAudioTranscription)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateResponseInputAudioTranscription IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponseInputAudioTranscription JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseInputAudioTranscription)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateResponseInputAudioTranscription(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateResponseInputAudioTranscription DeserializeInternalRealtimeSessionCreateResponseInputAudioTranscription(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string model = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateResponseInputAudioTranscription(model, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateResponseInputAudioTranscription)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateResponseInputAudioTranscription IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponseInputAudioTranscription PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateResponseInputAudioTranscription(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseInputAudioTranscription)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponseInputAudioTranscription.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponseInputAudioTranscription.cs new file mode 100644 index 000000000..9210029fa --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponseInputAudioTranscription.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponseInputAudioTranscription + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeSessionCreateResponseInputAudioTranscription() + { + } + + internal InternalRealtimeSessionCreateResponseInputAudioTranscription(string model, IDictionary additionalBinaryDataProperties) + { + Model = model; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Model { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponseTracing1.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponseTracing1.Serialization.cs new file mode 100644 index 000000000..502fcc29c --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponseTracing1.Serialization.cs @@ -0,0 +1,161 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponseTracing1 : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseTracing1)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(WorkflowName) && _additionalBinaryDataProperties?.ContainsKey("workflow_name") != true) + { + writer.WritePropertyName("workflow_name"u8); + writer.WriteStringValue(WorkflowName); + } + if (Optional.IsDefined(GroupId) && _additionalBinaryDataProperties?.ContainsKey("group_id") != true) + { + writer.WritePropertyName("group_id"u8); + writer.WriteStringValue(GroupId); + } + if (Optional.IsDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Metadata); +#else + using (JsonDocument document = JsonDocument.Parse(Metadata)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateResponseTracing1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponseTracing1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseTracing1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateResponseTracing1(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateResponseTracing1 DeserializeInternalRealtimeSessionCreateResponseTracing1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string workflowName = default; + string groupId = default; + BinaryData metadata = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("workflow_name"u8)) + { + workflowName = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("group_id"u8)) + { + groupId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + metadata = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateResponseTracing1(workflowName, groupId, metadata, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateResponseTracing1)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateResponseTracing1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponseTracing1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateResponseTracing1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseTracing1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponseTracing1.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponseTracing1.cs new file mode 100644 index 000000000..ba9371f74 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponseTracing1.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponseTracing1 + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeSessionCreateResponseTracing1() + { + } + + internal InternalRealtimeSessionCreateResponseTracing1(string workflowName, string groupId, BinaryData metadata, IDictionary additionalBinaryDataProperties) + { + WorkflowName = workflowName; + GroupId = groupId; + Metadata = metadata; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string WorkflowName { get; } + + public string GroupId { get; } + + public BinaryData Metadata { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponseTurnDetection.Serialization.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponseTurnDetection.Serialization.cs new file mode 100644 index 000000000..f53ae750c --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponseTurnDetection.Serialization.cs @@ -0,0 +1,173 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponseTurnDetection : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseTurnDetection)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (Optional.IsDefined(Threshold) && _additionalBinaryDataProperties?.ContainsKey("threshold") != true) + { + writer.WritePropertyName("threshold"u8); + writer.WriteNumberValue(Threshold.Value); + } + if (Optional.IsDefined(PrefixPaddingMs) && _additionalBinaryDataProperties?.ContainsKey("prefix_padding_ms") != true) + { + writer.WritePropertyName("prefix_padding_ms"u8); + writer.WriteNumberValue(PrefixPaddingMs.Value); + } + if (Optional.IsDefined(SilenceDurationMs) && _additionalBinaryDataProperties?.ContainsKey("silence_duration_ms") != true) + { + writer.WritePropertyName("silence_duration_ms"u8); + writer.WriteNumberValue(SilenceDurationMs.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeSessionCreateResponseTurnDetection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponseTurnDetection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseTurnDetection)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeSessionCreateResponseTurnDetection(document.RootElement, options); + } + + internal static InternalRealtimeSessionCreateResponseTurnDetection DeserializeInternalRealtimeSessionCreateResponseTurnDetection(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + float? threshold = default; + int? prefixPaddingMs = default; + int? silenceDurationMs = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + threshold = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("prefix_padding_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + prefixPaddingMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("silence_duration_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + silenceDurationMs = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeSessionCreateResponseTurnDetection(kind, threshold, prefixPaddingMs, silenceDurationMs, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeSessionCreateResponseTurnDetection)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeSessionCreateResponseTurnDetection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeSessionCreateResponseTurnDetection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeSessionCreateResponseTurnDetection(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeSessionCreateResponseTurnDetection)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeSessionCreateResponseTurnDetection.cs b/src/Generated/Models/InternalRealtimeSessionCreateResponseTurnDetection.cs new file mode 100644 index 000000000..5459590e9 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeSessionCreateResponseTurnDetection.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeSessionCreateResponseTurnDetection + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeSessionCreateResponseTurnDetection() + { + } + + internal InternalRealtimeSessionCreateResponseTurnDetection(string kind, float? threshold, int? prefixPaddingMs, int? silenceDurationMs, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Threshold = threshold; + PrefixPaddingMs = prefixPaddingMs; + SilenceDurationMs = silenceDurationMs; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } + + public float? Threshold { get; } + + public int? PrefixPaddingMs { get; } + + public int? SilenceDurationMs { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.Serialization.cs b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.Serialization.cs index e507ae596..1a5d5af44 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeToolChoiceFunctionObject : IJsonModel { - internal InternalRealtimeToolChoiceFunctionObject() + internal InternalRealtimeToolChoiceFunctionObject() : this(default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter w writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeToolChoiceFunctionObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRealtimeToolChoiceFunctionObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,14 @@ internal static InternalRealtimeToolChoiceFunctionObject DeserializeInternalReal { return null; } - ConversationToolKind @type = default; + ConversationToolKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRealtimeToolChoiceFunctionObjectFunction function = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new ConversationToolKind(prop.Value.GetString()); + kind = new ConversationToolKind(prop.Value.GetString()); continue; } if (prop.NameEquals("function"u8)) @@ -73,20 +75,22 @@ internal static InternalRealtimeToolChoiceFunctionObject DeserializeInternalReal function = InternalRealtimeToolChoiceFunctionObjectFunction.DeserializeInternalRealtimeToolChoiceFunctionObjectFunction(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRealtimeToolChoiceFunctionObject(@type, additionalBinaryDataProperties, function); + return new InternalRealtimeToolChoiceFunctionObject(kind, additionalBinaryDataProperties, function); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeToolChoiceFunctionObject)} does not support writing '{options.Format}' format."); } @@ -94,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeToolChoiceFunctionObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRealtimeToolChoiceFunctionObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +115,5 @@ protected override InternalRealtimeToolChoiceObject PersistableModelCreateCore(B } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeToolChoiceFunctionObject internalRealtimeToolChoiceFunctionObject) - { - if (internalRealtimeToolChoiceFunctionObject == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeToolChoiceFunctionObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeToolChoiceFunctionObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeToolChoiceFunctionObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.cs b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.cs index e5a4267e6..4e5adf0bf 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObject.cs @@ -6,22 +6,22 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeToolChoiceFunctionObject : InternalRealtimeToolChoiceObject { - public InternalRealtimeToolChoiceFunctionObject(InternalRealtimeToolChoiceFunctionObjectFunction function) : base(ConversationToolKind.Function) + internal InternalRealtimeToolChoiceFunctionObject(InternalRealtimeToolChoiceFunctionObjectFunction function) : base(ConversationToolKind.Function) { Argument.AssertNotNull(function, nameof(function)); Function = function; } - internal InternalRealtimeToolChoiceFunctionObject(ConversationToolKind @type, IDictionary additionalBinaryDataProperties, InternalRealtimeToolChoiceFunctionObjectFunction function) : base(@type, additionalBinaryDataProperties) + internal InternalRealtimeToolChoiceFunctionObject(ConversationToolKind kind, IDictionary additionalBinaryDataProperties, InternalRealtimeToolChoiceFunctionObjectFunction function) : base(kind, additionalBinaryDataProperties) { Function = function; } - public InternalRealtimeToolChoiceFunctionObjectFunction Function { get; set; } + internal InternalRealtimeToolChoiceFunctionObjectFunction Function { get; set; } } } diff --git a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.Serialization.cs b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.Serialization.cs index f8cf9839d..881c50f97 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.Serialization.cs @@ -3,13 +3,13 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeToolChoiceFunctionObjectFunction : IJsonModel { @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Json writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeToolChoiceFunctionObjectFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeToolChoiceFunctionObjectFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalRealtimeToolChoiceFunctionObjectFunction DeserializeInte name = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRealtimeToolChoiceFunctionObjectFunction(name, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalRealtimeToolChoiceFunctionObjectFunction DeserializeInte BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeToolChoiceFunctionObjectFunction)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeToolChoiceFunctionObjectFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeToolChoiceFunctionObjectFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalRealtimeToolChoiceFunctionObjectFunction PersistableMo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeToolChoiceFunctionObjectFunction internalRealtimeToolChoiceFunctionObjectFunction) - { - if (internalRealtimeToolChoiceFunctionObjectFunction == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeToolChoiceFunctionObjectFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeToolChoiceFunctionObjectFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeToolChoiceFunctionObjectFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.cs b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.cs index c10d15fb6..96ce0cfa9 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceFunctionObjectFunction.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class InternalRealtimeToolChoiceFunctionObjectFunction { diff --git a/src/Generated/Models/InternalRealtimeToolChoiceObject.Serialization.cs b/src/Generated/Models/InternalRealtimeToolChoiceObject.Serialization.cs index 94eb793fb..471ab02b0 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceObject.Serialization.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceObject.Serialization.cs @@ -3,12 +3,12 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { [PersistableModelProxy(typeof(UnknownRealtimeToolChoiceObject))] internal abstract partial class InternalRealtimeToolChoiceObject : IJsonModel @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRealtimeToolChoiceObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -89,13 +92,14 @@ internal static InternalRealtimeToolChoiceObject DeserializeInternalRealtimeTool BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeToolChoiceObject)} does not support writing '{options.Format}' format."); } @@ -103,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeToolChoiceObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRealtimeToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -119,21 +124,5 @@ protected virtual InternalRealtimeToolChoiceObject PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRealtimeToolChoiceObject internalRealtimeToolChoiceObject) - { - if (internalRealtimeToolChoiceObject == null) - { - return null; - } - return BinaryContent.Create(internalRealtimeToolChoiceObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRealtimeToolChoiceObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRealtimeToolChoiceObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRealtimeToolChoiceObject.cs b/src/Generated/Models/InternalRealtimeToolChoiceObject.cs index d97cd6a75..6c8f34f91 100644 --- a/src/Generated/Models/InternalRealtimeToolChoiceObject.cs +++ b/src/Generated/Models/InternalRealtimeToolChoiceObject.cs @@ -5,24 +5,24 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal abstract partial class InternalRealtimeToolChoiceObject { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalRealtimeToolChoiceObject(ConversationToolKind @type) + private protected InternalRealtimeToolChoiceObject(ConversationToolKind kind) { - Type = @type; + Kind = kind; } - internal InternalRealtimeToolChoiceObject(ConversationToolKind @type, IDictionary additionalBinaryDataProperties) + internal InternalRealtimeToolChoiceObject(ConversationToolKind kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal ConversationToolKind Type { get; set; } + internal ConversationToolKind Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecret.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecret.Serialization.cs new file mode 100644 index 000000000..5f840d467 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecret.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestClientSecret : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestClientSecret)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(ExpiresAt) && _additionalBinaryDataProperties?.ContainsKey("expires_at") != true) + { + writer.WritePropertyName("expires_at"u8); + writer.WriteObjectValue(ExpiresAt, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateRequestClientSecret IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestClientSecret JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestClientSecret)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestClientSecret(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestClientSecret DeserializeInternalRealtimeTranscriptionSessionCreateRequestClientSecret(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt expiresAt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("expires_at"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + expiresAt = InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt.DeserializeInternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateRequestClientSecret(expiresAt, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateRequestClientSecret)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateRequestClientSecret IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestClientSecret PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestClientSecret(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestClientSecret)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecret.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecret.cs new file mode 100644 index 000000000..7d23b3ca3 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecret.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestClientSecret + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeTranscriptionSessionCreateRequestClientSecret() + { + } + + internal InternalRealtimeTranscriptionSessionCreateRequestClientSecret(InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt expiresAt, IDictionary additionalBinaryDataProperties) + { + ExpiresAt = expiresAt; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt ExpiresAt { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt.Serialization.cs new file mode 100644 index 000000000..35740b28c --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Anchor) && _additionalBinaryDataProperties?.ContainsKey("anchor") != true) + { + writer.WritePropertyName("anchor"u8); + writer.WriteStringValue(Anchor); + } + if (Optional.IsDefined(Seconds) && _additionalBinaryDataProperties?.ContainsKey("seconds") != true) + { + writer.WritePropertyName("seconds"u8); + writer.WriteNumberValue(Seconds.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt DeserializeInternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string anchor = default; + int? seconds = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("anchor"u8)) + { + anchor = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("seconds"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + seconds = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt(anchor, seconds, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt.cs new file mode 100644 index 000000000..bbdb9c8f5 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt() + { + } + + internal InternalRealtimeTranscriptionSessionCreateRequestClientSecretExpiresAt(string anchor, int? seconds, IDictionary additionalBinaryDataProperties) + { + Anchor = anchor; + Seconds = seconds; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Anchor { get; set; } + + public int? Seconds { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat.cs new file mode 100644 index 000000000..d273f765c --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat : IEquatable + { + private readonly string _value; + private const string Pcm16Value = "pcm16"; + private const string G711UlawValue = "g711_ulaw"; + private const string G711AlawValue = "g711_alaw"; + + public InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat Pcm16 { get; } = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat(Pcm16Value); + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat G711Ulaw { get; } = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat(G711UlawValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat G711Alaw { get; } = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat(G711AlawValue); + + public static bool operator ==(InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat left, InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat left, InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat right) => !left.Equals(right); + + public static implicit operator InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat(string value) => new InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat other && Equals(other); + + public bool Equals(InternalRealtimeTranscriptionSessionCreateRequestInputAudioFormat 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/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1.Serialization.cs new file mode 100644 index 000000000..a96555532 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1 : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.Value.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1 IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1 JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1 DeserializeInternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType? kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + kind = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1 IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1 PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1.cs new file mode 100644 index 000000000..bc656871e --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1 + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1() + { + } + + internal InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReduction1(InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType? kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType? Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType.cs new file mode 100644 index 000000000..fa1b67957 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType : IEquatable + { + private readonly string _value; + private const string NearFieldValue = "near_field"; + private const string FarFieldValue = "far_field"; + + public InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType NearField { get; } = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType(NearFieldValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType FarField { get; } = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType(FarFieldValue); + + public static bool operator ==(InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType left, InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType left, InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType right) => !left.Equals(right); + + public static implicit operator InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType(string value) => new InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType other && Equals(other); + + public bool Equals(InternalRealtimeTranscriptionSessionCreateRequestInputAudioNoiseReductionType 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/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription.Serialization.cs new file mode 100644 index 000000000..3d5cc1fcf --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.Value.ToString()); + } + if (Optional.IsDefined(Language) && _additionalBinaryDataProperties?.ContainsKey("language") != true) + { + writer.WritePropertyName("language"u8); + writer.WriteStringValue(Language); + } + if (Optional.IsDefined(Prompt) && _additionalBinaryDataProperties?.ContainsKey("prompt") != true) + { + writer.WritePropertyName("prompt"u8); + writer.WriteStringValue(Prompt); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription DeserializeInternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel? model = default; + string language = default; + string prompt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("model"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + model = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("language"u8)) + { + language = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("prompt"u8)) + { + prompt = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription(model, language, prompt, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription.cs new file mode 100644 index 000000000..fbab2b80e --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription() + { + } + + internal InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscription(InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel? model, string language, string prompt, IDictionary additionalBinaryDataProperties) + { + Model = model; + Language = language; + Prompt = prompt; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel? Model { get; set; } + + public string Language { get; set; } + + public string Prompt { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel.cs new file mode 100644 index 000000000..35aef1c6f --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel : IEquatable + { + private readonly string _value; + private const string Gpt4oTranscribeValue = "gpt-4o-transcribe"; + private const string Gpt4oMiniTranscribeValue = "gpt-4o-mini-transcribe"; + private const string Whisper1Value = "whisper-1"; + + public InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel Gpt4oTranscribe { get; } = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel(Gpt4oTranscribeValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel Gpt4oMiniTranscribe { get; } = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel(Gpt4oMiniTranscribeValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel Whisper1 { get; } = new InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel(Whisper1Value); + + public static bool operator ==(InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel left, InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel left, InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel right) => !left.Equals(right); + + public static implicit operator InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel(string value) => new InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel other && Equals(other); + + public bool Equals(InternalRealtimeTranscriptionSessionCreateRequestInputAudioTranscriptionModel 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/InternalRealtimeTranscriptionSessionCreateRequestModality.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestModality.cs new file mode 100644 index 000000000..99b82cc95 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestModality.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestModality : IEquatable + { + private readonly string _value; + private const string TextValue = "text"; + private const string AudioValue = "audio"; + + public InternalRealtimeTranscriptionSessionCreateRequestModality(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestModality Text { get; } = new InternalRealtimeTranscriptionSessionCreateRequestModality(TextValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestModality Audio { get; } = new InternalRealtimeTranscriptionSessionCreateRequestModality(AudioValue); + + public static bool operator ==(InternalRealtimeTranscriptionSessionCreateRequestModality left, InternalRealtimeTranscriptionSessionCreateRequestModality right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeTranscriptionSessionCreateRequestModality left, InternalRealtimeTranscriptionSessionCreateRequestModality right) => !left.Equals(right); + + public static implicit operator InternalRealtimeTranscriptionSessionCreateRequestModality(string value) => new InternalRealtimeTranscriptionSessionCreateRequestModality(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeTranscriptionSessionCreateRequestModality other && Equals(other); + + public bool Equals(InternalRealtimeTranscriptionSessionCreateRequestModality 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/InternalRealtimeTranscriptionSessionCreateRequestTurnDetection.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetection.Serialization.cs new file mode 100644 index 000000000..ffb536e1b --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetection.Serialization.cs @@ -0,0 +1,230 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestTurnDetection : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestTurnDetection)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.Value.ToString()); + } + if (Optional.IsDefined(Eagerness) && _additionalBinaryDataProperties?.ContainsKey("eagerness") != true) + { + writer.WritePropertyName("eagerness"u8); + writer.WriteStringValue(Eagerness.Value.ToString()); + } + if (Optional.IsDefined(Threshold) && _additionalBinaryDataProperties?.ContainsKey("threshold") != true) + { + writer.WritePropertyName("threshold"u8); + writer.WriteNumberValue(Threshold.Value); + } + if (Optional.IsDefined(PrefixPaddingMs) && _additionalBinaryDataProperties?.ContainsKey("prefix_padding_ms") != true) + { + writer.WritePropertyName("prefix_padding_ms"u8); + writer.WriteNumberValue(PrefixPaddingMs.Value); + } + if (Optional.IsDefined(SilenceDurationMs) && _additionalBinaryDataProperties?.ContainsKey("silence_duration_ms") != true) + { + writer.WritePropertyName("silence_duration_ms"u8); + writer.WriteNumberValue(SilenceDurationMs.Value); + } + if (Optional.IsDefined(CreateResponse) && _additionalBinaryDataProperties?.ContainsKey("create_response") != true) + { + writer.WritePropertyName("create_response"u8); + writer.WriteBooleanValue(CreateResponse.Value); + } + if (Optional.IsDefined(InterruptResponse) && _additionalBinaryDataProperties?.ContainsKey("interrupt_response") != true) + { + writer.WritePropertyName("interrupt_response"u8); + writer.WriteBooleanValue(InterruptResponse.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateRequestTurnDetection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestTurnDetection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestTurnDetection)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestTurnDetection(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestTurnDetection DeserializeInternalRealtimeTranscriptionSessionCreateRequestTurnDetection(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType? kind = default; + InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness? eagerness = default; + float? threshold = default; + int? prefixPaddingMs = default; + int? silenceDurationMs = default; + bool? createResponse = default; + bool? interruptResponse = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + kind = new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("eagerness"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + eagerness = new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + threshold = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("prefix_padding_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + prefixPaddingMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("silence_duration_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + silenceDurationMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("create_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + createResponse = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("interrupt_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + interruptResponse = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateRequestTurnDetection( + kind, + eagerness, + threshold, + prefixPaddingMs, + silenceDurationMs, + createResponse, + interruptResponse, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateRequestTurnDetection)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateRequestTurnDetection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateRequestTurnDetection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateRequestTurnDetection(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateRequestTurnDetection)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetection.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetection.cs new file mode 100644 index 000000000..ce3ae5277 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetection.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateRequestTurnDetection + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRealtimeTranscriptionSessionCreateRequestTurnDetection() + { + } + + internal InternalRealtimeTranscriptionSessionCreateRequestTurnDetection(InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType? kind, InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness? eagerness, float? threshold, int? prefixPaddingMs, int? silenceDurationMs, bool? createResponse, bool? interruptResponse, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Eagerness = eagerness; + Threshold = threshold; + PrefixPaddingMs = prefixPaddingMs; + SilenceDurationMs = silenceDurationMs; + CreateResponse = createResponse; + InterruptResponse = interruptResponse; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType? Kind { get; set; } + + internal InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness? Eagerness { get; set; } + + public float? Threshold { get; set; } + + public int? PrefixPaddingMs { get; set; } + + public int? SilenceDurationMs { get; set; } + + public bool? CreateResponse { get; set; } + + public bool? InterruptResponse { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness.cs new file mode 100644 index 000000000..9f5e29398 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + private const string AutoValue = "auto"; + + public InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness Low { get; } = new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness(LowValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness Medium { get; } = new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness(MediumValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness High { get; } = new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness(HighValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness Auto { get; } = new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness(AutoValue); + + public static bool operator ==(InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness left, InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness left, InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness right) => !left.Equals(right); + + public static implicit operator InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness(string value) => new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness other && Equals(other); + + public bool Equals(InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionEagerness 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/InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType.cs new file mode 100644 index 000000000..d1fc871db --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType : IEquatable + { + private readonly string _value; + private const string ServerVadValue = "server_vad"; + private const string SemanticVadValue = "semantic_vad"; + + public InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType ServerVad { get; } = new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType(ServerVadValue); + + internal static InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType SemanticVad { get; } = new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType(SemanticVadValue); + + public static bool operator ==(InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType left, InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType left, InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType right) => !left.Equals(right); + + public static implicit operator InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType(string value) => new InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType other && Equals(other); + + public bool Equals(InternalRealtimeTranscriptionSessionCreateRequestTurnDetectionType 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/InternalRealtimeTranscriptionSessionCreateResponse.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponse.Serialization.cs new file mode 100644 index 000000000..296fbd143 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponse.Serialization.cs @@ -0,0 +1,204 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateResponse : IJsonModel + { + internal InternalRealtimeTranscriptionSessionCreateResponse() : this(null, null, default, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("client_secret") != true) + { + writer.WritePropertyName("client_secret"u8); + writer.WriteObjectValue(ClientSecret, options); + } + if (Optional.IsCollectionDefined(Modalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) + { + writer.WritePropertyName("modalities"u8); + writer.WriteStartArray(); + foreach (InternalRealtimeRequestSessionModality item in Modalities) + { + writer.WriteStringValue(item.ToString()); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("input_audio_format") != true) + { + writer.WritePropertyName("input_audio_format"u8); + SerializeInputAudioFormatValue(writer, options); + } + if (Optional.IsDefined(InputAudioTranscription) && _additionalBinaryDataProperties?.ContainsKey("input_audio_transcription") != true) + { + writer.WritePropertyName("input_audio_transcription"u8); + writer.WriteObjectValue(InputAudioTranscription, options); + } + if (Optional.IsDefined(TurnDetection) && _additionalBinaryDataProperties?.ContainsKey("turn_detection") != true) + { + writer.WritePropertyName("turn_detection"u8); + writer.WriteObjectValue(TurnDetection, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateResponse(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateResponse DeserializeInternalRealtimeTranscriptionSessionCreateResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeTranscriptionSessionCreateResponseClientSecret clientSecret = default; + IList modalities = default; + RealtimeAudioFormat inputAudioFormat = default; + InputTranscriptionOptions inputAudioTranscription = default; + TurnDetectionOptions turnDetection = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("client_secret"u8)) + { + clientSecret = InternalRealtimeTranscriptionSessionCreateResponseClientSecret.DeserializeInternalRealtimeTranscriptionSessionCreateResponseClientSecret(prop.Value, options); + continue; + } + if (prop.NameEquals("modalities"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(new InternalRealtimeRequestSessionModality(item.GetString())); + } + modalities = array; + continue; + } + if (prop.NameEquals("input_audio_format"u8)) + { + DeserializeInputAudioFormatValue(prop, ref inputAudioFormat); + continue; + } + if (prop.NameEquals("input_audio_transcription"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputAudioTranscription = InputTranscriptionOptions.DeserializeInputTranscriptionOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("turn_detection"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + turnDetection = TurnDetectionOptions.DeserializeTurnDetectionOptions(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateResponse( + clientSecret, + modalities ?? new ChangeTrackingList(), + inputAudioFormat, + inputAudioTranscription, + turnDetection, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponse.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponse.cs new file mode 100644 index 000000000..5fba20ad0 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponse.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeTranscriptionSessionCreateResponse(InternalRealtimeTranscriptionSessionCreateResponseClientSecret clientSecret) + { + ClientSecret = clientSecret; + Modalities = new ChangeTrackingList(); + } + + internal InternalRealtimeTranscriptionSessionCreateResponse(InternalRealtimeTranscriptionSessionCreateResponseClientSecret clientSecret, IList modalities, RealtimeAudioFormat inputAudioFormat, InputTranscriptionOptions inputAudioTranscription, TurnDetectionOptions turnDetection, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ClientSecret = clientSecret; + Modalities = modalities ?? new ChangeTrackingList(); + InputAudioFormat = inputAudioFormat; + InputAudioTranscription = inputAudioTranscription; + TurnDetection = turnDetection; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseClientSecret.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseClientSecret.Serialization.cs new file mode 100644 index 000000000..fbbd00493 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseClientSecret.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateResponseClientSecret : IJsonModel + { + internal InternalRealtimeTranscriptionSessionCreateResponseClientSecret() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseClientSecret)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("value") != true) + { + writer.WritePropertyName("value"u8); + writer.WriteStringValue(Value); + } + if (_additionalBinaryDataProperties?.ContainsKey("expires_at") != true) + { + writer.WritePropertyName("expires_at"u8); + writer.WriteNumberValue(ExpiresAt, "U"); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateResponseClientSecret IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateResponseClientSecret JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseClientSecret)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateResponseClientSecret(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateResponseClientSecret DeserializeInternalRealtimeTranscriptionSessionCreateResponseClientSecret(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string value = default; + DateTimeOffset expiresAt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("value"u8)) + { + value = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("expires_at"u8)) + { + expiresAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateResponseClientSecret(value, expiresAt, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateResponseClientSecret)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateResponseClientSecret IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateResponseClientSecret PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateResponseClientSecret(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseClientSecret)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseClientSecret.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseClientSecret.cs new file mode 100644 index 000000000..569b727bd --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseClientSecret.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateResponseClientSecret + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeTranscriptionSessionCreateResponseClientSecret(string value, DateTimeOffset expiresAt) + { + Value = value; + ExpiresAt = expiresAt; + } + + internal InternalRealtimeTranscriptionSessionCreateResponseClientSecret(string value, DateTimeOffset expiresAt, IDictionary additionalBinaryDataProperties) + { + Value = value; + ExpiresAt = expiresAt; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Value { get; } + + public DateTimeOffset ExpiresAt { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription.Serialization.cs new file mode 100644 index 000000000..b39b97aa0 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription.Serialization.cs @@ -0,0 +1,154 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model.Value.ToString()); + } + if (Optional.IsDefined(Language) && _additionalBinaryDataProperties?.ContainsKey("language") != true) + { + writer.WritePropertyName("language"u8); + writer.WriteStringValue(Language); + } + if (Optional.IsDefined(Prompt) && _additionalBinaryDataProperties?.ContainsKey("prompt") != true) + { + writer.WritePropertyName("prompt"u8); + writer.WriteStringValue(Prompt); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription DeserializeInternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel? model = default; + string language = default; + string prompt = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("model"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + model = new InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("language"u8)) + { + language = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("prompt"u8)) + { + prompt = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription(model, language, prompt, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription.cs new file mode 100644 index 000000000..3bc798563 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription.cs @@ -0,0 +1,38 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription() + { + } + + internal InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscription(InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel? model, string language, string prompt, IDictionary additionalBinaryDataProperties) + { + Model = model; + Language = language; + Prompt = prompt; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel? Model { get; } + + public string Language { get; } + + public string Prompt { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel.cs new file mode 100644 index 000000000..c3e99f6f2 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel : IEquatable + { + private readonly string _value; + private const string Gpt4oTranscribeValue = "gpt-4o-transcribe"; + private const string Gpt4oMiniTranscribeValue = "gpt-4o-mini-transcribe"; + private const string Whisper1Value = "whisper-1"; + + public InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel Gpt4oTranscribe { get; } = new InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel(Gpt4oTranscribeValue); + + internal static InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel Gpt4oMiniTranscribe { get; } = new InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel(Gpt4oMiniTranscribeValue); + + internal static InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel Whisper1 { get; } = new InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel(Whisper1Value); + + public static bool operator ==(InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel left, InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel left, InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel right) => !left.Equals(right); + + public static implicit operator InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel(string value) => new InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel other && Equals(other); + + public bool Equals(InternalRealtimeTranscriptionSessionCreateResponseInputAudioTranscriptionModel 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/InternalRealtimeTranscriptionSessionCreateResponseModality.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseModality.cs new file mode 100644 index 000000000..75c9ecceb --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseModality.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal readonly partial struct InternalRealtimeTranscriptionSessionCreateResponseModality : IEquatable + { + private readonly string _value; + private const string TextValue = "text"; + private const string AudioValue = "audio"; + + public InternalRealtimeTranscriptionSessionCreateResponseModality(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRealtimeTranscriptionSessionCreateResponseModality Text { get; } = new InternalRealtimeTranscriptionSessionCreateResponseModality(TextValue); + + internal static InternalRealtimeTranscriptionSessionCreateResponseModality Audio { get; } = new InternalRealtimeTranscriptionSessionCreateResponseModality(AudioValue); + + public static bool operator ==(InternalRealtimeTranscriptionSessionCreateResponseModality left, InternalRealtimeTranscriptionSessionCreateResponseModality right) => left.Equals(right); + + public static bool operator !=(InternalRealtimeTranscriptionSessionCreateResponseModality left, InternalRealtimeTranscriptionSessionCreateResponseModality right) => !left.Equals(right); + + public static implicit operator InternalRealtimeTranscriptionSessionCreateResponseModality(string value) => new InternalRealtimeTranscriptionSessionCreateResponseModality(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRealtimeTranscriptionSessionCreateResponseModality other && Equals(other); + + public bool Equals(InternalRealtimeTranscriptionSessionCreateResponseModality 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/InternalRealtimeTranscriptionSessionCreateResponseTurnDetection.Serialization.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseTurnDetection.Serialization.cs new file mode 100644 index 000000000..4dcfb69b4 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseTurnDetection.Serialization.cs @@ -0,0 +1,173 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateResponseTurnDetection : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseTurnDetection)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (Optional.IsDefined(Threshold) && _additionalBinaryDataProperties?.ContainsKey("threshold") != true) + { + writer.WritePropertyName("threshold"u8); + writer.WriteNumberValue(Threshold.Value); + } + if (Optional.IsDefined(PrefixPaddingMs) && _additionalBinaryDataProperties?.ContainsKey("prefix_padding_ms") != true) + { + writer.WritePropertyName("prefix_padding_ms"u8); + writer.WriteNumberValue(PrefixPaddingMs.Value); + } + if (Optional.IsDefined(SilenceDurationMs) && _additionalBinaryDataProperties?.ContainsKey("silence_duration_ms") != true) + { + writer.WritePropertyName("silence_duration_ms"u8); + writer.WriteNumberValue(SilenceDurationMs.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRealtimeTranscriptionSessionCreateResponseTurnDetection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateResponseTurnDetection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseTurnDetection)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRealtimeTranscriptionSessionCreateResponseTurnDetection(document.RootElement, options); + } + + internal static InternalRealtimeTranscriptionSessionCreateResponseTurnDetection DeserializeInternalRealtimeTranscriptionSessionCreateResponseTurnDetection(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + float? threshold = default; + int? prefixPaddingMs = default; + int? silenceDurationMs = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + threshold = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("prefix_padding_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + prefixPaddingMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("silence_duration_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + silenceDurationMs = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRealtimeTranscriptionSessionCreateResponseTurnDetection(kind, threshold, prefixPaddingMs, silenceDurationMs, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRealtimeTranscriptionSessionCreateResponseTurnDetection)} does not support writing '{options.Format}' format."); + } + } + + InternalRealtimeTranscriptionSessionCreateResponseTurnDetection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRealtimeTranscriptionSessionCreateResponseTurnDetection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRealtimeTranscriptionSessionCreateResponseTurnDetection(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRealtimeTranscriptionSessionCreateResponseTurnDetection)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseTurnDetection.cs b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseTurnDetection.cs new file mode 100644 index 000000000..3ef1e8155 --- /dev/null +++ b/src/Generated/Models/InternalRealtimeTranscriptionSessionCreateResponseTurnDetection.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalRealtimeTranscriptionSessionCreateResponseTurnDetection + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRealtimeTranscriptionSessionCreateResponseTurnDetection() + { + } + + internal InternalRealtimeTranscriptionSessionCreateResponseTurnDetection(string kind, float? threshold, int? prefixPaddingMs, int? silenceDurationMs, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Threshold = threshold; + PrefixPaddingMs = prefixPaddingMs; + SilenceDurationMs = silenceDurationMs; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } + + public float? Threshold { get; } + + public int? PrefixPaddingMs { get; } + + public int? SilenceDurationMs { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalReasoningGenerateSummary.cs b/src/Generated/Models/InternalReasoningGenerateSummary.cs new file mode 100644 index 000000000..9090fb6a5 --- /dev/null +++ b/src/Generated/Models/InternalReasoningGenerateSummary.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalReasoningGenerateSummary : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + private const string ConciseValue = "concise"; + private const string DetailedValue = "detailed"; + + public InternalReasoningGenerateSummary(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalReasoningGenerateSummary Auto { get; } = new InternalReasoningGenerateSummary(AutoValue); + + internal static InternalReasoningGenerateSummary Concise { get; } = new InternalReasoningGenerateSummary(ConciseValue); + + internal static InternalReasoningGenerateSummary Detailed { get; } = new InternalReasoningGenerateSummary(DetailedValue); + + public static bool operator ==(InternalReasoningGenerateSummary left, InternalReasoningGenerateSummary right) => left.Equals(right); + + public static bool operator !=(InternalReasoningGenerateSummary left, InternalReasoningGenerateSummary right) => !left.Equals(right); + + public static implicit operator InternalReasoningGenerateSummary(string value) => new InternalReasoningGenerateSummary(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalReasoningGenerateSummary other && Equals(other); + + public bool Equals(InternalReasoningGenerateSummary 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/InternalReasoningItemParam.Serialization.cs b/src/Generated/Models/InternalReasoningItemParam.Serialization.cs new file mode 100644 index 000000000..894463613 --- /dev/null +++ b/src/Generated/Models/InternalReasoningItemParam.Serialization.cs @@ -0,0 +1,145 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalReasoningItemParam : IJsonModel + { + internal InternalReasoningItemParam() : this(InternalItemType.Reasoning, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalReasoningItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(EncryptedContent) && _additionalBinaryDataProperties?.ContainsKey("encrypted_content") != true) + { + writer.WritePropertyName("encrypted_content"u8); + writer.WriteStringValue(EncryptedContent); + } + if (_additionalBinaryDataProperties?.ContainsKey("summary") != true) + { + writer.WritePropertyName("summary"u8); + writer.WriteStartArray(); + foreach (ReasoningSummaryPart item in Summary) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalReasoningItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalReasoningItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalReasoningItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalReasoningItemParam(document.RootElement, options); + } + + internal static InternalReasoningItemParam DeserializeInternalReasoningItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string encryptedContent = default; + IList summary = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("encrypted_content"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + encryptedContent = null; + continue; + } + encryptedContent = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("summary"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ReasoningSummaryPart.DeserializeReasoningSummaryPart(item, options)); + } + summary = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalReasoningItemParam(kind, additionalBinaryDataProperties, encryptedContent, summary); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalReasoningItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalReasoningItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalReasoningItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalReasoningItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalReasoningItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalReasoningItemParam.cs b/src/Generated/Models/InternalReasoningItemParam.cs new file mode 100644 index 000000000..7d7c6084a --- /dev/null +++ b/src/Generated/Models/InternalReasoningItemParam.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalReasoningItemParam : InternalItemParam + { + public InternalReasoningItemParam(IEnumerable summary) : base(InternalItemType.Reasoning) + { + Argument.AssertNotNull(summary, nameof(summary)); + + Summary = summary.ToList(); + } + + internal InternalReasoningItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, string encryptedContent, IList summary) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + EncryptedContent = encryptedContent; + Summary = summary ?? new ChangeTrackingList(); + } + + public string EncryptedContent { get; set; } + + public IList Summary { get; } + } +} diff --git a/src/Generated/Models/InternalReasoningItemSummaryPartType.cs b/src/Generated/Models/InternalReasoningItemSummaryPartType.cs new file mode 100644 index 000000000..717e06f11 --- /dev/null +++ b/src/Generated/Models/InternalReasoningItemSummaryPartType.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalReasoningItemSummaryPartType : IEquatable + { + private readonly string _value; + private const string SummaryTextValue = "summary_text"; + + public InternalReasoningItemSummaryPartType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalReasoningItemSummaryPartType SummaryText { get; } = new InternalReasoningItemSummaryPartType(SummaryTextValue); + + public static bool operator ==(InternalReasoningItemSummaryPartType left, InternalReasoningItemSummaryPartType right) => left.Equals(right); + + public static bool operator !=(InternalReasoningItemSummaryPartType left, InternalReasoningItemSummaryPartType right) => !left.Equals(right); + + public static implicit operator InternalReasoningItemSummaryPartType(string value) => new InternalReasoningItemSummaryPartType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalReasoningItemSummaryPartType other && Equals(other); + + public bool Equals(InternalReasoningItemSummaryPartType 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/InternalRequestMessageTextContent.Serialization.cs b/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs deleted file mode 100644 index 56f4a890b..000000000 --- a/src/Generated/Models/InternalRequestMessageTextContent.Serialization.cs +++ /dev/null @@ -1,128 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalRequestMessageTextContent : IJsonModel - { - internal InternalRequestMessageTextContent() - { - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalRequestMessageTextContent)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("text") != true) - { - writer.WritePropertyName("text"u8); - writer.WriteStringValue(InternalText); - } - } - - InternalRequestMessageTextContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRequestMessageTextContent)JsonModelCreateCore(ref reader, options); - - protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalRequestMessageTextContent)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalRequestMessageTextContent(document.RootElement, options); - } - - internal static InternalRequestMessageTextContent DeserializeInternalRequestMessageTextContent(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalMessageRequestContentTextObjectType @type = default; - string internalText = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalMessageRequestContentTextObjectType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("text"u8)) - { - internalText = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalRequestMessageTextContent(additionalBinaryDataProperties, @type, internalText); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalRequestMessageTextContent)} does not support writing '{options.Format}' format."); - } - } - - InternalRequestMessageTextContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRequestMessageTextContent)PersistableModelCreateCore(data, options); - - protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalRequestMessageTextContent(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalRequestMessageTextContent)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRequestMessageTextContent internalRequestMessageTextContent) - { - if (internalRequestMessageTextContent == null) - { - return null; - } - return BinaryContent.Create(internalRequestMessageTextContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRequestMessageTextContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRequestMessageTextContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalRequestMessageTextContent.cs b/src/Generated/Models/InternalRequestMessageTextContent.cs deleted file mode 100644 index fc2971d5b..000000000 --- a/src/Generated/Models/InternalRequestMessageTextContent.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalRequestMessageTextContent : MessageContent - { - public InternalRequestMessageTextContent(string internalText) - { - Argument.AssertNotNull(internalText, nameof(internalText)); - - InternalText = internalText; - } - - internal InternalRequestMessageTextContent(IDictionary additionalBinaryDataProperties, InternalMessageRequestContentTextObjectType @type, string internalText) : base(additionalBinaryDataProperties) - { - Type = @type; - InternalText = internalText; - } - - public InternalMessageRequestContentTextObjectType Type { get; } = "text"; - } -} diff --git a/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs b/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs index 32b715c74..2b1a5671a 100644 --- a/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs +++ b/src/Generated/Models/InternalRequiredFunctionToolCall.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -39,13 +40,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteObjectValue(_type, options); + writer.WriteStringValue(Kind); } if (_additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); writer.WriteObjectValue(_internalFunction, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRequiredFunctionToolCall IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRequiredFunctionToolCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -87,7 +90,7 @@ internal static InternalRequiredFunctionToolCall DeserializeInternalRequiredFunc return null; } string id = default; - object @type = default; + string kind = default; InternalRunToolCallObjectFunction internalFunction = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -99,7 +102,7 @@ internal static InternalRequiredFunctionToolCall DeserializeInternalRequiredFunc } if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetObject(); + kind = prop.Value.GetString(); continue; } if (prop.NameEquals("function"u8)) @@ -107,20 +110,22 @@ internal static InternalRequiredFunctionToolCall DeserializeInternalRequiredFunc internalFunction = InternalRunToolCallObjectFunction.DeserializeInternalRunToolCallObjectFunction(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRequiredFunctionToolCall(id, @type, internalFunction, additionalBinaryDataProperties); + return new InternalRequiredFunctionToolCall(id, kind, internalFunction, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRequiredFunctionToolCall)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRequiredFunctionToolCall IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRequiredFunctionToolCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalRequiredFunctionToolCall PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRequiredFunctionToolCall internalRequiredFunctionToolCall) - { - if (internalRequiredFunctionToolCall == null) - { - return null; - } - return BinaryContent.Create(internalRequiredFunctionToolCall, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRequiredFunctionToolCall(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRequiredFunctionToolCall(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRequiredFunctionToolCall.cs b/src/Generated/Models/InternalRequiredFunctionToolCall.cs index 6df47de6d..214934c00 100644 --- a/src/Generated/Models/InternalRequiredFunctionToolCall.cs +++ b/src/Generated/Models/InternalRequiredFunctionToolCall.cs @@ -17,16 +17,18 @@ internal InternalRequiredFunctionToolCall(string id, InternalRunToolCallObjectFu _internalFunction = internalFunction; } - internal InternalRequiredFunctionToolCall(string id, object @type, InternalRunToolCallObjectFunction internalFunction, IDictionary additionalBinaryDataProperties) + internal InternalRequiredFunctionToolCall(string id, string kind, InternalRunToolCallObjectFunction internalFunction, IDictionary additionalBinaryDataProperties) { Id = id; - _type = @type; + Kind = kind; _internalFunction = internalFunction; _additionalBinaryDataProperties = additionalBinaryDataProperties; } public string Id { get; } + public string Kind { get; } = "function"; + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDeltaEvent.Serialization.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDeltaEvent.Serialization.cs new file mode 100644 index 000000000..2539d95aa --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDeltaEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallCodeDeltaEvent : IJsonModel + { + internal InternalResponseCodeInterpreterCallCodeDeltaEvent() : this(InternalResponseStreamEventType.ResponseCodeInterpreterCallCodeDelta, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCodeDeltaEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); + writer.WriteStringValue(Delta); + } + } + + InternalResponseCodeInterpreterCallCodeDeltaEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallCodeDeltaEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCodeDeltaEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseCodeInterpreterCallCodeDeltaEvent(document.RootElement, options); + } + + internal static InternalResponseCodeInterpreterCallCodeDeltaEvent DeserializeInternalResponseCodeInterpreterCallCodeDeltaEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string delta = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("delta"u8)) + { + delta = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseCodeInterpreterCallCodeDeltaEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, delta); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseCodeInterpreterCallCodeDeltaEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseCodeInterpreterCallCodeDeltaEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallCodeDeltaEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseCodeInterpreterCallCodeDeltaEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCodeDeltaEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDeltaEvent.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDeltaEvent.cs new file mode 100644 index 000000000..c070d075f --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDeltaEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallCodeDeltaEvent : StreamingResponseUpdate + { + internal InternalResponseCodeInterpreterCallCodeDeltaEvent(int sequenceNumber, int outputIndex, string delta) : base(InternalResponseStreamEventType.ResponseCodeInterpreterCallCodeDelta, sequenceNumber) + { + OutputIndex = outputIndex; + Delta = delta; + } + + internal InternalResponseCodeInterpreterCallCodeDeltaEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string delta) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + Delta = delta; + } + + public int OutputIndex { get; } + + public string Delta { get; } + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDoneEvent.Serialization.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDoneEvent.Serialization.cs new file mode 100644 index 000000000..f0aa1e6c3 --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDoneEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallCodeDoneEvent : IJsonModel + { + internal InternalResponseCodeInterpreterCallCodeDoneEvent() : this(InternalResponseStreamEventType.ResponseCodeInterpreterCallCodeDone, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCodeDoneEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("code") != true) + { + writer.WritePropertyName("code"u8); + writer.WriteStringValue(Code); + } + } + + InternalResponseCodeInterpreterCallCodeDoneEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallCodeDoneEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCodeDoneEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseCodeInterpreterCallCodeDoneEvent(document.RootElement, options); + } + + internal static InternalResponseCodeInterpreterCallCodeDoneEvent DeserializeInternalResponseCodeInterpreterCallCodeDoneEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string code = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("code"u8)) + { + code = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseCodeInterpreterCallCodeDoneEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, code); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseCodeInterpreterCallCodeDoneEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseCodeInterpreterCallCodeDoneEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallCodeDoneEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseCodeInterpreterCallCodeDoneEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCodeDoneEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDoneEvent.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDoneEvent.cs new file mode 100644 index 000000000..218b72b7b --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallCodeDoneEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallCodeDoneEvent : StreamingResponseUpdate + { + internal InternalResponseCodeInterpreterCallCodeDoneEvent(int sequenceNumber, int outputIndex, string code) : base(InternalResponseStreamEventType.ResponseCodeInterpreterCallCodeDone, sequenceNumber) + { + OutputIndex = outputIndex; + Code = code; + } + + internal InternalResponseCodeInterpreterCallCodeDoneEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string code) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + Code = code; + } + + public int OutputIndex { get; } + + public string Code { get; } + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallCompletedEvent.Serialization.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallCompletedEvent.Serialization.cs new file mode 100644 index 000000000..288fa4585 --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallCompletedEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallCompletedEvent : IJsonModel + { + internal InternalResponseCodeInterpreterCallCompletedEvent() : this(InternalResponseStreamEventType.ResponseCodeInterpreterCallCompleted, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCompletedEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("code_interpreter_call") != true) + { + writer.WritePropertyName("code_interpreter_call"u8); + writer.WriteObjectValue(CodeInterpreterCall, options); + } + } + + InternalResponseCodeInterpreterCallCompletedEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallCompletedEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCompletedEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseCodeInterpreterCallCompletedEvent(document.RootElement, options); + } + + internal static InternalResponseCodeInterpreterCallCompletedEvent DeserializeInternalResponseCodeInterpreterCallCompletedEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + InternalCodeInterpreterToolCallItemResource codeInterpreterCall = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("code_interpreter_call"u8)) + { + codeInterpreterCall = InternalCodeInterpreterToolCallItemResource.DeserializeInternalCodeInterpreterToolCallItemResource(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseCodeInterpreterCallCompletedEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, codeInterpreterCall); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseCodeInterpreterCallCompletedEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseCodeInterpreterCallCompletedEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallCompletedEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseCodeInterpreterCallCompletedEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallCompletedEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallCompletedEvent.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallCompletedEvent.cs new file mode 100644 index 000000000..3817fe37b --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallCompletedEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallCompletedEvent : StreamingResponseUpdate + { + internal InternalResponseCodeInterpreterCallCompletedEvent(int sequenceNumber, int outputIndex, InternalCodeInterpreterToolCallItemResource codeInterpreterCall) : base(InternalResponseStreamEventType.ResponseCodeInterpreterCallCompleted, sequenceNumber) + { + OutputIndex = outputIndex; + CodeInterpreterCall = codeInterpreterCall; + } + + internal InternalResponseCodeInterpreterCallCompletedEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, InternalCodeInterpreterToolCallItemResource codeInterpreterCall) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + CodeInterpreterCall = codeInterpreterCall; + } + + public int OutputIndex { get; } + + internal InternalCodeInterpreterToolCallItemResource CodeInterpreterCall { get; } + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallInProgressEvent.Serialization.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallInProgressEvent.Serialization.cs new file mode 100644 index 000000000..a53062bef --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallInProgressEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallInProgressEvent : IJsonModel + { + internal InternalResponseCodeInterpreterCallInProgressEvent() : this(InternalResponseStreamEventType.ResponseCodeInterpreterCallInProgress, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallInProgressEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("code_interpreter_call") != true) + { + writer.WritePropertyName("code_interpreter_call"u8); + writer.WriteObjectValue(CodeInterpreterCall, options); + } + } + + InternalResponseCodeInterpreterCallInProgressEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallInProgressEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallInProgressEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseCodeInterpreterCallInProgressEvent(document.RootElement, options); + } + + internal static InternalResponseCodeInterpreterCallInProgressEvent DeserializeInternalResponseCodeInterpreterCallInProgressEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + InternalCodeInterpreterToolCallItemResource codeInterpreterCall = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("code_interpreter_call"u8)) + { + codeInterpreterCall = InternalCodeInterpreterToolCallItemResource.DeserializeInternalCodeInterpreterToolCallItemResource(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseCodeInterpreterCallInProgressEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, codeInterpreterCall); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseCodeInterpreterCallInProgressEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseCodeInterpreterCallInProgressEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallInProgressEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseCodeInterpreterCallInProgressEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallInProgressEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallInProgressEvent.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallInProgressEvent.cs new file mode 100644 index 000000000..c1d147c2f --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallInProgressEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallInProgressEvent : StreamingResponseUpdate + { + internal InternalResponseCodeInterpreterCallInProgressEvent(int sequenceNumber, int outputIndex, InternalCodeInterpreterToolCallItemResource codeInterpreterCall) : base(InternalResponseStreamEventType.ResponseCodeInterpreterCallInProgress, sequenceNumber) + { + OutputIndex = outputIndex; + CodeInterpreterCall = codeInterpreterCall; + } + + internal InternalResponseCodeInterpreterCallInProgressEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, InternalCodeInterpreterToolCallItemResource codeInterpreterCall) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + CodeInterpreterCall = codeInterpreterCall; + } + + public int OutputIndex { get; } + + internal InternalCodeInterpreterToolCallItemResource CodeInterpreterCall { get; } + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallInterpretingEvent.Serialization.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallInterpretingEvent.Serialization.cs new file mode 100644 index 000000000..d8ede211d --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallInterpretingEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallInterpretingEvent : IJsonModel + { + internal InternalResponseCodeInterpreterCallInterpretingEvent() : this(InternalResponseStreamEventType.ResponseCodeInterpreterCallInterpreting, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallInterpretingEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("code_interpreter_call") != true) + { + writer.WritePropertyName("code_interpreter_call"u8); + writer.WriteObjectValue(CodeInterpreterCall, options); + } + } + + InternalResponseCodeInterpreterCallInterpretingEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallInterpretingEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallInterpretingEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseCodeInterpreterCallInterpretingEvent(document.RootElement, options); + } + + internal static InternalResponseCodeInterpreterCallInterpretingEvent DeserializeInternalResponseCodeInterpreterCallInterpretingEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + InternalCodeInterpreterToolCallItemResource codeInterpreterCall = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("code_interpreter_call"u8)) + { + codeInterpreterCall = InternalCodeInterpreterToolCallItemResource.DeserializeInternalCodeInterpreterToolCallItemResource(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseCodeInterpreterCallInterpretingEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, codeInterpreterCall); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseCodeInterpreterCallInterpretingEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseCodeInterpreterCallInterpretingEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseCodeInterpreterCallInterpretingEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseCodeInterpreterCallInterpretingEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseCodeInterpreterCallInterpretingEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseCodeInterpreterCallInterpretingEvent.cs b/src/Generated/Models/InternalResponseCodeInterpreterCallInterpretingEvent.cs new file mode 100644 index 000000000..2428f63ca --- /dev/null +++ b/src/Generated/Models/InternalResponseCodeInterpreterCallInterpretingEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseCodeInterpreterCallInterpretingEvent : StreamingResponseUpdate + { + internal InternalResponseCodeInterpreterCallInterpretingEvent(int sequenceNumber, int outputIndex, InternalCodeInterpreterToolCallItemResource codeInterpreterCall) : base(InternalResponseStreamEventType.ResponseCodeInterpreterCallInterpreting, sequenceNumber) + { + OutputIndex = outputIndex; + CodeInterpreterCall = codeInterpreterCall; + } + + internal InternalResponseCodeInterpreterCallInterpretingEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, InternalCodeInterpreterToolCallItemResource codeInterpreterCall) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + CodeInterpreterCall = codeInterpreterCall; + } + + public int OutputIndex { get; } + + internal InternalCodeInterpreterToolCallItemResource CodeInterpreterCall { get; } + } +} diff --git a/src/Generated/Models/InternalResponseErrorResponse.Serialization.cs b/src/Generated/Models/InternalResponseErrorResponse.Serialization.cs new file mode 100644 index 000000000..9142f5b73 --- /dev/null +++ b/src/Generated/Models/InternalResponseErrorResponse.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseErrorResponse : IJsonModel + { + internal InternalResponseErrorResponse() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseErrorResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalResponseErrorResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalResponseErrorResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseErrorResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseErrorResponse(document.RootElement, options); + } + + internal static InternalResponseErrorResponse DeserializeInternalResponseErrorResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseError error = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("error"u8)) + { + error = ResponseError.DeserializeResponseError(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseErrorResponse(error, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseErrorResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseErrorResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalResponseErrorResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseErrorResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseErrorResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseErrorResponse.cs b/src/Generated/Models/InternalResponseErrorResponse.cs new file mode 100644 index 000000000..0d8395db4 --- /dev/null +++ b/src/Generated/Models/InternalResponseErrorResponse.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseErrorResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalResponseErrorResponse(ResponseError error) + { + Error = error; + } + + internal InternalResponseErrorResponse(ResponseError error, IDictionary additionalBinaryDataProperties) + { + Error = error; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public ResponseError Error { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalResponseFormat.Serialization.cs b/src/Generated/Models/InternalResponseFormat.Serialization.cs new file mode 100644 index 000000000..a1c6411e7 --- /dev/null +++ b/src/Generated/Models/InternalResponseFormat.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Internal +{ + [PersistableModelProxy(typeof(InternalUnknownResponseFormat))] + internal abstract partial class InternalResponseFormat : IJsonModel + { + internal InternalResponseFormat() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseFormat)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalResponseFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseFormat)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseFormat(document.RootElement, options); + } + + internal static InternalResponseFormat DeserializeInternalResponseFormat(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "text": + return InternalResponseFormatText.DeserializeInternalResponseFormatText(element, options); + case "json_object": + return InternalResponseFormatJsonObject.DeserializeInternalResponseFormatJsonObject(element, options); + case "json_schema": + return InternalResponseFormatJsonSchema.DeserializeInternalResponseFormatJsonSchema(element, options); + } + } + return InternalUnknownResponseFormat.DeserializeInternalUnknownResponseFormat(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseFormat)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseFormat(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseFormat)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseFormat.cs b/src/Generated/Models/InternalResponseFormat.cs new file mode 100644 index 000000000..f2489f2c6 --- /dev/null +++ b/src/Generated/Models/InternalResponseFormat.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Internal +{ + internal abstract partial class InternalResponseFormat + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalResponseFormat(InternalResponseFormatType kind) + { + Kind = kind; + } + + internal InternalResponseFormat(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalResponseFormatType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalResponseFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalResponseFormatJsonObject.Serialization.cs index 81e5f3afa..685569130 100644 --- a/src/Generated/Models/InternalResponseFormatJsonObject.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatJsonObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,7 +33,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponseFormatJsonObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseFormatJsonObject)JsonModelCreateCore(ref reader, options); - protected override InternalOmniTypedResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -49,29 +51,31 @@ internal static InternalResponseFormatJsonObject DeserializeInternalResponseForm { return null; } - string @type = "json_object"; + InternalResponseFormatType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalResponseFormatType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalResponseFormatJsonObject(@type, additionalBinaryDataProperties); + return new InternalResponseFormatJsonObject(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponseFormatJsonObject)} does not support writing '{options.Format}' format."); } @@ -79,7 +83,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponseFormatJsonObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseFormatJsonObject)PersistableModelCreateCore(data, options); - protected override InternalOmniTypedResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -95,21 +100,5 @@ protected override InternalOmniTypedResponseFormat PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponseFormatJsonObject internalResponseFormatJsonObject) - { - if (internalResponseFormatJsonObject == null) - { - return null; - } - return BinaryContent.Create(internalResponseFormatJsonObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponseFormatJsonObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponseFormatJsonObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponseFormatJsonObject.cs b/src/Generated/Models/InternalResponseFormatJsonObject.cs index d6348da4a..341ae6558 100644 --- a/src/Generated/Models/InternalResponseFormatJsonObject.cs +++ b/src/Generated/Models/InternalResponseFormatJsonObject.cs @@ -7,13 +7,13 @@ namespace OpenAI.Internal { - internal partial class InternalResponseFormatJsonObject : InternalOmniTypedResponseFormat + internal partial class InternalResponseFormatJsonObject : InternalResponseFormat { - public InternalResponseFormatJsonObject() : base("json_object") + public InternalResponseFormatJsonObject() : this(InternalResponseFormatType.JsonObject, null) { } - internal InternalResponseFormatJsonObject(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) + internal InternalResponseFormatJsonObject(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalResponseFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalResponseFormatJsonSchema.Serialization.cs index 153cfc475..9214d71aa 100644 --- a/src/Generated/Models/InternalResponseFormatJsonSchema.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatJsonSchema.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Internal { internal partial class InternalResponseFormatJsonSchema : IJsonModel { - internal InternalResponseFormatJsonSchema() + internal InternalResponseFormatJsonSchema() : this(InternalResponseFormatType.JsonSchema, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,7 +42,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponseFormatJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseFormatJsonSchema)JsonModelCreateCore(ref reader, options); - protected override InternalOmniTypedResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -58,14 +60,14 @@ internal static InternalResponseFormatJsonSchema DeserializeInternalResponseForm { return null; } - string @type = "json_schema"; + InternalResponseFormatType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalResponseFormatJsonSchemaJsonSchema jsonSchema = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalResponseFormatType(prop.Value.GetString()); continue; } if (prop.NameEquals("json_schema"u8)) @@ -73,20 +75,22 @@ internal static InternalResponseFormatJsonSchema DeserializeInternalResponseForm jsonSchema = InternalResponseFormatJsonSchemaJsonSchema.DeserializeInternalResponseFormatJsonSchemaJsonSchema(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalResponseFormatJsonSchema(@type, additionalBinaryDataProperties, jsonSchema); + return new InternalResponseFormatJsonSchema(kind, additionalBinaryDataProperties, jsonSchema); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponseFormatJsonSchema)} does not support writing '{options.Format}' format."); } @@ -94,7 +98,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponseFormatJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseFormatJsonSchema)PersistableModelCreateCore(data, options); - protected override InternalOmniTypedResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -110,21 +115,5 @@ protected override InternalOmniTypedResponseFormat PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponseFormatJsonSchema internalResponseFormatJsonSchema) - { - if (internalResponseFormatJsonSchema == null) - { - return null; - } - return BinaryContent.Create(internalResponseFormatJsonSchema, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponseFormatJsonSchema(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponseFormatJsonSchema(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponseFormatJsonSchema.cs b/src/Generated/Models/InternalResponseFormatJsonSchema.cs index 91aa9e238..38900e0f6 100644 --- a/src/Generated/Models/InternalResponseFormatJsonSchema.cs +++ b/src/Generated/Models/InternalResponseFormatJsonSchema.cs @@ -8,20 +8,20 @@ namespace OpenAI.Internal { - internal partial class InternalResponseFormatJsonSchema : InternalOmniTypedResponseFormat + internal partial class InternalResponseFormatJsonSchema : InternalResponseFormat { - public InternalResponseFormatJsonSchema(InternalResponseFormatJsonSchemaJsonSchema jsonSchema) : base("json_schema") + internal InternalResponseFormatJsonSchema(InternalResponseFormatJsonSchemaJsonSchema jsonSchema) : base(InternalResponseFormatType.JsonSchema) { Argument.AssertNotNull(jsonSchema, nameof(jsonSchema)); JsonSchema = jsonSchema; } - internal InternalResponseFormatJsonSchema(string @type, IDictionary additionalBinaryDataProperties, InternalResponseFormatJsonSchemaJsonSchema jsonSchema) : base(@type, additionalBinaryDataProperties) + internal InternalResponseFormatJsonSchema(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties, InternalResponseFormatJsonSchemaJsonSchema jsonSchema) : base(kind, additionalBinaryDataProperties) { JsonSchema = jsonSchema; } - public InternalResponseFormatJsonSchemaJsonSchema JsonSchema { get; set; } + internal InternalResponseFormatJsonSchemaJsonSchema JsonSchema { get; set; } } } diff --git a/src/Generated/Models/InternalResponseFormatJsonSchemaJsonSchema.Serialization.cs b/src/Generated/Models/InternalResponseFormatJsonSchemaJsonSchema.Serialization.cs index 1da8001f5..f7dea1894 100644 --- a/src/Generated/Models/InternalResponseFormatJsonSchemaJsonSchema.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatJsonSchemaJsonSchema.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,6 +59,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } #endif } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -81,6 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalResponseFormatJsonSchemaJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalResponseFormatJsonSchemaJsonSchema JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -134,6 +137,7 @@ internal static InternalResponseFormatJsonSchemaJsonSchema DeserializeInternalRe schema = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponseFormatJsonSchemaJsonSchema(description, name, strict, schema, additionalBinaryDataProperties); @@ -141,13 +145,14 @@ internal static InternalResponseFormatJsonSchemaJsonSchema DeserializeInternalRe BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponseFormatJsonSchemaJsonSchema)} does not support writing '{options.Format}' format."); } @@ -155,6 +160,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponseFormatJsonSchemaJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalResponseFormatJsonSchemaJsonSchema PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -171,21 +177,5 @@ protected virtual InternalResponseFormatJsonSchemaJsonSchema PersistableModelCre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponseFormatJsonSchemaJsonSchema internalResponseFormatJsonSchemaJsonSchema) - { - if (internalResponseFormatJsonSchemaJsonSchema == null) - { - return null; - } - return BinaryContent.Create(internalResponseFormatJsonSchemaJsonSchema, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponseFormatJsonSchemaJsonSchema(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponseFormatJsonSchemaJsonSchema(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponseFormatJsonSchemaSchema.Serialization.cs b/src/Generated/Models/InternalResponseFormatJsonSchemaSchema.Serialization.cs index 7954fe60a..f0dfc3103 100644 --- a/src/Generated/Models/InternalResponseFormatJsonSchemaSchema.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatJsonSchemaSchema.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -43,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalResponseFormatJsonSchemaSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalResponseFormatJsonSchemaSchema JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -70,13 +72,14 @@ internal static InternalResponseFormatJsonSchemaSchema DeserializeInternalRespon BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponseFormatJsonSchemaSchema)} does not support writing '{options.Format}' format."); } @@ -84,6 +87,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponseFormatJsonSchemaSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalResponseFormatJsonSchemaSchema PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,21 +104,5 @@ protected virtual InternalResponseFormatJsonSchemaSchema PersistableModelCreateC } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponseFormatJsonSchemaSchema internalResponseFormatJsonSchemaSchema) - { - if (internalResponseFormatJsonSchemaSchema == null) - { - return null; - } - return BinaryContent.Create(internalResponseFormatJsonSchemaSchema, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponseFormatJsonSchemaSchema(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponseFormatJsonSchemaSchema(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponseFormatJsonSchemaSchema.cs b/src/Generated/Models/InternalResponseFormatJsonSchemaSchema.cs index bd7575c36..7d3344ab2 100644 --- a/src/Generated/Models/InternalResponseFormatJsonSchemaSchema.cs +++ b/src/Generated/Models/InternalResponseFormatJsonSchemaSchema.cs @@ -12,14 +12,14 @@ internal partial class InternalResponseFormatJsonSchemaSchema { private protected IDictionary _additionalBinaryDataProperties; - public InternalResponseFormatJsonSchemaSchema() + public InternalResponseFormatJsonSchemaSchema() : this(null) { - _additionalBinaryDataProperties = new ChangeTrackingDictionary(); } internal InternalResponseFormatJsonSchemaSchema(IDictionary additionalProperties) { - _additionalBinaryDataProperties = additionalProperties; + // Plugin customization: ensure initialization of collections + _additionalBinaryDataProperties = additionalProperties ?? new ChangeTrackingDictionary(); } public IDictionary AdditionalProperties => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/InternalResponseFormatText.Serialization.cs b/src/Generated/Models/InternalResponseFormatText.Serialization.cs index 1db285439..4fe0cb0cc 100644 --- a/src/Generated/Models/InternalResponseFormatText.Serialization.cs +++ b/src/Generated/Models/InternalResponseFormatText.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,7 +33,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponseFormatText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseFormatText)JsonModelCreateCore(ref reader, options); - protected override InternalOmniTypedResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -49,29 +51,31 @@ internal static InternalResponseFormatText DeserializeInternalResponseFormatText { return null; } - string @type = "text"; + InternalResponseFormatType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalResponseFormatType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalResponseFormatText(@type, additionalBinaryDataProperties); + return new InternalResponseFormatText(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponseFormatText)} does not support writing '{options.Format}' format."); } @@ -79,7 +83,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponseFormatText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseFormatText)PersistableModelCreateCore(data, options); - protected override InternalOmniTypedResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -95,21 +100,5 @@ protected override InternalOmniTypedResponseFormat PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponseFormatText internalResponseFormatText) - { - if (internalResponseFormatText == null) - { - return null; - } - return BinaryContent.Create(internalResponseFormatText, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponseFormatText(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponseFormatText(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponseFormatText.cs b/src/Generated/Models/InternalResponseFormatText.cs index 81ccbc8d1..41fe0495c 100644 --- a/src/Generated/Models/InternalResponseFormatText.cs +++ b/src/Generated/Models/InternalResponseFormatText.cs @@ -7,13 +7,13 @@ namespace OpenAI.Internal { - internal partial class InternalResponseFormatText : InternalOmniTypedResponseFormat + internal partial class InternalResponseFormatText : InternalResponseFormat { - public InternalResponseFormatText() : base("text") + public InternalResponseFormatText() : this(InternalResponseFormatType.Text, null) { } - internal InternalResponseFormatText(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) + internal InternalResponseFormatText(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalResponseFormatType.cs b/src/Generated/Models/InternalResponseFormatType.cs new file mode 100644 index 000000000..b998e0695 --- /dev/null +++ b/src/Generated/Models/InternalResponseFormatType.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Internal +{ + internal readonly partial struct InternalResponseFormatType : IEquatable + { + private readonly string _value; + private const string TextValue = "text"; + private const string JsonObjectValue = "json_object"; + private const string JsonSchemaValue = "json_schema"; + + public InternalResponseFormatType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalResponseFormatType Text { get; } = new InternalResponseFormatType(TextValue); + + internal static InternalResponseFormatType JsonObject { get; } = new InternalResponseFormatType(JsonObjectValue); + + internal static InternalResponseFormatType JsonSchema { get; } = new InternalResponseFormatType(JsonSchemaValue); + + public static bool operator ==(InternalResponseFormatType left, InternalResponseFormatType right) => left.Equals(right); + + public static bool operator !=(InternalResponseFormatType left, InternalResponseFormatType right) => !left.Equals(right); + + public static implicit operator InternalResponseFormatType(string value) => new InternalResponseFormatType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalResponseFormatType other && Equals(other); + + public bool Equals(InternalResponseFormatType 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/InternalResponseImageGenCallCompletedEvent.Serialization.cs b/src/Generated/Models/InternalResponseImageGenCallCompletedEvent.Serialization.cs new file mode 100644 index 000000000..7288ed951 --- /dev/null +++ b/src/Generated/Models/InternalResponseImageGenCallCompletedEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseImageGenCallCompletedEvent : IJsonModel + { + internal InternalResponseImageGenCallCompletedEvent() : this(InternalResponseStreamEventType.ResponseImageGenerationCallCompleted, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseImageGenCallCompletedEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + } + + InternalResponseImageGenCallCompletedEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseImageGenCallCompletedEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseImageGenCallCompletedEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseImageGenCallCompletedEvent(document.RootElement, options); + } + + internal static InternalResponseImageGenCallCompletedEvent DeserializeInternalResponseImageGenCallCompletedEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string itemId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseImageGenCallCompletedEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseImageGenCallCompletedEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseImageGenCallCompletedEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseImageGenCallCompletedEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseImageGenCallCompletedEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseImageGenCallCompletedEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseImageGenCallCompletedEvent.cs b/src/Generated/Models/InternalResponseImageGenCallCompletedEvent.cs new file mode 100644 index 000000000..f2ad715f1 --- /dev/null +++ b/src/Generated/Models/InternalResponseImageGenCallCompletedEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseImageGenCallCompletedEvent : StreamingResponseUpdate + { + internal InternalResponseImageGenCallCompletedEvent(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseImageGenerationCallCompleted, sequenceNumber) + { + OutputIndex = outputIndex; + ItemId = itemId; + } + + internal InternalResponseImageGenCallCompletedEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + ItemId = itemId; + } + + public int OutputIndex { get; } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/InternalResponseImageGenCallGeneratingEvent.Serialization.cs b/src/Generated/Models/InternalResponseImageGenCallGeneratingEvent.Serialization.cs new file mode 100644 index 000000000..c21961368 --- /dev/null +++ b/src/Generated/Models/InternalResponseImageGenCallGeneratingEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseImageGenCallGeneratingEvent : IJsonModel + { + internal InternalResponseImageGenCallGeneratingEvent() : this(InternalResponseStreamEventType.ResponseImageGenerationCallGenerating, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseImageGenCallGeneratingEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + } + + InternalResponseImageGenCallGeneratingEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseImageGenCallGeneratingEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseImageGenCallGeneratingEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseImageGenCallGeneratingEvent(document.RootElement, options); + } + + internal static InternalResponseImageGenCallGeneratingEvent DeserializeInternalResponseImageGenCallGeneratingEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string itemId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseImageGenCallGeneratingEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseImageGenCallGeneratingEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseImageGenCallGeneratingEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseImageGenCallGeneratingEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseImageGenCallGeneratingEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseImageGenCallGeneratingEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseImageGenCallGeneratingEvent.cs b/src/Generated/Models/InternalResponseImageGenCallGeneratingEvent.cs new file mode 100644 index 000000000..4e83f2ef4 --- /dev/null +++ b/src/Generated/Models/InternalResponseImageGenCallGeneratingEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseImageGenCallGeneratingEvent : StreamingResponseUpdate + { + internal InternalResponseImageGenCallGeneratingEvent(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseImageGenerationCallGenerating, sequenceNumber) + { + OutputIndex = outputIndex; + ItemId = itemId; + } + + internal InternalResponseImageGenCallGeneratingEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + ItemId = itemId; + } + + public int OutputIndex { get; } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/InternalResponseImageGenCallInProgressEvent.Serialization.cs b/src/Generated/Models/InternalResponseImageGenCallInProgressEvent.Serialization.cs new file mode 100644 index 000000000..3f78b61bc --- /dev/null +++ b/src/Generated/Models/InternalResponseImageGenCallInProgressEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseImageGenCallInProgressEvent : IJsonModel + { + internal InternalResponseImageGenCallInProgressEvent() : this(InternalResponseStreamEventType.ResponseImageGenerationCallInProgress, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseImageGenCallInProgressEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + } + + InternalResponseImageGenCallInProgressEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseImageGenCallInProgressEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseImageGenCallInProgressEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseImageGenCallInProgressEvent(document.RootElement, options); + } + + internal static InternalResponseImageGenCallInProgressEvent DeserializeInternalResponseImageGenCallInProgressEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string itemId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseImageGenCallInProgressEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseImageGenCallInProgressEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseImageGenCallInProgressEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseImageGenCallInProgressEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseImageGenCallInProgressEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseImageGenCallInProgressEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseImageGenCallInProgressEvent.cs b/src/Generated/Models/InternalResponseImageGenCallInProgressEvent.cs new file mode 100644 index 000000000..a14e8f19d --- /dev/null +++ b/src/Generated/Models/InternalResponseImageGenCallInProgressEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseImageGenCallInProgressEvent : StreamingResponseUpdate + { + internal InternalResponseImageGenCallInProgressEvent(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseImageGenerationCallInProgress, sequenceNumber) + { + OutputIndex = outputIndex; + ItemId = itemId; + } + + internal InternalResponseImageGenCallInProgressEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + ItemId = itemId; + } + + public int OutputIndex { get; } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/InternalResponseImageGenCallPartialImageEvent.Serialization.cs b/src/Generated/Models/InternalResponseImageGenCallPartialImageEvent.Serialization.cs new file mode 100644 index 000000000..5597130ff --- /dev/null +++ b/src/Generated/Models/InternalResponseImageGenCallPartialImageEvent.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseImageGenCallPartialImageEvent : IJsonModel + { + internal InternalResponseImageGenCallPartialImageEvent() : this(InternalResponseStreamEventType.ResponseImageGenerationCallPartialImage, default, null, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseImageGenCallPartialImageEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("partial_image_index") != true) + { + writer.WritePropertyName("partial_image_index"u8); + writer.WriteNumberValue(PartialImageIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("partial_image_b64") != true) + { + writer.WritePropertyName("partial_image_b64"u8); + writer.WriteStringValue(PartialImageB64); + } + } + + InternalResponseImageGenCallPartialImageEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseImageGenCallPartialImageEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseImageGenCallPartialImageEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseImageGenCallPartialImageEvent(document.RootElement, options); + } + + internal static InternalResponseImageGenCallPartialImageEvent DeserializeInternalResponseImageGenCallPartialImageEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string itemId = default; + int partialImageIndex = default; + string partialImageB64 = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("partial_image_index"u8)) + { + partialImageIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("partial_image_b64"u8)) + { + partialImageB64 = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseImageGenCallPartialImageEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + outputIndex, + itemId, + partialImageIndex, + partialImageB64); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseImageGenCallPartialImageEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseImageGenCallPartialImageEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseImageGenCallPartialImageEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseImageGenCallPartialImageEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseImageGenCallPartialImageEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseImageGenCallPartialImageEvent.cs b/src/Generated/Models/InternalResponseImageGenCallPartialImageEvent.cs new file mode 100644 index 000000000..fdb735278 --- /dev/null +++ b/src/Generated/Models/InternalResponseImageGenCallPartialImageEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseImageGenCallPartialImageEvent : StreamingResponseUpdate + { + internal InternalResponseImageGenCallPartialImageEvent(int sequenceNumber, int outputIndex, string itemId, int partialImageIndex, string partialImageB64) : base(InternalResponseStreamEventType.ResponseImageGenerationCallPartialImage, sequenceNumber) + { + OutputIndex = outputIndex; + ItemId = itemId; + PartialImageIndex = partialImageIndex; + PartialImageB64 = partialImageB64; + } + + internal InternalResponseImageGenCallPartialImageEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId, int partialImageIndex, string partialImageB64) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + ItemId = itemId; + PartialImageIndex = partialImageIndex; + PartialImageB64 = partialImageB64; + } + + public int OutputIndex { get; } + + public string ItemId { get; } + + public int PartialImageIndex { get; } + + public string PartialImageB64 { get; } + } +} diff --git a/src/Generated/Models/InternalResponseItemList.Serialization.cs b/src/Generated/Models/InternalResponseItemList.Serialization.cs new file mode 100644 index 000000000..f567f3c8b --- /dev/null +++ b/src/Generated/Models/InternalResponseItemList.Serialization.cs @@ -0,0 +1,192 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseItemList : IJsonModel + { + internal InternalResponseItemList() : this(null, null, default, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseItemList)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (ResponseItem item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) + { + writer.WritePropertyName("first_id"u8); + writer.WriteStringValue(FirstId); + } + if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) + { + writer.WritePropertyName("last_id"u8); + writer.WriteStringValue(LastId); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalResponseItemList IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalResponseItemList JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseItemList)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseItemList(document.RootElement, options); + } + + internal static InternalResponseItemList DeserializeInternalResponseItemList(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + bool hasMore = default; + string firstId = default; + string lastId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseItem.DeserializeResponseItem(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("first_id"u8)) + { + firstId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("last_id"u8)) + { + lastId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseItemList( + @object, + data, + hasMore, + firstId, + lastId, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseItemList)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseItemList IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalResponseItemList PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseItemList(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseItemList)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseItemList.cs b/src/Generated/Models/InternalResponseItemList.cs new file mode 100644 index 000000000..1547cf782 --- /dev/null +++ b/src/Generated/Models/InternalResponseItemList.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseItemList + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalResponseItemList(IEnumerable data, bool hasMore, string firstId, string lastId) + { + Data = data.ToList(); + HasMore = hasMore; + FirstId = firstId; + LastId = lastId; + } + + internal InternalResponseItemList(string @object, IList data, bool hasMore, string firstId, string lastId, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + HasMore = hasMore; + FirstId = firstId; + LastId = lastId; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "list"; + + public IList Data { get; } + + public bool HasMore { get; } + + public string FirstId { get; } + + public string LastId { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallArgumentsDeltaEvent.Serialization.cs b/src/Generated/Models/InternalResponseMCPCallArgumentsDeltaEvent.Serialization.cs new file mode 100644 index 000000000..d76962a85 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallArgumentsDeltaEvent.Serialization.cs @@ -0,0 +1,160 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallArgumentsDeltaEvent : IJsonModel + { + internal InternalResponseMCPCallArgumentsDeltaEvent() : this(InternalResponseStreamEventType.ResponseMcpCallArgumentsDelta, default, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallArgumentsDeltaEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Delta); +#else + using (JsonDocument document = JsonDocument.Parse(Delta)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalResponseMCPCallArgumentsDeltaEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMCPCallArgumentsDeltaEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallArgumentsDeltaEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseMCPCallArgumentsDeltaEvent(document.RootElement, options); + } + + internal static InternalResponseMCPCallArgumentsDeltaEvent DeserializeInternalResponseMCPCallArgumentsDeltaEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string itemId = default; + BinaryData delta = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("delta"u8)) + { + delta = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseMCPCallArgumentsDeltaEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + outputIndex, + itemId, + delta); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseMCPCallArgumentsDeltaEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseMCPCallArgumentsDeltaEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMCPCallArgumentsDeltaEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseMCPCallArgumentsDeltaEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseMCPCallArgumentsDeltaEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallArgumentsDeltaEvent.cs b/src/Generated/Models/InternalResponseMCPCallArgumentsDeltaEvent.cs new file mode 100644 index 000000000..ac8af2819 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallArgumentsDeltaEvent.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallArgumentsDeltaEvent : StreamingResponseUpdate + { + internal InternalResponseMCPCallArgumentsDeltaEvent(int sequenceNumber, int outputIndex, string itemId, BinaryData delta) : base(InternalResponseStreamEventType.ResponseMcpCallArgumentsDelta, sequenceNumber) + { + OutputIndex = outputIndex; + ItemId = itemId; + Delta = delta; + } + + internal InternalResponseMCPCallArgumentsDeltaEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId, BinaryData delta) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + ItemId = itemId; + Delta = delta; + } + + public int OutputIndex { get; } + + public string ItemId { get; } + + public BinaryData Delta { get; } + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallArgumentsDoneEvent.Serialization.cs b/src/Generated/Models/InternalResponseMCPCallArgumentsDoneEvent.Serialization.cs new file mode 100644 index 000000000..2ee759bdc --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallArgumentsDoneEvent.Serialization.cs @@ -0,0 +1,160 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallArgumentsDoneEvent : IJsonModel + { + internal InternalResponseMCPCallArgumentsDoneEvent() : this(InternalResponseStreamEventType.ResponseMcpCallArgumentsDone, default, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallArgumentsDoneEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("arguments") != true) + { + writer.WritePropertyName("arguments"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Arguments); +#else + using (JsonDocument document = JsonDocument.Parse(Arguments)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalResponseMCPCallArgumentsDoneEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMCPCallArgumentsDoneEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallArgumentsDoneEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseMCPCallArgumentsDoneEvent(document.RootElement, options); + } + + internal static InternalResponseMCPCallArgumentsDoneEvent DeserializeInternalResponseMCPCallArgumentsDoneEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string itemId = default; + BinaryData arguments = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("arguments"u8)) + { + arguments = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseMCPCallArgumentsDoneEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + outputIndex, + itemId, + arguments); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseMCPCallArgumentsDoneEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseMCPCallArgumentsDoneEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMCPCallArgumentsDoneEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseMCPCallArgumentsDoneEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseMCPCallArgumentsDoneEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallArgumentsDoneEvent.cs b/src/Generated/Models/InternalResponseMCPCallArgumentsDoneEvent.cs new file mode 100644 index 000000000..98e8a2f65 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallArgumentsDoneEvent.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallArgumentsDoneEvent : StreamingResponseUpdate + { + internal InternalResponseMCPCallArgumentsDoneEvent(int sequenceNumber, int outputIndex, string itemId, BinaryData arguments) : base(InternalResponseStreamEventType.ResponseMcpCallArgumentsDone, sequenceNumber) + { + OutputIndex = outputIndex; + ItemId = itemId; + Arguments = arguments; + } + + internal InternalResponseMCPCallArgumentsDoneEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId, BinaryData arguments) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + ItemId = itemId; + Arguments = arguments; + } + + public int OutputIndex { get; } + + public string ItemId { get; } + + public BinaryData Arguments { get; } + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallCompletedEvent.Serialization.cs b/src/Generated/Models/InternalResponseMCPCallCompletedEvent.Serialization.cs new file mode 100644 index 000000000..3ae8412ae --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallCompletedEvent.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallCompletedEvent : IJsonModel + { + internal InternalResponseMCPCallCompletedEvent() : this(InternalResponseStreamEventType.ResponseMcpCallCompleted, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallCompletedEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponseMCPCallCompletedEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMCPCallCompletedEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallCompletedEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseMCPCallCompletedEvent(document.RootElement, options); + } + + internal static InternalResponseMCPCallCompletedEvent DeserializeInternalResponseMCPCallCompletedEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseMCPCallCompletedEvent(kind, sequenceNumber, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseMCPCallCompletedEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseMCPCallCompletedEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMCPCallCompletedEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseMCPCallCompletedEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseMCPCallCompletedEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallCompletedEvent.cs b/src/Generated/Models/InternalResponseMCPCallCompletedEvent.cs new file mode 100644 index 000000000..65165df89 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallCompletedEvent.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallCompletedEvent : StreamingResponseUpdate + { + internal InternalResponseMCPCallCompletedEvent(int sequenceNumber) : base(InternalResponseStreamEventType.ResponseMcpCallCompleted, sequenceNumber) + { + } + + internal InternalResponseMCPCallCompletedEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallFailedEvent.Serialization.cs b/src/Generated/Models/InternalResponseMCPCallFailedEvent.Serialization.cs new file mode 100644 index 000000000..2654ccb11 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallFailedEvent.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallFailedEvent : IJsonModel + { + internal InternalResponseMCPCallFailedEvent() : this(InternalResponseStreamEventType.ResponseMcpCallFailed, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallFailedEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponseMCPCallFailedEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMCPCallFailedEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallFailedEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseMCPCallFailedEvent(document.RootElement, options); + } + + internal static InternalResponseMCPCallFailedEvent DeserializeInternalResponseMCPCallFailedEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseMCPCallFailedEvent(kind, sequenceNumber, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseMCPCallFailedEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseMCPCallFailedEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMCPCallFailedEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseMCPCallFailedEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseMCPCallFailedEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallFailedEvent.cs b/src/Generated/Models/InternalResponseMCPCallFailedEvent.cs new file mode 100644 index 000000000..aca712510 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallFailedEvent.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallFailedEvent : StreamingResponseUpdate + { + internal InternalResponseMCPCallFailedEvent(int sequenceNumber) : base(InternalResponseStreamEventType.ResponseMcpCallFailed, sequenceNumber) + { + } + + internal InternalResponseMCPCallFailedEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallInProgressEvent.Serialization.cs b/src/Generated/Models/InternalResponseMCPCallInProgressEvent.Serialization.cs new file mode 100644 index 000000000..e1aa36bf8 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallInProgressEvent.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallInProgressEvent : IJsonModel + { + internal InternalResponseMCPCallInProgressEvent() : this(InternalResponseStreamEventType.ResponseMcpCallInProgress, default, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallInProgressEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + } + + InternalResponseMCPCallInProgressEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMCPCallInProgressEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPCallInProgressEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseMCPCallInProgressEvent(document.RootElement, options); + } + + internal static InternalResponseMCPCallInProgressEvent DeserializeInternalResponseMCPCallInProgressEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + int outputIndex = default; + string itemId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseMCPCallInProgressEvent(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseMCPCallInProgressEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseMCPCallInProgressEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMCPCallInProgressEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseMCPCallInProgressEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseMCPCallInProgressEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseMCPCallInProgressEvent.cs b/src/Generated/Models/InternalResponseMCPCallInProgressEvent.cs new file mode 100644 index 000000000..d9f46d19c --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPCallInProgressEvent.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPCallInProgressEvent : StreamingResponseUpdate + { + internal InternalResponseMCPCallInProgressEvent(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseMcpCallInProgress, sequenceNumber) + { + OutputIndex = outputIndex; + ItemId = itemId; + } + + internal InternalResponseMCPCallInProgressEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + OutputIndex = outputIndex; + ItemId = itemId; + } + + public int OutputIndex { get; } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/InternalResponseMCPListToolsCompletedEvent.Serialization.cs b/src/Generated/Models/InternalResponseMCPListToolsCompletedEvent.Serialization.cs new file mode 100644 index 000000000..2b03174dc --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPListToolsCompletedEvent.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPListToolsCompletedEvent : IJsonModel + { + internal InternalResponseMCPListToolsCompletedEvent() : this(InternalResponseStreamEventType.ResponseMcpListToolsCompleted, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsCompletedEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponseMCPListToolsCompletedEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMCPListToolsCompletedEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsCompletedEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseMCPListToolsCompletedEvent(document.RootElement, options); + } + + internal static InternalResponseMCPListToolsCompletedEvent DeserializeInternalResponseMCPListToolsCompletedEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseMCPListToolsCompletedEvent(kind, sequenceNumber, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseMCPListToolsCompletedEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseMCPListToolsCompletedEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMCPListToolsCompletedEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseMCPListToolsCompletedEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsCompletedEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseMCPListToolsCompletedEvent.cs b/src/Generated/Models/InternalResponseMCPListToolsCompletedEvent.cs new file mode 100644 index 000000000..3db305fc0 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPListToolsCompletedEvent.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPListToolsCompletedEvent : StreamingResponseUpdate + { + internal InternalResponseMCPListToolsCompletedEvent(int sequenceNumber) : base(InternalResponseStreamEventType.ResponseMcpListToolsCompleted, sequenceNumber) + { + } + + internal InternalResponseMCPListToolsCompletedEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalResponseMCPListToolsFailedEvent.Serialization.cs b/src/Generated/Models/InternalResponseMCPListToolsFailedEvent.Serialization.cs new file mode 100644 index 000000000..4cc5a815f --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPListToolsFailedEvent.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPListToolsFailedEvent : IJsonModel + { + internal InternalResponseMCPListToolsFailedEvent() : this(InternalResponseStreamEventType.ResponseMcpListToolsFailed, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsFailedEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponseMCPListToolsFailedEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMCPListToolsFailedEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsFailedEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseMCPListToolsFailedEvent(document.RootElement, options); + } + + internal static InternalResponseMCPListToolsFailedEvent DeserializeInternalResponseMCPListToolsFailedEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseMCPListToolsFailedEvent(kind, sequenceNumber, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseMCPListToolsFailedEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseMCPListToolsFailedEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMCPListToolsFailedEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseMCPListToolsFailedEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsFailedEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseMCPListToolsFailedEvent.cs b/src/Generated/Models/InternalResponseMCPListToolsFailedEvent.cs new file mode 100644 index 000000000..5dcf3e210 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPListToolsFailedEvent.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPListToolsFailedEvent : StreamingResponseUpdate + { + internal InternalResponseMCPListToolsFailedEvent(int sequenceNumber) : base(InternalResponseStreamEventType.ResponseMcpListToolsFailed, sequenceNumber) + { + } + + internal InternalResponseMCPListToolsFailedEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalResponseMCPListToolsInProgressEvent.Serialization.cs b/src/Generated/Models/InternalResponseMCPListToolsInProgressEvent.Serialization.cs new file mode 100644 index 000000000..d0b10f609 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPListToolsInProgressEvent.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPListToolsInProgressEvent : IJsonModel + { + internal InternalResponseMCPListToolsInProgressEvent() : this(InternalResponseStreamEventType.ResponseMcpListToolsInProgress, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsInProgressEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponseMCPListToolsInProgressEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMCPListToolsInProgressEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsInProgressEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseMCPListToolsInProgressEvent(document.RootElement, options); + } + + internal static InternalResponseMCPListToolsInProgressEvent DeserializeInternalResponseMCPListToolsInProgressEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseMCPListToolsInProgressEvent(kind, sequenceNumber, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseMCPListToolsInProgressEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseMCPListToolsInProgressEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMCPListToolsInProgressEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseMCPListToolsInProgressEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseMCPListToolsInProgressEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseMCPListToolsInProgressEvent.cs b/src/Generated/Models/InternalResponseMCPListToolsInProgressEvent.cs new file mode 100644 index 000000000..655ce2b39 --- /dev/null +++ b/src/Generated/Models/InternalResponseMCPListToolsInProgressEvent.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseMCPListToolsInProgressEvent : StreamingResponseUpdate + { + internal InternalResponseMCPListToolsInProgressEvent(int sequenceNumber) : base(InternalResponseStreamEventType.ResponseMcpListToolsInProgress, sequenceNumber) + { + } + + internal InternalResponseMCPListToolsInProgressEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs b/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs deleted file mode 100644 index 23e9bef99..000000000 --- a/src/Generated/Models/InternalResponseMessageTextContent.Serialization.cs +++ /dev/null @@ -1,128 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalResponseMessageTextContent : IJsonModel - { - internal InternalResponseMessageTextContent() - { - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponseMessageTextContent)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type); - } - if (_additionalBinaryDataProperties?.ContainsKey("text") != true) - { - writer.WritePropertyName("text"u8); - writer.WriteObjectValue(_text, options); - } - } - - InternalResponseMessageTextContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseMessageTextContent)JsonModelCreateCore(ref reader, options); - - protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponseMessageTextContent)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponseMessageTextContent(document.RootElement, options); - } - - internal static InternalResponseMessageTextContent DeserializeInternalResponseMessageTextContent(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string @type = default; - InternalMessageContentTextObjectText text = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("text"u8)) - { - text = InternalMessageContentTextObjectText.DeserializeInternalMessageContentTextObjectText(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponseMessageTextContent(additionalBinaryDataProperties, @type, text); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponseMessageTextContent)} does not support writing '{options.Format}' format."); - } - } - - InternalResponseMessageTextContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseMessageTextContent)PersistableModelCreateCore(data, options); - - protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponseMessageTextContent(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponseMessageTextContent)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponseMessageTextContent internalResponseMessageTextContent) - { - if (internalResponseMessageTextContent == null) - { - return null; - } - return BinaryContent.Create(internalResponseMessageTextContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponseMessageTextContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponseMessageTextContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponseMessageTextContent.cs b/src/Generated/Models/InternalResponseMessageTextContent.cs deleted file mode 100644 index 98a3edb86..000000000 --- a/src/Generated/Models/InternalResponseMessageTextContent.cs +++ /dev/null @@ -1,18 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Assistants -{ - internal partial class InternalResponseMessageTextContent : MessageContent - { - internal InternalResponseMessageTextContent(IDictionary additionalBinaryDataProperties, string @type, InternalMessageContentTextObjectText text) : base(additionalBinaryDataProperties) - { - _type = @type; - _text = text; - } - } -} diff --git a/src/Generated/Models/InternalResponseReasoningDeltaEvent.Serialization.cs b/src/Generated/Models/InternalResponseReasoningDeltaEvent.Serialization.cs new file mode 100644 index 000000000..03aeb976f --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningDeltaEvent.Serialization.cs @@ -0,0 +1,172 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningDeltaEvent : IJsonModel + { + internal InternalResponseReasoningDeltaEvent() : this(InternalResponseStreamEventType.ResponseReasoningDelta, default, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningDeltaEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Delta); +#else + using (JsonDocument document = JsonDocument.Parse(Delta)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalResponseReasoningDeltaEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseReasoningDeltaEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningDeltaEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseReasoningDeltaEvent(document.RootElement, options); + } + + internal static InternalResponseReasoningDeltaEvent DeserializeInternalResponseReasoningDeltaEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int contentIndex = default; + BinaryData delta = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + contentIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("delta"u8)) + { + delta = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseReasoningDeltaEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + contentIndex, + delta); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseReasoningDeltaEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseReasoningDeltaEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseReasoningDeltaEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseReasoningDeltaEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseReasoningDeltaEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseReasoningDeltaEvent.cs b/src/Generated/Models/InternalResponseReasoningDeltaEvent.cs new file mode 100644 index 000000000..db3623d88 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningDeltaEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningDeltaEvent : StreamingResponseUpdate + { + internal InternalResponseReasoningDeltaEvent(int sequenceNumber, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(InternalResponseStreamEventType.ResponseReasoningDelta, sequenceNumber) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Delta = delta; + } + + internal InternalResponseReasoningDeltaEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, BinaryData delta) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Delta = delta; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + + public BinaryData Delta { get; } + } +} diff --git a/src/Generated/Models/InternalResponseReasoningDoneEvent.Serialization.cs b/src/Generated/Models/InternalResponseReasoningDoneEvent.Serialization.cs new file mode 100644 index 000000000..905a7fae0 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningDoneEvent.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningDoneEvent : IJsonModel + { + internal InternalResponseReasoningDoneEvent() : this(InternalResponseStreamEventType.ResponseReasoningDone, default, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningDoneEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + } + + InternalResponseReasoningDoneEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseReasoningDoneEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningDoneEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseReasoningDoneEvent(document.RootElement, options); + } + + internal static InternalResponseReasoningDoneEvent DeserializeInternalResponseReasoningDoneEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int contentIndex = default; + string text = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + contentIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseReasoningDoneEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + contentIndex, + text); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseReasoningDoneEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseReasoningDoneEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseReasoningDoneEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseReasoningDoneEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseReasoningDoneEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseReasoningDoneEvent.cs b/src/Generated/Models/InternalResponseReasoningDoneEvent.cs new file mode 100644 index 000000000..ee851d6e0 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningDoneEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningDoneEvent : StreamingResponseUpdate + { + internal InternalResponseReasoningDoneEvent(int sequenceNumber, string itemId, int outputIndex, int contentIndex, string text) : base(InternalResponseStreamEventType.ResponseReasoningDone, sequenceNumber) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Text = text; + } + + internal InternalResponseReasoningDoneEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string text) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Text = text; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + + public string Text { get; } + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryDeltaEvent.Serialization.cs b/src/Generated/Models/InternalResponseReasoningSummaryDeltaEvent.Serialization.cs new file mode 100644 index 000000000..a0f191af1 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryDeltaEvent.Serialization.cs @@ -0,0 +1,172 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryDeltaEvent : IJsonModel + { + internal InternalResponseReasoningSummaryDeltaEvent() : this(InternalResponseStreamEventType.ResponseReasoningSummaryDelta, default, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryDeltaEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("summary_index") != true) + { + writer.WritePropertyName("summary_index"u8); + writer.WriteNumberValue(SummaryIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Delta); +#else + using (JsonDocument document = JsonDocument.Parse(Delta)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + + InternalResponseReasoningSummaryDeltaEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryDeltaEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryDeltaEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseReasoningSummaryDeltaEvent(document.RootElement, options); + } + + internal static InternalResponseReasoningSummaryDeltaEvent DeserializeInternalResponseReasoningSummaryDeltaEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int summaryIndex = default; + BinaryData delta = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("summary_index"u8)) + { + summaryIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("delta"u8)) + { + delta = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseReasoningSummaryDeltaEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + summaryIndex, + delta); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseReasoningSummaryDeltaEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseReasoningSummaryDeltaEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryDeltaEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseReasoningSummaryDeltaEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryDeltaEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryDeltaEvent.cs b/src/Generated/Models/InternalResponseReasoningSummaryDeltaEvent.cs new file mode 100644 index 000000000..6b6d20145 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryDeltaEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryDeltaEvent : StreamingResponseUpdate + { + internal InternalResponseReasoningSummaryDeltaEvent(int sequenceNumber, string itemId, int outputIndex, int summaryIndex, BinaryData delta) : base(InternalResponseStreamEventType.ResponseReasoningSummaryDelta, sequenceNumber) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Delta = delta; + } + + internal InternalResponseReasoningSummaryDeltaEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int summaryIndex, BinaryData delta) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Delta = delta; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int SummaryIndex { get; } + + public BinaryData Delta { get; } + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryDoneEvent.Serialization.cs b/src/Generated/Models/InternalResponseReasoningSummaryDoneEvent.Serialization.cs new file mode 100644 index 000000000..46feb67ef --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryDoneEvent.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryDoneEvent : IJsonModel + { + internal InternalResponseReasoningSummaryDoneEvent() : this(InternalResponseStreamEventType.ResponseReasoningSummaryDone, default, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryDoneEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("summary_index") != true) + { + writer.WritePropertyName("summary_index"u8); + writer.WriteNumberValue(SummaryIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + } + + InternalResponseReasoningSummaryDoneEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryDoneEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryDoneEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseReasoningSummaryDoneEvent(document.RootElement, options); + } + + internal static InternalResponseReasoningSummaryDoneEvent DeserializeInternalResponseReasoningSummaryDoneEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int summaryIndex = default; + string text = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("summary_index"u8)) + { + summaryIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseReasoningSummaryDoneEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + summaryIndex, + text); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseReasoningSummaryDoneEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseReasoningSummaryDoneEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryDoneEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseReasoningSummaryDoneEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryDoneEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryDoneEvent.cs b/src/Generated/Models/InternalResponseReasoningSummaryDoneEvent.cs new file mode 100644 index 000000000..4bd502fe5 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryDoneEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryDoneEvent : StreamingResponseUpdate + { + internal InternalResponseReasoningSummaryDoneEvent(int sequenceNumber, string itemId, int outputIndex, int summaryIndex, string text) : base(InternalResponseStreamEventType.ResponseReasoningSummaryDone, sequenceNumber) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Text = text; + } + + internal InternalResponseReasoningSummaryDoneEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int summaryIndex, string text) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Text = text; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int SummaryIndex { get; } + + public string Text { get; } + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryPartAddedEvent.Serialization.cs b/src/Generated/Models/InternalResponseReasoningSummaryPartAddedEvent.Serialization.cs new file mode 100644 index 000000000..7c10b3e84 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryPartAddedEvent.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryPartAddedEvent : IJsonModel + { + internal InternalResponseReasoningSummaryPartAddedEvent() : this(InternalResponseStreamEventType.ResponseReasoningSummaryPartAdded, default, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryPartAddedEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("summary_index") != true) + { + writer.WritePropertyName("summary_index"u8); + writer.WriteNumberValue(SummaryIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("part") != true) + { + writer.WritePropertyName("part"u8); + writer.WriteObjectValue(Part, options); + } + } + + InternalResponseReasoningSummaryPartAddedEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryPartAddedEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryPartAddedEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseReasoningSummaryPartAddedEvent(document.RootElement, options); + } + + internal static InternalResponseReasoningSummaryPartAddedEvent DeserializeInternalResponseReasoningSummaryPartAddedEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int summaryIndex = default; + ReasoningSummaryPart part = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("summary_index"u8)) + { + summaryIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("part"u8)) + { + part = ReasoningSummaryPart.DeserializeReasoningSummaryPart(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseReasoningSummaryPartAddedEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + summaryIndex, + part); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseReasoningSummaryPartAddedEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseReasoningSummaryPartAddedEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryPartAddedEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseReasoningSummaryPartAddedEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryPartAddedEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryPartAddedEvent.cs b/src/Generated/Models/InternalResponseReasoningSummaryPartAddedEvent.cs new file mode 100644 index 000000000..9c7a209ce --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryPartAddedEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryPartAddedEvent : StreamingResponseUpdate + { + internal InternalResponseReasoningSummaryPartAddedEvent(int sequenceNumber, string itemId, int outputIndex, int summaryIndex, ReasoningSummaryPart part) : base(InternalResponseStreamEventType.ResponseReasoningSummaryPartAdded, sequenceNumber) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Part = part; + } + + internal InternalResponseReasoningSummaryPartAddedEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int summaryIndex, ReasoningSummaryPart part) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Part = part; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int SummaryIndex { get; } + + public ReasoningSummaryPart Part { get; } + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryPartDoneEvent.Serialization.cs b/src/Generated/Models/InternalResponseReasoningSummaryPartDoneEvent.Serialization.cs new file mode 100644 index 000000000..16592e437 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryPartDoneEvent.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryPartDoneEvent : IJsonModel + { + internal InternalResponseReasoningSummaryPartDoneEvent() : this(InternalResponseStreamEventType.ResponseReasoningSummaryPartDone, default, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryPartDoneEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("summary_index") != true) + { + writer.WritePropertyName("summary_index"u8); + writer.WriteNumberValue(SummaryIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("part") != true) + { + writer.WritePropertyName("part"u8); + writer.WriteObjectValue(Part, options); + } + } + + InternalResponseReasoningSummaryPartDoneEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryPartDoneEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryPartDoneEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseReasoningSummaryPartDoneEvent(document.RootElement, options); + } + + internal static InternalResponseReasoningSummaryPartDoneEvent DeserializeInternalResponseReasoningSummaryPartDoneEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int summaryIndex = default; + ReasoningSummaryPart part = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("summary_index"u8)) + { + summaryIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("part"u8)) + { + part = ReasoningSummaryPart.DeserializeReasoningSummaryPart(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseReasoningSummaryPartDoneEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + summaryIndex, + part); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseReasoningSummaryPartDoneEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseReasoningSummaryPartDoneEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryPartDoneEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseReasoningSummaryPartDoneEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryPartDoneEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryPartDoneEvent.cs b/src/Generated/Models/InternalResponseReasoningSummaryPartDoneEvent.cs new file mode 100644 index 000000000..9d03c4774 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryPartDoneEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryPartDoneEvent : StreamingResponseUpdate + { + internal InternalResponseReasoningSummaryPartDoneEvent(int sequenceNumber, string itemId, int outputIndex, int summaryIndex, ReasoningSummaryPart part) : base(InternalResponseStreamEventType.ResponseReasoningSummaryPartDone, sequenceNumber) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Part = part; + } + + internal InternalResponseReasoningSummaryPartDoneEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int summaryIndex, ReasoningSummaryPart part) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Part = part; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int SummaryIndex { get; } + + public ReasoningSummaryPart Part { get; } + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryTextDeltaEvent.Serialization.cs b/src/Generated/Models/InternalResponseReasoningSummaryTextDeltaEvent.Serialization.cs new file mode 100644 index 000000000..54908f8ea --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryTextDeltaEvent.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryTextDeltaEvent : IJsonModel + { + internal InternalResponseReasoningSummaryTextDeltaEvent() : this(InternalResponseStreamEventType.ResponseReasoningSummaryTextDelta, default, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryTextDeltaEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("summary_index") != true) + { + writer.WritePropertyName("summary_index"u8); + writer.WriteNumberValue(SummaryIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); + writer.WriteStringValue(Delta); + } + } + + InternalResponseReasoningSummaryTextDeltaEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryTextDeltaEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryTextDeltaEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseReasoningSummaryTextDeltaEvent(document.RootElement, options); + } + + internal static InternalResponseReasoningSummaryTextDeltaEvent DeserializeInternalResponseReasoningSummaryTextDeltaEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int summaryIndex = default; + string delta = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("summary_index"u8)) + { + summaryIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("delta"u8)) + { + delta = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseReasoningSummaryTextDeltaEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + summaryIndex, + delta); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseReasoningSummaryTextDeltaEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseReasoningSummaryTextDeltaEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryTextDeltaEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseReasoningSummaryTextDeltaEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryTextDeltaEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryTextDeltaEvent.cs b/src/Generated/Models/InternalResponseReasoningSummaryTextDeltaEvent.cs new file mode 100644 index 000000000..85db2e481 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryTextDeltaEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryTextDeltaEvent : StreamingResponseUpdate + { + internal InternalResponseReasoningSummaryTextDeltaEvent(int sequenceNumber, string itemId, int outputIndex, int summaryIndex, string delta) : base(InternalResponseStreamEventType.ResponseReasoningSummaryTextDelta, sequenceNumber) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Delta = delta; + } + + internal InternalResponseReasoningSummaryTextDeltaEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int summaryIndex, string delta) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Delta = delta; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int SummaryIndex { get; } + + public string Delta { get; } + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryTextDoneEvent.Serialization.cs b/src/Generated/Models/InternalResponseReasoningSummaryTextDoneEvent.Serialization.cs new file mode 100644 index 000000000..e595a7d07 --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryTextDoneEvent.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryTextDoneEvent : IJsonModel + { + internal InternalResponseReasoningSummaryTextDoneEvent() : this(InternalResponseStreamEventType.ResponseReasoningSummaryTextDone, default, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryTextDoneEvent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("summary_index") != true) + { + writer.WritePropertyName("summary_index"u8); + writer.WriteNumberValue(SummaryIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + } + + InternalResponseReasoningSummaryTextDoneEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryTextDoneEvent)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryTextDoneEvent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseReasoningSummaryTextDoneEvent(document.RootElement, options); + } + + internal static InternalResponseReasoningSummaryTextDoneEvent DeserializeInternalResponseReasoningSummaryTextDoneEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int outputIndex = default; + int summaryIndex = default; + string text = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("summary_index"u8)) + { + summaryIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponseReasoningSummaryTextDoneEvent( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + summaryIndex, + text); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseReasoningSummaryTextDoneEvent)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseReasoningSummaryTextDoneEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponseReasoningSummaryTextDoneEvent)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseReasoningSummaryTextDoneEvent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseReasoningSummaryTextDoneEvent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponseReasoningSummaryTextDoneEvent.cs b/src/Generated/Models/InternalResponseReasoningSummaryTextDoneEvent.cs new file mode 100644 index 000000000..7c2b91a9b --- /dev/null +++ b/src/Generated/Models/InternalResponseReasoningSummaryTextDoneEvent.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponseReasoningSummaryTextDoneEvent : StreamingResponseUpdate + { + internal InternalResponseReasoningSummaryTextDoneEvent(int sequenceNumber, string itemId, int outputIndex, int summaryIndex, string text) : base(InternalResponseStreamEventType.ResponseReasoningSummaryTextDone, sequenceNumber) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Text = text; + } + + internal InternalResponseReasoningSummaryTextDoneEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int summaryIndex, string text) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + ItemId = itemId; + OutputIndex = outputIndex; + SummaryIndex = summaryIndex; + Text = text; + } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int SummaryIndex { get; } + + public string Text { get; } + } +} diff --git a/src/Generated/Models/InternalResponseStreamEventType.cs b/src/Generated/Models/InternalResponseStreamEventType.cs new file mode 100644 index 000000000..ef8d92b00 --- /dev/null +++ b/src/Generated/Models/InternalResponseStreamEventType.cs @@ -0,0 +1,197 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalResponseStreamEventType : IEquatable + { + private readonly string _value; + private const string ResponseAudioDeltaValue = "response.audio.delta"; + private const string ResponseAudioDoneValue = "response.audio.done"; + private const string ResponseAudioTranscriptDeltaValue = "response.audio_transcript.delta"; + private const string ResponseAudioTranscriptDoneValue = "response.audio_transcript.done"; + private const string ResponseCodeInterpreterCallCodeDeltaValue = "response.code_interpreter_call_code.delta"; + private const string ResponseCodeInterpreterCallCodeDoneValue = "response.code_interpreter_call_code.done"; + private const string ResponseCodeInterpreterCallCompletedValue = "response.code_interpreter_call.completed"; + private const string ResponseCodeInterpreterCallInProgressValue = "response.code_interpreter_call.in_progress"; + private const string ResponseCodeInterpreterCallInterpretingValue = "response.code_interpreter_call.interpreting"; + private const string ResponseCompletedValue = "response.completed"; + private const string ResponseContentPartAddedValue = "response.content_part.added"; + private const string ResponseContentPartDoneValue = "response.content_part.done"; + private const string ResponseCreatedValue = "response.created"; + private const string ErrorValue = "error"; + private const string ResponseFileSearchCallCompletedValue = "response.file_search_call.completed"; + private const string ResponseFileSearchCallInProgressValue = "response.file_search_call.in_progress"; + private const string ResponseFileSearchCallSearchingValue = "response.file_search_call.searching"; + private const string ResponseFunctionCallArgumentsDeltaValue = "response.function_call_arguments.delta"; + private const string ResponseFunctionCallArgumentsDoneValue = "response.function_call_arguments.done"; + private const string ResponseInProgressValue = "response.in_progress"; + private const string ResponseFailedValue = "response.failed"; + private const string ResponseIncompleteValue = "response.incomplete"; + private const string ResponseOutputItemAddedValue = "response.output_item.added"; + private const string ResponseOutputItemDoneValue = "response.output_item.done"; + private const string ResponseRefusalDeltaValue = "response.refusal.delta"; + private const string ResponseRefusalDoneValue = "response.refusal.done"; + private const string ResponseOutputTextAnnotationAddedValue = "response.output_text.annotation.added"; + private const string ResponseOutputTextDeltaValue = "response.output_text.delta"; + private const string ResponseOutputTextDoneValue = "response.output_text.done"; + private const string ResponseReasoningSummaryPartAddedValue = "response.reasoning_summary_part.added"; + private const string ResponseReasoningSummaryPartDoneValue = "response.reasoning_summary_part.done"; + private const string ResponseReasoningSummaryTextDeltaValue = "response.reasoning_summary_text.delta"; + private const string ResponseReasoningSummaryTextDoneValue = "response.reasoning_summary_text.done"; + private const string ResponseWebSearchCallCompletedValue = "response.web_search_call.completed"; + private const string ResponseWebSearchCallInProgressValue = "response.web_search_call.in_progress"; + private const string ResponseWebSearchCallSearchingValue = "response.web_search_call.searching"; + private const string ResponseImageGenerationCallCompletedValue = "response.image_generation_call.completed"; + private const string ResponseImageGenerationCallGeneratingValue = "response.image_generation_call.generating"; + private const string ResponseImageGenerationCallInProgressValue = "response.image_generation_call.in_progress"; + private const string ResponseImageGenerationCallPartialImageValue = "response.image_generation_call.partial_image"; + private const string ResponseMcpCallArgumentsDeltaValue = "response.mcp_call.arguments_delta"; + private const string ResponseMcpCallArgumentsDoneValue = "response.mcp_call.arguments_done"; + private const string ResponseMcpCallCompletedValue = "response.mcp_call.completed"; + private const string ResponseMcpCallFailedValue = "response.mcp_call.failed"; + private const string ResponseMcpCallInProgressValue = "response.mcp_call.in_progress"; + private const string ResponseMcpListToolsCompletedValue = "response.mcp_list_tools.completed"; + private const string ResponseMcpListToolsFailedValue = "response.mcp_list_tools.failed"; + private const string ResponseMcpListToolsInProgressValue = "response.mcp_list_tools.in_progress"; + private const string ResponseQueuedValue = "response.queued"; + private const string ResponseReasoningDeltaValue = "response.reasoning.delta"; + private const string ResponseReasoningDoneValue = "response.reasoning.done"; + private const string ResponseReasoningSummaryDeltaValue = "response.reasoning_summary.delta"; + private const string ResponseReasoningSummaryDoneValue = "response.reasoning_summary.done"; + + public InternalResponseStreamEventType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalResponseStreamEventType ResponseAudioDelta { get; } = new InternalResponseStreamEventType(ResponseAudioDeltaValue); + + internal static InternalResponseStreamEventType ResponseAudioDone { get; } = new InternalResponseStreamEventType(ResponseAudioDoneValue); + + internal static InternalResponseStreamEventType ResponseAudioTranscriptDelta { get; } = new InternalResponseStreamEventType(ResponseAudioTranscriptDeltaValue); + + internal static InternalResponseStreamEventType ResponseAudioTranscriptDone { get; } = new InternalResponseStreamEventType(ResponseAudioTranscriptDoneValue); + + internal static InternalResponseStreamEventType ResponseCodeInterpreterCallCodeDelta { get; } = new InternalResponseStreamEventType(ResponseCodeInterpreterCallCodeDeltaValue); + + internal static InternalResponseStreamEventType ResponseCodeInterpreterCallCodeDone { get; } = new InternalResponseStreamEventType(ResponseCodeInterpreterCallCodeDoneValue); + + internal static InternalResponseStreamEventType ResponseCodeInterpreterCallCompleted { get; } = new InternalResponseStreamEventType(ResponseCodeInterpreterCallCompletedValue); + + internal static InternalResponseStreamEventType ResponseCodeInterpreterCallInProgress { get; } = new InternalResponseStreamEventType(ResponseCodeInterpreterCallInProgressValue); + + internal static InternalResponseStreamEventType ResponseCodeInterpreterCallInterpreting { get; } = new InternalResponseStreamEventType(ResponseCodeInterpreterCallInterpretingValue); + + internal static InternalResponseStreamEventType ResponseCompleted { get; } = new InternalResponseStreamEventType(ResponseCompletedValue); + + internal static InternalResponseStreamEventType ResponseContentPartAdded { get; } = new InternalResponseStreamEventType(ResponseContentPartAddedValue); + + internal static InternalResponseStreamEventType ResponseContentPartDone { get; } = new InternalResponseStreamEventType(ResponseContentPartDoneValue); + + internal static InternalResponseStreamEventType ResponseCreated { get; } = new InternalResponseStreamEventType(ResponseCreatedValue); + + internal static InternalResponseStreamEventType Error { get; } = new InternalResponseStreamEventType(ErrorValue); + + internal static InternalResponseStreamEventType ResponseFileSearchCallCompleted { get; } = new InternalResponseStreamEventType(ResponseFileSearchCallCompletedValue); + + internal static InternalResponseStreamEventType ResponseFileSearchCallInProgress { get; } = new InternalResponseStreamEventType(ResponseFileSearchCallInProgressValue); + + internal static InternalResponseStreamEventType ResponseFileSearchCallSearching { get; } = new InternalResponseStreamEventType(ResponseFileSearchCallSearchingValue); + + internal static InternalResponseStreamEventType ResponseFunctionCallArgumentsDelta { get; } = new InternalResponseStreamEventType(ResponseFunctionCallArgumentsDeltaValue); + + internal static InternalResponseStreamEventType ResponseFunctionCallArgumentsDone { get; } = new InternalResponseStreamEventType(ResponseFunctionCallArgumentsDoneValue); + + internal static InternalResponseStreamEventType ResponseInProgress { get; } = new InternalResponseStreamEventType(ResponseInProgressValue); + + internal static InternalResponseStreamEventType ResponseFailed { get; } = new InternalResponseStreamEventType(ResponseFailedValue); + + internal static InternalResponseStreamEventType ResponseIncomplete { get; } = new InternalResponseStreamEventType(ResponseIncompleteValue); + + internal static InternalResponseStreamEventType ResponseOutputItemAdded { get; } = new InternalResponseStreamEventType(ResponseOutputItemAddedValue); + + internal static InternalResponseStreamEventType ResponseOutputItemDone { get; } = new InternalResponseStreamEventType(ResponseOutputItemDoneValue); + + internal static InternalResponseStreamEventType ResponseRefusalDelta { get; } = new InternalResponseStreamEventType(ResponseRefusalDeltaValue); + + internal static InternalResponseStreamEventType ResponseRefusalDone { get; } = new InternalResponseStreamEventType(ResponseRefusalDoneValue); + + internal static InternalResponseStreamEventType ResponseOutputTextAnnotationAdded { get; } = new InternalResponseStreamEventType(ResponseOutputTextAnnotationAddedValue); + + internal static InternalResponseStreamEventType ResponseOutputTextDelta { get; } = new InternalResponseStreamEventType(ResponseOutputTextDeltaValue); + + internal static InternalResponseStreamEventType ResponseOutputTextDone { get; } = new InternalResponseStreamEventType(ResponseOutputTextDoneValue); + + internal static InternalResponseStreamEventType ResponseReasoningSummaryPartAdded { get; } = new InternalResponseStreamEventType(ResponseReasoningSummaryPartAddedValue); + + internal static InternalResponseStreamEventType ResponseReasoningSummaryPartDone { get; } = new InternalResponseStreamEventType(ResponseReasoningSummaryPartDoneValue); + + internal static InternalResponseStreamEventType ResponseReasoningSummaryTextDelta { get; } = new InternalResponseStreamEventType(ResponseReasoningSummaryTextDeltaValue); + + internal static InternalResponseStreamEventType ResponseReasoningSummaryTextDone { get; } = new InternalResponseStreamEventType(ResponseReasoningSummaryTextDoneValue); + + internal static InternalResponseStreamEventType ResponseWebSearchCallCompleted { get; } = new InternalResponseStreamEventType(ResponseWebSearchCallCompletedValue); + + internal static InternalResponseStreamEventType ResponseWebSearchCallInProgress { get; } = new InternalResponseStreamEventType(ResponseWebSearchCallInProgressValue); + + internal static InternalResponseStreamEventType ResponseWebSearchCallSearching { get; } = new InternalResponseStreamEventType(ResponseWebSearchCallSearchingValue); + + internal static InternalResponseStreamEventType ResponseImageGenerationCallCompleted { get; } = new InternalResponseStreamEventType(ResponseImageGenerationCallCompletedValue); + + internal static InternalResponseStreamEventType ResponseImageGenerationCallGenerating { get; } = new InternalResponseStreamEventType(ResponseImageGenerationCallGeneratingValue); + + internal static InternalResponseStreamEventType ResponseImageGenerationCallInProgress { get; } = new InternalResponseStreamEventType(ResponseImageGenerationCallInProgressValue); + + internal static InternalResponseStreamEventType ResponseImageGenerationCallPartialImage { get; } = new InternalResponseStreamEventType(ResponseImageGenerationCallPartialImageValue); + + internal static InternalResponseStreamEventType ResponseMcpCallArgumentsDelta { get; } = new InternalResponseStreamEventType(ResponseMcpCallArgumentsDeltaValue); + + internal static InternalResponseStreamEventType ResponseMcpCallArgumentsDone { get; } = new InternalResponseStreamEventType(ResponseMcpCallArgumentsDoneValue); + + internal static InternalResponseStreamEventType ResponseMcpCallCompleted { get; } = new InternalResponseStreamEventType(ResponseMcpCallCompletedValue); + + internal static InternalResponseStreamEventType ResponseMcpCallFailed { get; } = new InternalResponseStreamEventType(ResponseMcpCallFailedValue); + + internal static InternalResponseStreamEventType ResponseMcpCallInProgress { get; } = new InternalResponseStreamEventType(ResponseMcpCallInProgressValue); + + internal static InternalResponseStreamEventType ResponseMcpListToolsCompleted { get; } = new InternalResponseStreamEventType(ResponseMcpListToolsCompletedValue); + + internal static InternalResponseStreamEventType ResponseMcpListToolsFailed { get; } = new InternalResponseStreamEventType(ResponseMcpListToolsFailedValue); + + internal static InternalResponseStreamEventType ResponseMcpListToolsInProgress { get; } = new InternalResponseStreamEventType(ResponseMcpListToolsInProgressValue); + + internal static InternalResponseStreamEventType ResponseQueued { get; } = new InternalResponseStreamEventType(ResponseQueuedValue); + + internal static InternalResponseStreamEventType ResponseReasoningDelta { get; } = new InternalResponseStreamEventType(ResponseReasoningDeltaValue); + + internal static InternalResponseStreamEventType ResponseReasoningDone { get; } = new InternalResponseStreamEventType(ResponseReasoningDoneValue); + + internal static InternalResponseStreamEventType ResponseReasoningSummaryDelta { get; } = new InternalResponseStreamEventType(ResponseReasoningSummaryDeltaValue); + + internal static InternalResponseStreamEventType ResponseReasoningSummaryDone { get; } = new InternalResponseStreamEventType(ResponseReasoningSummaryDoneValue); + + public static bool operator ==(InternalResponseStreamEventType left, InternalResponseStreamEventType right) => left.Equals(right); + + public static bool operator !=(InternalResponseStreamEventType left, InternalResponseStreamEventType right) => !left.Equals(right); + + public static implicit operator InternalResponseStreamEventType(string value) => new InternalResponseStreamEventType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalResponseStreamEventType other && Equals(other); + + public bool Equals(InternalResponseStreamEventType 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/InternalResponsesAssistantMessage.Serialization.cs b/src/Generated/Models/InternalResponsesAssistantMessage.Serialization.cs index 776fd1e3e..bb4e5a397 100644 --- a/src/Generated/Models/InternalResponsesAssistantMessage.Serialization.cs +++ b/src/Generated/Models/InternalResponsesAssistantMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesAssistantMessage : IJsonModel { - internal InternalResponsesAssistantMessage() + internal InternalResponsesAssistantMessage() : this(default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponsesAssistantMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesAssistantMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,17 +65,17 @@ internal static InternalResponsesAssistantMessage DeserializeInternalResponsesAs { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - MessageStatus? status = default; InternalResponsesMessageRole internalRole = default; + MessageStatus? status = default; IList internalContent = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -81,18 +83,14 @@ internal static InternalResponsesAssistantMessage DeserializeInternalResponsesAs id = prop.Value.GetString(); continue; } - if (prop.NameEquals("status"u8)) + if (prop.NameEquals("role"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - status = prop.Value.GetString().ToMessageStatus(); + internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); continue; } - if (prop.NameEquals("role"u8)) + if (prop.NameEquals("status"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + status = prop.Value.GetString().ToMessageStatus(); continue; } if (prop.NameEquals("content"u8)) @@ -105,26 +103,28 @@ internal static InternalResponsesAssistantMessage DeserializeInternalResponsesAs internalContent = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponsesAssistantMessage( - @type, + kind, id, additionalBinaryDataProperties, - status, internalRole, + status, internalContent); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponsesAssistantMessage)} does not support writing '{options.Format}' format."); } @@ -132,6 +132,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponsesAssistantMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesAssistantMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -148,21 +149,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesAssistantMessage internalResponsesAssistantMessage) - { - if (internalResponsesAssistantMessage == null) - { - return null; - } - return BinaryContent.Create(internalResponsesAssistantMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesAssistantMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesAssistantMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponsesAssistantMessage.cs b/src/Generated/Models/InternalResponsesAssistantMessage.cs index cbb61bb09..f94641aee 100644 --- a/src/Generated/Models/InternalResponsesAssistantMessage.cs +++ b/src/Generated/Models/InternalResponsesAssistantMessage.cs @@ -11,16 +11,14 @@ namespace OpenAI.Responses { internal partial class InternalResponsesAssistantMessage : MessageResponseItem { - public InternalResponsesAssistantMessage(IEnumerable internalContent) : base(InternalResponsesMessageRole.Assistant) + internal InternalResponsesAssistantMessage(string id, MessageStatus? status, IEnumerable internalContent) : base(id, InternalResponsesMessageRole.Assistant, status) { - Argument.AssertNotNull(internalContent, nameof(internalContent)); - InternalContent = internalContent.ToList(); } - internal InternalResponsesAssistantMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, InternalResponsesMessageRole internalRole, IList internalContent) : base(@type, id, additionalBinaryDataProperties, status, internalRole) + internal InternalResponsesAssistantMessage(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole internalRole, MessageStatus? status, IList internalContent) : base(kind, id, additionalBinaryDataProperties, internalRole, status) { - // Plugin customization: ensure initialization of collection + // Plugin customization: ensure initialization of collections InternalContent = internalContent ?? new ChangeTrackingList(); } } diff --git a/src/Generated/Models/InternalResponsesAssistantMessageItemParam.Serialization.cs b/src/Generated/Models/InternalResponsesAssistantMessageItemParam.Serialization.cs new file mode 100644 index 000000000..7d57ac560 --- /dev/null +++ b/src/Generated/Models/InternalResponsesAssistantMessageItemParam.Serialization.cs @@ -0,0 +1,135 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesAssistantMessageItemParam : IJsonModel + { + internal InternalResponsesAssistantMessageItemParam() : this(default, null, InternalResponsesMessageRole.Assistant, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesAssistantMessageItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (ResponseContentPart item in Content) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalResponsesAssistantMessageItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesAssistantMessageItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesAssistantMessageItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesAssistantMessageItemParam(document.RootElement, options); + } + + internal static InternalResponsesAssistantMessageItemParam DeserializeInternalResponsesAssistantMessageItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalResponsesMessageRole role = default; + IList content = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("role"u8)) + { + role = new InternalResponsesMessageRole(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("content"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseContentPart.DeserializeResponseContentPart(item, options)); + } + content = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesAssistantMessageItemParam(kind, additionalBinaryDataProperties, role, content); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponsesAssistantMessageItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesAssistantMessageItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesAssistantMessageItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponsesAssistantMessageItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesAssistantMessageItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponsesAssistantMessageItemParam.cs b/src/Generated/Models/InternalResponsesAssistantMessageItemParam.cs new file mode 100644 index 000000000..afcbbc77f --- /dev/null +++ b/src/Generated/Models/InternalResponsesAssistantMessageItemParam.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesAssistantMessageItemParam : InternalResponsesMessageItemParam + { + public InternalResponsesAssistantMessageItemParam(IEnumerable content) : base(InternalResponsesMessageRole.Assistant) + { + Argument.AssertNotNull(content, nameof(content)); + + Content = content.ToList(); + } + + internal InternalResponsesAssistantMessageItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole role, IList content) : base(kind, additionalBinaryDataProperties, role) + { + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); + } + + public IList Content { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesComputerCallClickAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallClickAction.Serialization.cs deleted file mode 100644 index 794530bb1..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallClickAction.Serialization.cs +++ /dev/null @@ -1,152 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallClickAction : IJsonModel - { - internal InternalResponsesComputerCallClickAction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallClickAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("button") != true) - { - writer.WritePropertyName("button"u8); - writer.WriteStringValue(Button.ToSerialString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("x") != true) - { - writer.WritePropertyName("x"u8); - writer.WriteNumberValue(X); - } - if (_additionalBinaryDataProperties?.ContainsKey("y") != true) - { - writer.WritePropertyName("y"u8); - writer.WriteNumberValue(Y); - } - } - - InternalResponsesComputerCallClickAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallClickAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallClickAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallClickAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallClickAction DeserializeInternalResponsesComputerCallClickAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - ComputerCallActionMouseButton button = default; - int x = default; - int y = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - if (prop.NameEquals("button"u8)) - { - button = prop.Value.GetString().ToComputerCallActionMouseButton(); - continue; - } - if (prop.NameEquals("x"u8)) - { - x = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("y"u8)) - { - y = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallClickAction(kind, additionalBinaryDataProperties, button, x, y); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallClickAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallClickAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallClickAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallClickAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallClickAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallClickAction internalResponsesComputerCallClickAction) - { - if (internalResponsesComputerCallClickAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallClickAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallClickAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallClickAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallClickAction.cs b/src/Generated/Models/InternalResponsesComputerCallClickAction.cs deleted file mode 100644 index 4c6d47fc3..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallClickAction.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallClickAction : ComputerCallAction - { - public InternalResponsesComputerCallClickAction(ComputerCallActionMouseButton button, int x, int y) : base(ComputerCallActionKind.Click) - { - Button = button; - X = x; - Y = y; - } - - internal InternalResponsesComputerCallClickAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, ComputerCallActionMouseButton button, int x, int y) : base(kind, additionalBinaryDataProperties) - { - Button = button; - X = x; - Y = y; - } - - public ComputerCallActionMouseButton Button { get; set; } - - public int X { get; set; } - - public int Y { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.Serialization.cs deleted file mode 100644 index bed61ef4d..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.Serialization.cs +++ /dev/null @@ -1,141 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallDoubleClickAction : IJsonModel - { - internal InternalResponsesComputerCallDoubleClickAction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDoubleClickAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("x") != true) - { - writer.WritePropertyName("x"u8); - writer.WriteNumberValue(X); - } - if (_additionalBinaryDataProperties?.ContainsKey("y") != true) - { - writer.WritePropertyName("y"u8); - writer.WriteNumberValue(Y); - } - } - - InternalResponsesComputerCallDoubleClickAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallDoubleClickAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDoubleClickAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallDoubleClickAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallDoubleClickAction DeserializeInternalResponsesComputerCallDoubleClickAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - int x = default; - int y = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - if (prop.NameEquals("x"u8)) - { - x = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("y"u8)) - { - y = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallDoubleClickAction(kind, additionalBinaryDataProperties, x, y); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDoubleClickAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallDoubleClickAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallDoubleClickAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallDoubleClickAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDoubleClickAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallDoubleClickAction internalResponsesComputerCallDoubleClickAction) - { - if (internalResponsesComputerCallDoubleClickAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallDoubleClickAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallDoubleClickAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallDoubleClickAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.cs b/src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.cs deleted file mode 100644 index 9b89f8dff..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallDoubleClickAction.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallDoubleClickAction : ComputerCallAction - { - public InternalResponsesComputerCallDoubleClickAction(int x, int y) : base(ComputerCallActionKind.DoubleClick) - { - X = x; - Y = y; - } - - internal InternalResponsesComputerCallDoubleClickAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, int x, int y) : base(kind, additionalBinaryDataProperties) - { - X = x; - Y = y; - } - - public int X { get; set; } - - public int Y { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallDragAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallDragAction.Serialization.cs deleted file mode 100644 index 7ed1dfa05..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallDragAction.Serialization.cs +++ /dev/null @@ -1,140 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallDragAction : IJsonModel - { - internal InternalResponsesComputerCallDragAction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDragAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("path") != true) - { - writer.WritePropertyName("path"u8); - writer.WriteStartArray(); - foreach (InternalResponsesComputerCallDragActionPath item in Path) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - } - - InternalResponsesComputerCallDragAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallDragAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDragAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallDragAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallDragAction DeserializeInternalResponsesComputerCallDragAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - IList path = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - if (prop.NameEquals("path"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(InternalResponsesComputerCallDragActionPath.DeserializeInternalResponsesComputerCallDragActionPath(item, options)); - } - path = array; - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallDragAction(kind, additionalBinaryDataProperties, path); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDragAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallDragAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallDragAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallDragAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDragAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallDragAction internalResponsesComputerCallDragAction) - { - if (internalResponsesComputerCallDragAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallDragAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallDragAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallDragAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallDragAction.cs b/src/Generated/Models/InternalResponsesComputerCallDragAction.cs deleted file mode 100644 index d66bcae1f..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallDragAction.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallDragAction : ComputerCallAction - { - public InternalResponsesComputerCallDragAction(IEnumerable path) : base(ComputerCallActionKind.Drag) - { - Argument.AssertNotNull(path, nameof(path)); - - Path = path.ToList(); - } - - internal InternalResponsesComputerCallDragAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, IList path) : base(kind, additionalBinaryDataProperties) - { - Path = path; - } - - public IList Path { get; } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallDragActionPath.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallDragActionPath.Serialization.cs deleted file mode 100644 index 594d9d6de..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallDragActionPath.Serialization.cs +++ /dev/null @@ -1,153 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallDragActionPath : IJsonModel - { - internal InternalResponsesComputerCallDragActionPath() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDragActionPath)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("x") != true) - { - writer.WritePropertyName("x"u8); - writer.WriteNumberValue(X); - } - if (_additionalBinaryDataProperties?.ContainsKey("y") != true) - { - writer.WritePropertyName("y"u8); - writer.WriteNumberValue(Y); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalResponsesComputerCallDragActionPath IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalResponsesComputerCallDragActionPath JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDragActionPath)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallDragActionPath(document.RootElement, options); - } - - internal static InternalResponsesComputerCallDragActionPath DeserializeInternalResponsesComputerCallDragActionPath(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - int x = default; - int y = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("x"u8)) - { - x = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("y"u8)) - { - y = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallDragActionPath(x, y, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDragActionPath)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallDragActionPath IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalResponsesComputerCallDragActionPath PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallDragActionPath(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallDragActionPath)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallDragActionPath internalResponsesComputerCallDragActionPath) - { - if (internalResponsesComputerCallDragActionPath == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallDragActionPath, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallDragActionPath(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallDragActionPath(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallDragActionPath.cs b/src/Generated/Models/InternalResponsesComputerCallDragActionPath.cs deleted file mode 100644 index d276ac72f..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallDragActionPath.cs +++ /dev/null @@ -1,37 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallDragActionPath - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalResponsesComputerCallDragActionPath(int x, int y) - { - X = x; - Y = y; - } - - internal InternalResponsesComputerCallDragActionPath(int x, int y, IDictionary additionalBinaryDataProperties) - { - X = x; - Y = y; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public int X { get; set; } - - public int Y { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallKeyPressAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallKeyPressAction.Serialization.cs deleted file mode 100644 index 0da95d3aa..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallKeyPressAction.Serialization.cs +++ /dev/null @@ -1,152 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallKeyPressAction : IJsonModel - { - internal InternalResponsesComputerCallKeyPressAction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallKeyPressAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("keys") != true) - { - writer.WritePropertyName("keys"u8); - writer.WriteStartArray(); - foreach (string item in Keys) - { - if (item == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item); - } - writer.WriteEndArray(); - } - } - - InternalResponsesComputerCallKeyPressAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallKeyPressAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallKeyPressAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallKeyPressAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallKeyPressAction DeserializeInternalResponsesComputerCallKeyPressAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - IList keys = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - if (prop.NameEquals("keys"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - if (item.ValueKind == JsonValueKind.Null) - { - array.Add(null); - } - else - { - array.Add(item.GetString()); - } - } - keys = array; - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallKeyPressAction(kind, additionalBinaryDataProperties, keys); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallKeyPressAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallKeyPressAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallKeyPressAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallKeyPressAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallKeyPressAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallKeyPressAction internalResponsesComputerCallKeyPressAction) - { - if (internalResponsesComputerCallKeyPressAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallKeyPressAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallKeyPressAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallKeyPressAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallKeyPressAction.cs b/src/Generated/Models/InternalResponsesComputerCallKeyPressAction.cs deleted file mode 100644 index 5738f4c65..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallKeyPressAction.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallKeyPressAction : ComputerCallAction - { - public InternalResponsesComputerCallKeyPressAction(IEnumerable keys) : base(ComputerCallActionKind.KeyPress) - { - Argument.AssertNotNull(keys, nameof(keys)); - - Keys = keys.ToList(); - } - - internal InternalResponsesComputerCallKeyPressAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, IList keys) : base(kind, additionalBinaryDataProperties) - { - Keys = keys; - } - - public IList Keys { get; } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallMoveAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallMoveAction.Serialization.cs deleted file mode 100644 index 9c676e7aa..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallMoveAction.Serialization.cs +++ /dev/null @@ -1,141 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallMoveAction : IJsonModel - { - internal InternalResponsesComputerCallMoveAction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallMoveAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("x") != true) - { - writer.WritePropertyName("x"u8); - writer.WriteNumberValue(X); - } - if (_additionalBinaryDataProperties?.ContainsKey("y") != true) - { - writer.WritePropertyName("y"u8); - writer.WriteNumberValue(Y); - } - } - - InternalResponsesComputerCallMoveAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallMoveAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallMoveAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallMoveAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallMoveAction DeserializeInternalResponsesComputerCallMoveAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - int x = default; - int y = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - if (prop.NameEquals("x"u8)) - { - x = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("y"u8)) - { - y = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallMoveAction(kind, additionalBinaryDataProperties, x, y); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallMoveAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallMoveAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallMoveAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallMoveAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallMoveAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallMoveAction internalResponsesComputerCallMoveAction) - { - if (internalResponsesComputerCallMoveAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallMoveAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallMoveAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallMoveAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallMoveAction.cs b/src/Generated/Models/InternalResponsesComputerCallMoveAction.cs deleted file mode 100644 index ca63f8fe0..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallMoveAction.cs +++ /dev/null @@ -1,28 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallMoveAction : ComputerCallAction - { - public InternalResponsesComputerCallMoveAction(int x, int y) : base(ComputerCallActionKind.Move) - { - X = x; - Y = y; - } - - internal InternalResponsesComputerCallMoveAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, int x, int y) : base(kind, additionalBinaryDataProperties) - { - X = x; - Y = y; - } - - public int X { get; set; } - - public int Y { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallOutputItemOutputType.cs b/src/Generated/Models/InternalResponsesComputerCallOutputItemOutputType.cs deleted file mode 100644 index 3ec677dc4..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallOutputItemOutputType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesComputerCallOutputItemOutputType : IEquatable - { - private readonly string _value; - private const string ComputerScreenshotValue = "computer_screenshot"; - - public InternalResponsesComputerCallOutputItemOutputType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesComputerCallOutputItemOutputType ComputerScreenshot { get; } = new InternalResponsesComputerCallOutputItemOutputType(ComputerScreenshotValue); - - public static bool operator ==(InternalResponsesComputerCallOutputItemOutputType left, InternalResponsesComputerCallOutputItemOutputType right) => left.Equals(right); - - public static bool operator !=(InternalResponsesComputerCallOutputItemOutputType left, InternalResponsesComputerCallOutputItemOutputType right) => !left.Equals(right); - - public static implicit operator InternalResponsesComputerCallOutputItemOutputType(string value) => new InternalResponsesComputerCallOutputItemOutputType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesComputerCallOutputItemOutputType other && Equals(other); - - public bool Equals(InternalResponsesComputerCallOutputItemOutputType 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/InternalResponsesComputerCallOutputItemScreenshot.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.Serialization.cs deleted file mode 100644 index ffa1d7ecb..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.Serialization.cs +++ /dev/null @@ -1,137 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallOutputItemScreenshot : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallOutputItemScreenshot)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(ImageUrl) && _additionalBinaryDataProperties?.ContainsKey("image_url") != true) - { - writer.WritePropertyName("image_url"u8); - writer.WriteStringValue(ImageUrl); - } - if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) - { - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - } - } - - InternalResponsesComputerCallOutputItemScreenshot IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallOutputItemScreenshot)JsonModelCreateCore(ref reader, options); - - protected override ComputerOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallOutputItemScreenshot)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallOutputItemScreenshot(document.RootElement, options); - } - - internal static InternalResponsesComputerCallOutputItemScreenshot DeserializeInternalResponsesComputerCallOutputItemScreenshot(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesComputerCallOutputItemOutputType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string imageUrl = default; - string fileId = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesComputerCallOutputItemOutputType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("image_url"u8)) - { - imageUrl = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("file_id"u8)) - { - fileId = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallOutputItemScreenshot(@type, additionalBinaryDataProperties, imageUrl, fileId); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallOutputItemScreenshot)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallOutputItemScreenshot IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallOutputItemScreenshot)PersistableModelCreateCore(data, options); - - protected override ComputerOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallOutputItemScreenshot(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallOutputItemScreenshot)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallOutputItemScreenshot internalResponsesComputerCallOutputItemScreenshot) - { - if (internalResponsesComputerCallOutputItemScreenshot == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallOutputItemScreenshot, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallOutputItemScreenshot(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallOutputItemScreenshot(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.cs b/src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.cs deleted file mode 100644 index 2deb96c16..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallOutputItemScreenshot.cs +++ /dev/null @@ -1,26 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallOutputItemScreenshot : ComputerOutput - { - public InternalResponsesComputerCallOutputItemScreenshot() : base(InternalResponsesComputerCallOutputItemOutputType.ComputerScreenshot) - { - } - - internal InternalResponsesComputerCallOutputItemScreenshot(InternalResponsesComputerCallOutputItemOutputType @type, IDictionary additionalBinaryDataProperties, string imageUrl, string fileId) : base(@type, additionalBinaryDataProperties) - { - ImageUrl = imageUrl; - FileId = fileId; - } - - public string ImageUrl { get; set; } - - public string FileId { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallScreenshotAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallScreenshotAction.Serialization.cs deleted file mode 100644 index c59269115..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallScreenshotAction.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallScreenshotAction : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallScreenshotAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalResponsesComputerCallScreenshotAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallScreenshotAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallScreenshotAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallScreenshotAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallScreenshotAction DeserializeInternalResponsesComputerCallScreenshotAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallScreenshotAction(kind, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallScreenshotAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallScreenshotAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallScreenshotAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallScreenshotAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallScreenshotAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallScreenshotAction internalResponsesComputerCallScreenshotAction) - { - if (internalResponsesComputerCallScreenshotAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallScreenshotAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallScreenshotAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallScreenshotAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallScreenshotAction.cs b/src/Generated/Models/InternalResponsesComputerCallScreenshotAction.cs deleted file mode 100644 index 926203c3a..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallScreenshotAction.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallScreenshotAction : ComputerCallAction - { - public InternalResponsesComputerCallScreenshotAction() : base(ComputerCallActionKind.Screenshot) - { - } - - internal InternalResponsesComputerCallScreenshotAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallScrollAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallScrollAction.Serialization.cs deleted file mode 100644 index 9214de0a2..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallScrollAction.Serialization.cs +++ /dev/null @@ -1,169 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallScrollAction : IJsonModel - { - internal InternalResponsesComputerCallScrollAction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallScrollAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("x") != true) - { - writer.WritePropertyName("x"u8); - writer.WriteNumberValue(X); - } - if (_additionalBinaryDataProperties?.ContainsKey("y") != true) - { - writer.WritePropertyName("y"u8); - writer.WriteNumberValue(Y); - } - if (_additionalBinaryDataProperties?.ContainsKey("scroll_x") != true) - { - writer.WritePropertyName("scroll_x"u8); - writer.WriteNumberValue(ScrollX); - } - if (_additionalBinaryDataProperties?.ContainsKey("scroll_y") != true) - { - writer.WritePropertyName("scroll_y"u8); - writer.WriteNumberValue(ScrollY); - } - } - - InternalResponsesComputerCallScrollAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallScrollAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallScrollAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallScrollAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallScrollAction DeserializeInternalResponsesComputerCallScrollAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - int x = default; - int y = default; - int scrollX = default; - int scrollY = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - if (prop.NameEquals("x"u8)) - { - x = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("y"u8)) - { - y = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("scroll_x"u8)) - { - scrollX = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("scroll_y"u8)) - { - scrollY = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallScrollAction( - kind, - additionalBinaryDataProperties, - x, - y, - scrollX, - scrollY); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallScrollAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallScrollAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallScrollAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallScrollAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallScrollAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallScrollAction internalResponsesComputerCallScrollAction) - { - if (internalResponsesComputerCallScrollAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallScrollAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallScrollAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallScrollAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallScrollAction.cs b/src/Generated/Models/InternalResponsesComputerCallScrollAction.cs deleted file mode 100644 index 3c0022158..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallScrollAction.cs +++ /dev/null @@ -1,36 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallScrollAction : ComputerCallAction - { - public InternalResponsesComputerCallScrollAction(int x, int y, int scrollX, int scrollY) : base(ComputerCallActionKind.Scroll) - { - X = x; - Y = y; - ScrollX = scrollX; - ScrollY = scrollY; - } - - internal InternalResponsesComputerCallScrollAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, int x, int y, int scrollX, int scrollY) : base(kind, additionalBinaryDataProperties) - { - X = x; - Y = y; - ScrollX = scrollX; - ScrollY = scrollY; - } - - public int X { get; set; } - - public int Y { get; set; } - - public int ScrollX { get; set; } - - public int ScrollY { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallTypeAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallTypeAction.Serialization.cs deleted file mode 100644 index 4dae924a8..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallTypeAction.Serialization.cs +++ /dev/null @@ -1,130 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallTypeAction : IJsonModel - { - internal InternalResponsesComputerCallTypeAction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallTypeAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("text") != true) - { - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - } - } - - InternalResponsesComputerCallTypeAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallTypeAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallTypeAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallTypeAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallTypeAction DeserializeInternalResponsesComputerCallTypeAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string text = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - if (prop.NameEquals("text"u8)) - { - text = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallTypeAction(kind, additionalBinaryDataProperties, text); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallTypeAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallTypeAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallTypeAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallTypeAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallTypeAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallTypeAction internalResponsesComputerCallTypeAction) - { - if (internalResponsesComputerCallTypeAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallTypeAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallTypeAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallTypeAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallTypeAction.cs b/src/Generated/Models/InternalResponsesComputerCallTypeAction.cs deleted file mode 100644 index 8912d97b1..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallTypeAction.cs +++ /dev/null @@ -1,27 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallTypeAction : ComputerCallAction - { - public InternalResponsesComputerCallTypeAction(string text) : base(ComputerCallActionKind.Type) - { - Argument.AssertNotNull(text, nameof(text)); - - Text = text; - } - - internal InternalResponsesComputerCallTypeAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties, string text) : base(kind, additionalBinaryDataProperties) - { - Text = text; - } - - public string Text { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallWaitAction.Serialization.cs b/src/Generated/Models/InternalResponsesComputerCallWaitAction.Serialization.cs deleted file mode 100644 index 8ecdf0425..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallWaitAction.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallWaitAction : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallWaitAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalResponsesComputerCallWaitAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerCallWaitAction)JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerCallWaitAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerCallWaitAction(document.RootElement, options); - } - - internal static InternalResponsesComputerCallWaitAction DeserializeInternalResponsesComputerCallWaitAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerCallWaitAction(kind, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallWaitAction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerCallWaitAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerCallWaitAction)PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerCallWaitAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerCallWaitAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerCallWaitAction internalResponsesComputerCallWaitAction) - { - if (internalResponsesComputerCallWaitAction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerCallWaitAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerCallWaitAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerCallWaitAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerCallWaitAction.cs b/src/Generated/Models/InternalResponsesComputerCallWaitAction.cs deleted file mode 100644 index 59e65f0f7..000000000 --- a/src/Generated/Models/InternalResponsesComputerCallWaitAction.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerCallWaitAction : ComputerCallAction - { - public InternalResponsesComputerCallWaitAction() : base(ComputerCallActionKind.Wait) - { - } - - internal InternalResponsesComputerCallWaitAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerTool.Serialization.cs b/src/Generated/Models/InternalResponsesComputerTool.Serialization.cs deleted file mode 100644 index b76009a0e..000000000 --- a/src/Generated/Models/InternalResponsesComputerTool.Serialization.cs +++ /dev/null @@ -1,152 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerTool : IJsonModel - { - internal InternalResponsesComputerTool() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerTool)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("display_width") != true) - { - writer.WritePropertyName("display_width"u8); - writer.WriteNumberValue(DisplayWidth); - } - if (_additionalBinaryDataProperties?.ContainsKey("display_height") != true) - { - writer.WritePropertyName("display_height"u8); - writer.WriteNumberValue(DisplayHeight); - } - if (_additionalBinaryDataProperties?.ContainsKey("environment") != true) - { - writer.WritePropertyName("environment"u8); - writer.WriteStringValue(Environment.ToString()); - } - } - - InternalResponsesComputerTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesComputerTool)JsonModelCreateCore(ref reader, options); - - protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesComputerTool)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesComputerTool(document.RootElement, options); - } - - internal static InternalResponsesComputerTool DeserializeInternalResponsesComputerTool(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - int displayWidth = default; - int displayHeight = default; - ComputerToolEnvironment environment = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("display_width"u8)) - { - displayWidth = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("display_height"u8)) - { - displayHeight = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("environment"u8)) - { - environment = new ComputerToolEnvironment(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesComputerTool(@type, additionalBinaryDataProperties, displayWidth, displayHeight, environment); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerTool)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesComputerTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesComputerTool)PersistableModelCreateCore(data, options); - - protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesComputerTool(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesComputerTool)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesComputerTool internalResponsesComputerTool) - { - if (internalResponsesComputerTool == null) - { - return null; - } - return BinaryContent.Create(internalResponsesComputerTool, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesComputerTool(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesComputerTool(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesComputerTool.cs b/src/Generated/Models/InternalResponsesComputerTool.cs deleted file mode 100644 index 727fd9885..000000000 --- a/src/Generated/Models/InternalResponsesComputerTool.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesComputerTool : ResponseTool - { - public InternalResponsesComputerTool(int displayWidth, int displayHeight, ComputerToolEnvironment environment) : base(InternalResponsesToolType.Computer) - { - DisplayWidth = displayWidth; - DisplayHeight = displayHeight; - Environment = environment; - } - - internal InternalResponsesComputerTool(InternalResponsesToolType @type, IDictionary additionalBinaryDataProperties, int displayWidth, int displayHeight, ComputerToolEnvironment environment) : base(@type, additionalBinaryDataProperties) - { - DisplayWidth = displayWidth; - DisplayHeight = displayHeight; - Environment = environment; - } - - public int DisplayWidth { get; set; } - - public int DisplayHeight { get; set; } - - public ComputerToolEnvironment Environment { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesContentType.cs b/src/Generated/Models/InternalResponsesContentType.cs deleted file mode 100644 index 9b39059ae..000000000 --- a/src/Generated/Models/InternalResponsesContentType.cs +++ /dev/null @@ -1,53 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesContentType : IEquatable - { - private readonly string _value; - private const string InputTextValue = "input_text"; - private const string InputImageValue = "input_image"; - private const string InputFileValue = "input_file"; - private const string OutputTextValue = "output_text"; - private const string RefusalValue = "refusal"; - - public InternalResponsesContentType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesContentType InputText { get; } = new InternalResponsesContentType(InputTextValue); - - public static InternalResponsesContentType InputImage { get; } = new InternalResponsesContentType(InputImageValue); - - public static InternalResponsesContentType InputFile { get; } = new InternalResponsesContentType(InputFileValue); - - public static InternalResponsesContentType OutputText { get; } = new InternalResponsesContentType(OutputTextValue); - - public static InternalResponsesContentType Refusal { get; } = new InternalResponsesContentType(RefusalValue); - - public static bool operator ==(InternalResponsesContentType left, InternalResponsesContentType right) => left.Equals(right); - - public static bool operator !=(InternalResponsesContentType left, InternalResponsesContentType right) => !left.Equals(right); - - public static implicit operator InternalResponsesContentType(string value) => new InternalResponsesContentType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesContentType other && Equals(other); - - public bool Equals(InternalResponsesContentType 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/InternalResponsesDeveloperMessage.Serialization.cs b/src/Generated/Models/InternalResponsesDeveloperMessage.Serialization.cs index 21b94cabb..8ef007c91 100644 --- a/src/Generated/Models/InternalResponsesDeveloperMessage.Serialization.cs +++ b/src/Generated/Models/InternalResponsesDeveloperMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesDeveloperMessage : IJsonModel { - internal InternalResponsesDeveloperMessage() + internal InternalResponsesDeveloperMessage() : this(default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponsesDeveloperMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesDeveloperMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,17 +65,17 @@ internal static InternalResponsesDeveloperMessage DeserializeInternalResponsesDe { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - MessageStatus? status = default; InternalResponsesMessageRole internalRole = default; + MessageStatus? status = default; IList internalContent = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -81,18 +83,14 @@ internal static InternalResponsesDeveloperMessage DeserializeInternalResponsesDe id = prop.Value.GetString(); continue; } - if (prop.NameEquals("status"u8)) + if (prop.NameEquals("role"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - status = prop.Value.GetString().ToMessageStatus(); + internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); continue; } - if (prop.NameEquals("role"u8)) + if (prop.NameEquals("status"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + status = prop.Value.GetString().ToMessageStatus(); continue; } if (prop.NameEquals("content"u8)) @@ -105,26 +103,28 @@ internal static InternalResponsesDeveloperMessage DeserializeInternalResponsesDe internalContent = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponsesDeveloperMessage( - @type, + kind, id, additionalBinaryDataProperties, - status, internalRole, + status, internalContent); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessage)} does not support writing '{options.Format}' format."); } @@ -132,6 +132,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponsesDeveloperMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesDeveloperMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -148,21 +149,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesDeveloperMessage internalResponsesDeveloperMessage) - { - if (internalResponsesDeveloperMessage == null) - { - return null; - } - return BinaryContent.Create(internalResponsesDeveloperMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesDeveloperMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesDeveloperMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponsesDeveloperMessage.cs b/src/Generated/Models/InternalResponsesDeveloperMessage.cs index 315ec9a08..4bcf715c3 100644 --- a/src/Generated/Models/InternalResponsesDeveloperMessage.cs +++ b/src/Generated/Models/InternalResponsesDeveloperMessage.cs @@ -11,16 +11,14 @@ namespace OpenAI.Responses { internal partial class InternalResponsesDeveloperMessage : MessageResponseItem { - public InternalResponsesDeveloperMessage(IEnumerable internalContent) : base(InternalResponsesMessageRole.Developer) + internal InternalResponsesDeveloperMessage(string id, MessageStatus? status, IEnumerable internalContent) : base(id, InternalResponsesMessageRole.Developer, status) { - Argument.AssertNotNull(internalContent, nameof(internalContent)); - InternalContent = internalContent.ToList(); } - internal InternalResponsesDeveloperMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, InternalResponsesMessageRole internalRole, IList internalContent) : base(@type, id, additionalBinaryDataProperties, status, internalRole) + internal InternalResponsesDeveloperMessage(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole internalRole, MessageStatus? status, IList internalContent) : base(kind, id, additionalBinaryDataProperties, internalRole, status) { - // Plugin customization: ensure initialization of collection + // Plugin customization: ensure initialization of collections InternalContent = internalContent ?? new ChangeTrackingList(); } } diff --git a/src/Generated/Models/InternalResponsesDeveloperMessageItemParam.Serialization.cs b/src/Generated/Models/InternalResponsesDeveloperMessageItemParam.Serialization.cs new file mode 100644 index 000000000..939d22cc9 --- /dev/null +++ b/src/Generated/Models/InternalResponsesDeveloperMessageItemParam.Serialization.cs @@ -0,0 +1,135 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesDeveloperMessageItemParam : IJsonModel + { + internal InternalResponsesDeveloperMessageItemParam() : this(default, null, InternalResponsesMessageRole.Developer, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessageItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (ResponseContentPart item in Content) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalResponsesDeveloperMessageItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesDeveloperMessageItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessageItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesDeveloperMessageItemParam(document.RootElement, options); + } + + internal static InternalResponsesDeveloperMessageItemParam DeserializeInternalResponsesDeveloperMessageItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalResponsesMessageRole role = default; + IList content = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("role"u8)) + { + role = new InternalResponsesMessageRole(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("content"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseContentPart.DeserializeResponseContentPart(item, options)); + } + content = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesDeveloperMessageItemParam(kind, additionalBinaryDataProperties, role, content); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponsesDeveloperMessageItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesDeveloperMessageItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesDeveloperMessageItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponsesDeveloperMessageItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesDeveloperMessageItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponsesDeveloperMessageItemParam.cs b/src/Generated/Models/InternalResponsesDeveloperMessageItemParam.cs new file mode 100644 index 000000000..12f975cf3 --- /dev/null +++ b/src/Generated/Models/InternalResponsesDeveloperMessageItemParam.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesDeveloperMessageItemParam : InternalResponsesMessageItemParam + { + public InternalResponsesDeveloperMessageItemParam(IEnumerable content) : base(InternalResponsesMessageRole.Developer) + { + Argument.AssertNotNull(content, nameof(content)); + + Content = content.ToList(); + } + + internal InternalResponsesDeveloperMessageItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole role, IList content) : base(kind, additionalBinaryDataProperties, role) + { + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); + } + + public IList Content { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesErrorResponse.Serialization.cs b/src/Generated/Models/InternalResponsesErrorResponse.Serialization.cs deleted file mode 100644 index 79a7545a8..000000000 --- a/src/Generated/Models/InternalResponsesErrorResponse.Serialization.cs +++ /dev/null @@ -1,142 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesErrorResponse : IJsonModel - { - internal InternalResponsesErrorResponse() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesErrorResponse)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("error") != true) - { - writer.WritePropertyName("error"u8); - writer.WriteObjectValue(Error, options); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalResponsesErrorResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalResponsesErrorResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesErrorResponse)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesErrorResponse(document.RootElement, options); - } - - internal static InternalResponsesErrorResponse DeserializeInternalResponsesErrorResponse(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ResponseError error = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("error"u8)) - { - error = ResponseError.DeserializeResponseError(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesErrorResponse(error, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesErrorResponse)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesErrorResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalResponsesErrorResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesErrorResponse(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesErrorResponse)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesErrorResponse internalResponsesErrorResponse) - { - if (internalResponsesErrorResponse == null) - { - return null; - } - return BinaryContent.Create(internalResponsesErrorResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesErrorResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesErrorResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesErrorResponse.cs b/src/Generated/Models/InternalResponsesErrorResponse.cs deleted file mode 100644 index 39df97347..000000000 --- a/src/Generated/Models/InternalResponsesErrorResponse.cs +++ /dev/null @@ -1,33 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesErrorResponse - { - private protected IDictionary _additionalBinaryDataProperties; - - internal InternalResponsesErrorResponse(ResponseError error) - { - Error = error; - } - - internal InternalResponsesErrorResponse(ResponseError error, IDictionary additionalBinaryDataProperties) - { - Error = error; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public ResponseError Error { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalResponsesFileSearchTool.Serialization.cs b/src/Generated/Models/InternalResponsesFileSearchTool.Serialization.cs deleted file mode 100644 index 47b4ecd20..000000000 --- a/src/Generated/Models/InternalResponsesFileSearchTool.Serialization.cs +++ /dev/null @@ -1,210 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesFileSearchTool : IJsonModel - { - internal InternalResponsesFileSearchTool() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesFileSearchTool)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("vector_store_ids") != true) - { - writer.WritePropertyName("vector_store_ids"u8); - writer.WriteStartArray(); - foreach (string item in VectorStoreIds) - { - if (item == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item); - } - writer.WriteEndArray(); - } - if (Optional.IsDefined(MaxNumResults) && _additionalBinaryDataProperties?.ContainsKey("max_num_results") != true) - { - writer.WritePropertyName("max_num_results"u8); - writer.WriteNumberValue(MaxNumResults.Value); - } - if (Optional.IsDefined(RankingOptions) && _additionalBinaryDataProperties?.ContainsKey("ranking_options") != true) - { - writer.WritePropertyName("ranking_options"u8); - writer.WriteObjectValue(RankingOptions, options); - } - if (Optional.IsDefined(Filters) && _additionalBinaryDataProperties?.ContainsKey("filters") != true) - { - writer.WritePropertyName("filters"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(Filters); -#else - using (JsonDocument document = JsonDocument.Parse(Filters)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - - InternalResponsesFileSearchTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesFileSearchTool)JsonModelCreateCore(ref reader, options); - - protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesFileSearchTool)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesFileSearchTool(document.RootElement, options); - } - - internal static InternalResponsesFileSearchTool DeserializeInternalResponsesFileSearchTool(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - IList vectorStoreIds = default; - int? maxNumResults = default; - FileSearchToolRankingOptions rankingOptions = default; - BinaryData filters = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("vector_store_ids"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - if (item.ValueKind == JsonValueKind.Null) - { - array.Add(null); - } - else - { - array.Add(item.GetString()); - } - } - vectorStoreIds = array; - continue; - } - if (prop.NameEquals("max_num_results"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - maxNumResults = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("ranking_options"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - rankingOptions = FileSearchToolRankingOptions.DeserializeFileSearchToolRankingOptions(prop.Value, options); - continue; - } - if (prop.NameEquals("filters"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - filters = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesFileSearchTool( - @type, - additionalBinaryDataProperties, - vectorStoreIds, - maxNumResults, - rankingOptions, - filters); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesFileSearchTool)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesFileSearchTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesFileSearchTool)PersistableModelCreateCore(data, options); - - protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesFileSearchTool(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesFileSearchTool)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesFileSearchTool internalResponsesFileSearchTool) - { - if (internalResponsesFileSearchTool == null) - { - return null; - } - return BinaryContent.Create(internalResponsesFileSearchTool, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesFileSearchTool(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesFileSearchTool(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesFileSearchTool.cs b/src/Generated/Models/InternalResponsesFileSearchTool.cs deleted file mode 100644 index 61bc1ef01..000000000 --- a/src/Generated/Models/InternalResponsesFileSearchTool.cs +++ /dev/null @@ -1,37 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesFileSearchTool : ResponseTool - { - public InternalResponsesFileSearchTool(IEnumerable vectorStoreIds) : base(InternalResponsesToolType.FileSearch) - { - Argument.AssertNotNull(vectorStoreIds, nameof(vectorStoreIds)); - - VectorStoreIds = vectorStoreIds.ToList(); - } - - internal InternalResponsesFileSearchTool(InternalResponsesToolType @type, IDictionary additionalBinaryDataProperties, IList vectorStoreIds, int? maxNumResults, FileSearchToolRankingOptions rankingOptions, BinaryData filters) : base(@type, additionalBinaryDataProperties) - { - VectorStoreIds = vectorStoreIds; - MaxNumResults = maxNumResults; - RankingOptions = rankingOptions; - Filters = filters; - } - - public IList VectorStoreIds { get; } - - public int? MaxNumResults { get; set; } - - public FileSearchToolRankingOptions RankingOptions { get; set; } - - public BinaryData Filters { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesFunctionTool.Serialization.cs b/src/Generated/Models/InternalResponsesFunctionTool.Serialization.cs deleted file mode 100644 index 394d8a543..000000000 --- a/src/Generated/Models/InternalResponsesFunctionTool.Serialization.cs +++ /dev/null @@ -1,176 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesFunctionTool : IJsonModel - { - internal InternalResponsesFunctionTool() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesFunctionTool)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("name") != true) - { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - } - if (_additionalBinaryDataProperties?.ContainsKey("description") != true) - { - writer.WritePropertyName("description"u8); - writer.WriteStringValue(Description); - } - if (_additionalBinaryDataProperties?.ContainsKey("parameters") != true) - { - writer.WritePropertyName("parameters"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(Parameters); -#else - using (JsonDocument document = JsonDocument.Parse(Parameters)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (_additionalBinaryDataProperties?.ContainsKey("strict") != true) - { - writer.WritePropertyName("strict"u8); - writer.WriteBooleanValue(Strict); - } - } - - InternalResponsesFunctionTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesFunctionTool)JsonModelCreateCore(ref reader, options); - - protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesFunctionTool)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesFunctionTool(document.RootElement, options); - } - - internal static InternalResponsesFunctionTool DeserializeInternalResponsesFunctionTool(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string name = default; - string description = default; - BinaryData parameters = default; - bool strict = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("name"u8)) - { - name = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("description"u8)) - { - description = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("parameters"u8)) - { - parameters = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - if (prop.NameEquals("strict"u8)) - { - strict = prop.Value.GetBoolean(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesFunctionTool( - @type, - additionalBinaryDataProperties, - name, - description, - parameters, - strict); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesFunctionTool)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesFunctionTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesFunctionTool)PersistableModelCreateCore(data, options); - - protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesFunctionTool(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesFunctionTool)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesFunctionTool internalResponsesFunctionTool) - { - if (internalResponsesFunctionTool == null) - { - return null; - } - return BinaryContent.Create(internalResponsesFunctionTool, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesFunctionTool(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesFunctionTool(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesFunctionTool.cs b/src/Generated/Models/InternalResponsesFunctionTool.cs deleted file mode 100644 index 2124c0bb9..000000000 --- a/src/Generated/Models/InternalResponsesFunctionTool.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesFunctionTool : ResponseTool - { - public InternalResponsesFunctionTool(string name, string description, BinaryData parameters, bool strict) : base(InternalResponsesToolType.Function) - { - Argument.AssertNotNull(name, nameof(name)); - Argument.AssertNotNull(description, nameof(description)); - Argument.AssertNotNull(parameters, nameof(parameters)); - - Name = name; - Description = description; - Parameters = parameters; - Strict = strict; - } - - internal InternalResponsesFunctionTool(InternalResponsesToolType @type, IDictionary additionalBinaryDataProperties, string name, string description, BinaryData parameters, bool strict) : base(@type, additionalBinaryDataProperties) - { - Name = name; - Description = description; - Parameters = parameters; - Strict = strict; - } - - public string Name { get; set; } - - public string Description { get; set; } - - public BinaryData Parameters { get; set; } - - public bool Strict { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesInputFileContentPart.Serialization.cs b/src/Generated/Models/InternalResponsesInputFileContentPart.Serialization.cs deleted file mode 100644 index 9feb1e1ba..000000000 --- a/src/Generated/Models/InternalResponsesInputFileContentPart.Serialization.cs +++ /dev/null @@ -1,159 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesInputFileContentPart : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesInputFileContentPart)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) - { - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - } - if (Optional.IsDefined(Filename) && _additionalBinaryDataProperties?.ContainsKey("filename") != true) - { - writer.WritePropertyName("filename"u8); - writer.WriteStringValue(Filename); - } - if (Optional.IsDefined(FileBytes) && _additionalBinaryDataProperties?.ContainsKey("file_data") != true) - { - writer.WritePropertyName("file_data"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(FileBytes); -#else - using (JsonDocument document = JsonDocument.Parse(FileBytes)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - - InternalResponsesInputFileContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesInputFileContentPart)JsonModelCreateCore(ref reader, options); - - protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesInputFileContentPart)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesInputFileContentPart(document.RootElement, options); - } - - internal static InternalResponsesInputFileContentPart DeserializeInternalResponsesInputFileContentPart(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesContentType internalType = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string fileId = default; - string filename = default; - BinaryData fileBytes = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - internalType = new InternalResponsesContentType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("file_id"u8)) - { - fileId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("filename"u8)) - { - filename = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("file_data"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - fileBytes = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesInputFileContentPart(internalType, additionalBinaryDataProperties, fileId, filename, fileBytes); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesInputFileContentPart)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesInputFileContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesInputFileContentPart)PersistableModelCreateCore(data, options); - - protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesInputFileContentPart(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesInputFileContentPart)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesInputFileContentPart internalResponsesInputFileContentPart) - { - if (internalResponsesInputFileContentPart == null) - { - return null; - } - return BinaryContent.Create(internalResponsesInputFileContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesInputFileContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesInputFileContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesInputFileContentPart.cs b/src/Generated/Models/InternalResponsesInputFileContentPart.cs deleted file mode 100644 index 37dd1cffb..000000000 --- a/src/Generated/Models/InternalResponsesInputFileContentPart.cs +++ /dev/null @@ -1,27 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesInputFileContentPart : ResponseContentPart - { - public InternalResponsesInputFileContentPart() : base(InternalResponsesContentType.InputFile) - { - } - - internal InternalResponsesInputFileContentPart(InternalResponsesContentType internalType, IDictionary additionalBinaryDataProperties, string fileId, string filename, BinaryData fileBytes) : base(internalType, additionalBinaryDataProperties) - { - FileId = fileId; - Filename = filename; - FileBytes = fileBytes; - } - - public string FileId { get; set; } - - public string Filename { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesInputImageContentPart.Serialization.cs b/src/Generated/Models/InternalResponsesInputImageContentPart.Serialization.cs deleted file mode 100644 index 4ba3fe67d..000000000 --- a/src/Generated/Models/InternalResponsesInputImageContentPart.Serialization.cs +++ /dev/null @@ -1,152 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesInputImageContentPart : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesInputImageContentPart)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(ImageUrl) && _additionalBinaryDataProperties?.ContainsKey("image_url") != true) - { - writer.WritePropertyName("image_url"u8); - writer.WriteStringValue(ImageUrl); - } - if (Optional.IsDefined(FileId) && _additionalBinaryDataProperties?.ContainsKey("file_id") != true) - { - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - } - if (Optional.IsDefined(Detail) && _additionalBinaryDataProperties?.ContainsKey("detail") != true) - { - writer.WritePropertyName("detail"u8); - writer.WriteStringValue(Detail.Value.ToString()); - } - } - - InternalResponsesInputImageContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesInputImageContentPart)JsonModelCreateCore(ref reader, options); - - protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesInputImageContentPart)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesInputImageContentPart(document.RootElement, options); - } - - internal static InternalResponsesInputImageContentPart DeserializeInternalResponsesInputImageContentPart(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesContentType internalType = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string imageUrl = default; - string fileId = default; - ResponseImageDetailLevel? detail = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - internalType = new InternalResponsesContentType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("image_url"u8)) - { - imageUrl = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("file_id"u8)) - { - fileId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("detail"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - detail = new ResponseImageDetailLevel(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesInputImageContentPart(internalType, additionalBinaryDataProperties, imageUrl, fileId, detail); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesInputImageContentPart)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesInputImageContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesInputImageContentPart)PersistableModelCreateCore(data, options); - - protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesInputImageContentPart(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesInputImageContentPart)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesInputImageContentPart internalResponsesInputImageContentPart) - { - if (internalResponsesInputImageContentPart == null) - { - return null; - } - return BinaryContent.Create(internalResponsesInputImageContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesInputImageContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesInputImageContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesInputImageContentPart.cs b/src/Generated/Models/InternalResponsesInputImageContentPart.cs deleted file mode 100644 index 1eda9fbe7..000000000 --- a/src/Generated/Models/InternalResponsesInputImageContentPart.cs +++ /dev/null @@ -1,29 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesInputImageContentPart : ResponseContentPart - { - public InternalResponsesInputImageContentPart() : base(InternalResponsesContentType.InputImage) - { - } - - internal InternalResponsesInputImageContentPart(InternalResponsesContentType internalType, IDictionary additionalBinaryDataProperties, string imageUrl, string fileId, ResponseImageDetailLevel? detail) : base(internalType, additionalBinaryDataProperties) - { - ImageUrl = imageUrl; - FileId = fileId; - Detail = detail; - } - - public string ImageUrl { get; set; } - - public string FileId { get; set; } - - public ResponseImageDetailLevel? Detail { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesInputItemList.Serialization.cs b/src/Generated/Models/InternalResponsesInputItemList.Serialization.cs deleted file mode 100644 index 7f6736d62..000000000 --- a/src/Generated/Models/InternalResponsesInputItemList.Serialization.cs +++ /dev/null @@ -1,202 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesInputItemList : IJsonModel - { - internal InternalResponsesInputItemList() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesInputItemList)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("object") != true) - { - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("data") != true) - { - writer.WritePropertyName("data"u8); - writer.WriteStartArray(); - foreach (ResponseItem item in Data) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) - { - writer.WritePropertyName("first_id"u8); - writer.WriteStringValue(FirstId); - } - if (_additionalBinaryDataProperties?.ContainsKey("last_id") != true) - { - writer.WritePropertyName("last_id"u8); - writer.WriteStringValue(LastId); - } - if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) - { - writer.WritePropertyName("has_more"u8); - writer.WriteBooleanValue(HasMore); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalResponsesInputItemList IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalResponsesInputItemList JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesInputItemList)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesInputItemList(document.RootElement, options); - } - - internal static InternalResponsesInputItemList DeserializeInternalResponsesInputItemList(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesInputItemListObject @object = default; - IList data = default; - string firstId = default; - string lastId = default; - bool hasMore = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("object"u8)) - { - @object = new InternalResponsesInputItemListObject(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("data"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(ResponseItem.DeserializeResponseItem(item, options)); - } - data = array; - continue; - } - if (prop.NameEquals("first_id"u8)) - { - firstId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("last_id"u8)) - { - lastId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("has_more"u8)) - { - hasMore = prop.Value.GetBoolean(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesInputItemList( - @object, - data, - firstId, - lastId, - hasMore, - additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesInputItemList)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesInputItemList IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalResponsesInputItemList PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesInputItemList(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesInputItemList)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesInputItemList internalResponsesInputItemList) - { - if (internalResponsesInputItemList == null) - { - return null; - } - return BinaryContent.Create(internalResponsesInputItemList, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesInputItemList(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesInputItemList(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesInputItemList.cs b/src/Generated/Models/InternalResponsesInputItemList.cs deleted file mode 100644 index 02b3a30ca..000000000 --- a/src/Generated/Models/InternalResponsesInputItemList.cs +++ /dev/null @@ -1,49 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesInputItemList - { - private protected IDictionary _additionalBinaryDataProperties; - - internal InternalResponsesInputItemList(IEnumerable data, string firstId, string lastId, bool hasMore) - { - Data = data.ToList(); - FirstId = firstId; - LastId = lastId; - HasMore = hasMore; - } - - internal InternalResponsesInputItemList(InternalResponsesInputItemListObject @object, IList data, string firstId, string lastId, bool hasMore, IDictionary additionalBinaryDataProperties) - { - Object = @object; - Data = data; - FirstId = firstId; - LastId = lastId; - HasMore = hasMore; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalResponsesInputItemListObject Object { get; } = "list"; - - public IList Data { get; } - - public string FirstId { get; } - - public string LastId { get; } - - public bool HasMore { get; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalResponsesInputItemListObject.cs b/src/Generated/Models/InternalResponsesInputItemListObject.cs deleted file mode 100644 index f9e140e66..000000000 --- a/src/Generated/Models/InternalResponsesInputItemListObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesInputItemListObject : IEquatable - { - private readonly string _value; - private const string ListValue = "list"; - - public InternalResponsesInputItemListObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesInputItemListObject List { get; } = new InternalResponsesInputItemListObject(ListValue); - - public static bool operator ==(InternalResponsesInputItemListObject left, InternalResponsesInputItemListObject right) => left.Equals(right); - - public static bool operator !=(InternalResponsesInputItemListObject left, InternalResponsesInputItemListObject right) => !left.Equals(right); - - public static implicit operator InternalResponsesInputItemListObject(string value) => new InternalResponsesInputItemListObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesInputItemListObject other && Equals(other); - - public bool Equals(InternalResponsesInputItemListObject 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/InternalResponsesInputTextContentPart.Serialization.cs b/src/Generated/Models/InternalResponsesInputTextContentPart.Serialization.cs deleted file mode 100644 index 0ebd37284..000000000 --- a/src/Generated/Models/InternalResponsesInputTextContentPart.Serialization.cs +++ /dev/null @@ -1,130 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesInputTextContentPart : IJsonModel - { - internal InternalResponsesInputTextContentPart() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesInputTextContentPart)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("text") != true) - { - writer.WritePropertyName("text"u8); - writer.WriteStringValue(InternalText); - } - } - - InternalResponsesInputTextContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesInputTextContentPart)JsonModelCreateCore(ref reader, options); - - protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesInputTextContentPart)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesInputTextContentPart(document.RootElement, options); - } - - internal static InternalResponsesInputTextContentPart DeserializeInternalResponsesInputTextContentPart(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesContentType internalType = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string internalText = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - internalType = new InternalResponsesContentType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("text"u8)) - { - internalText = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesInputTextContentPart(internalType, additionalBinaryDataProperties, internalText); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesInputTextContentPart)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesInputTextContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesInputTextContentPart)PersistableModelCreateCore(data, options); - - protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesInputTextContentPart(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesInputTextContentPart)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesInputTextContentPart internalResponsesInputTextContentPart) - { - if (internalResponsesInputTextContentPart == null) - { - return null; - } - return BinaryContent.Create(internalResponsesInputTextContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesInputTextContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesInputTextContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesInputTextContentPart.cs b/src/Generated/Models/InternalResponsesInputTextContentPart.cs deleted file mode 100644 index ab859f92c..000000000 --- a/src/Generated/Models/InternalResponsesInputTextContentPart.cs +++ /dev/null @@ -1,25 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesInputTextContentPart : ResponseContentPart - { - public InternalResponsesInputTextContentPart(string internalText) : base(InternalResponsesContentType.InputText) - { - Argument.AssertNotNull(internalText, nameof(internalText)); - - InternalText = internalText; - } - - internal InternalResponsesInputTextContentPart(InternalResponsesContentType internalType, IDictionary additionalBinaryDataProperties, string internalText) : base(internalType, additionalBinaryDataProperties) - { - InternalText = internalText; - } - } -} diff --git a/src/Generated/Models/InternalResponsesItemType.cs b/src/Generated/Models/InternalResponsesItemType.cs deleted file mode 100644 index b13f1c046..000000000 --- a/src/Generated/Models/InternalResponsesItemType.cs +++ /dev/null @@ -1,65 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesItemType : IEquatable - { - private readonly string _value; - private const string MessageValue = "message"; - private const string FileSearchCallValue = "file_search_call"; - private const string FunctionCallValue = "function_call"; - private const string FunctionCallOutputValue = "function_call_output"; - private const string ComputerCallValue = "computer_call"; - private const string ComputerCallOutputValue = "computer_call_output"; - private const string WebSearchCallValue = "web_search_call"; - private const string ItemReferenceValue = "item_reference"; - private const string ReasoningValue = "reasoning"; - - public InternalResponsesItemType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesItemType Message { get; } = new InternalResponsesItemType(MessageValue); - - public static InternalResponsesItemType FileSearchCall { get; } = new InternalResponsesItemType(FileSearchCallValue); - - public static InternalResponsesItemType FunctionCall { get; } = new InternalResponsesItemType(FunctionCallValue); - - public static InternalResponsesItemType FunctionCallOutput { get; } = new InternalResponsesItemType(FunctionCallOutputValue); - - public static InternalResponsesItemType ComputerCall { get; } = new InternalResponsesItemType(ComputerCallValue); - - public static InternalResponsesItemType ComputerCallOutput { get; } = new InternalResponsesItemType(ComputerCallOutputValue); - - public static InternalResponsesItemType WebSearchCall { get; } = new InternalResponsesItemType(WebSearchCallValue); - - public static InternalResponsesItemType ItemReference { get; } = new InternalResponsesItemType(ItemReferenceValue); - - public static InternalResponsesItemType Reasoning { get; } = new InternalResponsesItemType(ReasoningValue); - - public static bool operator ==(InternalResponsesItemType left, InternalResponsesItemType right) => left.Equals(right); - - public static bool operator !=(InternalResponsesItemType left, InternalResponsesItemType right) => !left.Equals(right); - - public static implicit operator InternalResponsesItemType(string value) => new InternalResponsesItemType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesItemType other && Equals(other); - - public bool Equals(InternalResponsesItemType 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/InternalResponsesMessageAnnotationFileCitation.Serialization.cs b/src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.Serialization.cs deleted file mode 100644 index 16621b2b3..000000000 --- a/src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.Serialization.cs +++ /dev/null @@ -1,141 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesMessageAnnotationFileCitation : IJsonModel - { - internal InternalResponsesMessageAnnotationFileCitation() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationFileCitation)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("index") != true) - { - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - } - if (_additionalBinaryDataProperties?.ContainsKey("file_id") != true) - { - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - } - } - - InternalResponsesMessageAnnotationFileCitation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesMessageAnnotationFileCitation)JsonModelCreateCore(ref reader, options); - - protected override ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationFileCitation)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesMessageAnnotationFileCitation(document.RootElement, options); - } - - internal static InternalResponsesMessageAnnotationFileCitation DeserializeInternalResponsesMessageAnnotationFileCitation(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ResponseMessageAnnotationKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - int index = default; - string fileId = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToResponseMessageAnnotationKind(); - continue; - } - if (prop.NameEquals("index"u8)) - { - index = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("file_id"u8)) - { - fileId = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesMessageAnnotationFileCitation(kind, additionalBinaryDataProperties, index, fileId); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationFileCitation)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesMessageAnnotationFileCitation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesMessageAnnotationFileCitation)PersistableModelCreateCore(data, options); - - protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesMessageAnnotationFileCitation(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationFileCitation)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesMessageAnnotationFileCitation internalResponsesMessageAnnotationFileCitation) - { - if (internalResponsesMessageAnnotationFileCitation == null) - { - return null; - } - return BinaryContent.Create(internalResponsesMessageAnnotationFileCitation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesMessageAnnotationFileCitation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesMessageAnnotationFileCitation(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.cs b/src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.cs deleted file mode 100644 index 9e3625649..000000000 --- a/src/Generated/Models/InternalResponsesMessageAnnotationFileCitation.cs +++ /dev/null @@ -1,31 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesMessageAnnotationFileCitation : ResponseMessageAnnotation - { - public InternalResponsesMessageAnnotationFileCitation(int index, string fileId) : base(ResponseMessageAnnotationKind.FileCitation) - { - Argument.AssertNotNull(fileId, nameof(fileId)); - - Index = index; - FileId = fileId; - } - - internal InternalResponsesMessageAnnotationFileCitation(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties, int index, string fileId) : base(kind, additionalBinaryDataProperties) - { - Index = index; - FileId = fileId; - } - - public int Index { get; set; } - - public string FileId { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesMessageAnnotationFilePath.Serialization.cs b/src/Generated/Models/InternalResponsesMessageAnnotationFilePath.Serialization.cs deleted file mode 100644 index dcfa45e7a..000000000 --- a/src/Generated/Models/InternalResponsesMessageAnnotationFilePath.Serialization.cs +++ /dev/null @@ -1,141 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesMessageAnnotationFilePath : IJsonModel - { - internal InternalResponsesMessageAnnotationFilePath() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationFilePath)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("file_id") != true) - { - writer.WritePropertyName("file_id"u8); - writer.WriteStringValue(FileId); - } - if (_additionalBinaryDataProperties?.ContainsKey("index") != true) - { - writer.WritePropertyName("index"u8); - writer.WriteNumberValue(Index); - } - } - - InternalResponsesMessageAnnotationFilePath IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesMessageAnnotationFilePath)JsonModelCreateCore(ref reader, options); - - protected override ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationFilePath)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesMessageAnnotationFilePath(document.RootElement, options); - } - - internal static InternalResponsesMessageAnnotationFilePath DeserializeInternalResponsesMessageAnnotationFilePath(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ResponseMessageAnnotationKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string fileId = default; - int index = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToResponseMessageAnnotationKind(); - continue; - } - if (prop.NameEquals("file_id"u8)) - { - fileId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("index"u8)) - { - index = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesMessageAnnotationFilePath(kind, additionalBinaryDataProperties, fileId, index); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationFilePath)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesMessageAnnotationFilePath IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesMessageAnnotationFilePath)PersistableModelCreateCore(data, options); - - protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesMessageAnnotationFilePath(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationFilePath)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesMessageAnnotationFilePath internalResponsesMessageAnnotationFilePath) - { - if (internalResponsesMessageAnnotationFilePath == null) - { - return null; - } - return BinaryContent.Create(internalResponsesMessageAnnotationFilePath, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesMessageAnnotationFilePath(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesMessageAnnotationFilePath(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesMessageAnnotationFilePath.cs b/src/Generated/Models/InternalResponsesMessageAnnotationFilePath.cs deleted file mode 100644 index f9a52ba64..000000000 --- a/src/Generated/Models/InternalResponsesMessageAnnotationFilePath.cs +++ /dev/null @@ -1,31 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesMessageAnnotationFilePath : ResponseMessageAnnotation - { - public InternalResponsesMessageAnnotationFilePath(string fileId, int index) : base(ResponseMessageAnnotationKind.FilePath) - { - Argument.AssertNotNull(fileId, nameof(fileId)); - - FileId = fileId; - Index = index; - } - - internal InternalResponsesMessageAnnotationFilePath(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties, string fileId, int index) : base(kind, additionalBinaryDataProperties) - { - FileId = fileId; - Index = index; - } - - public string FileId { get; set; } - - public int Index { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.Serialization.cs b/src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.Serialization.cs deleted file mode 100644 index 27c5eb2b6..000000000 --- a/src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.Serialization.cs +++ /dev/null @@ -1,169 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesMessageAnnotationUrlCitation : IJsonModel - { - internal InternalResponsesMessageAnnotationUrlCitation() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationUrlCitation)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("url") != true) - { - writer.WritePropertyName("url"u8); - writer.WriteStringValue(Url); - } - if (_additionalBinaryDataProperties?.ContainsKey("title") != true) - { - writer.WritePropertyName("title"u8); - writer.WriteStringValue(Title); - } - if (_additionalBinaryDataProperties?.ContainsKey("start_index") != true) - { - writer.WritePropertyName("start_index"u8); - writer.WriteNumberValue(StartIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("end_index") != true) - { - writer.WritePropertyName("end_index"u8); - writer.WriteNumberValue(EndIndex); - } - } - - InternalResponsesMessageAnnotationUrlCitation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesMessageAnnotationUrlCitation)JsonModelCreateCore(ref reader, options); - - protected override ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationUrlCitation)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesMessageAnnotationUrlCitation(document.RootElement, options); - } - - internal static InternalResponsesMessageAnnotationUrlCitation DeserializeInternalResponsesMessageAnnotationUrlCitation(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ResponseMessageAnnotationKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string url = default; - string title = default; - int startIndex = default; - int endIndex = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToResponseMessageAnnotationKind(); - continue; - } - if (prop.NameEquals("url"u8)) - { - url = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("title"u8)) - { - title = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("start_index"u8)) - { - startIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("end_index"u8)) - { - endIndex = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesMessageAnnotationUrlCitation( - kind, - additionalBinaryDataProperties, - url, - title, - startIndex, - endIndex); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationUrlCitation)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesMessageAnnotationUrlCitation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesMessageAnnotationUrlCitation)PersistableModelCreateCore(data, options); - - protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesMessageAnnotationUrlCitation(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesMessageAnnotationUrlCitation)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesMessageAnnotationUrlCitation internalResponsesMessageAnnotationUrlCitation) - { - if (internalResponsesMessageAnnotationUrlCitation == null) - { - return null; - } - return BinaryContent.Create(internalResponsesMessageAnnotationUrlCitation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesMessageAnnotationUrlCitation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesMessageAnnotationUrlCitation(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.cs b/src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.cs deleted file mode 100644 index 11e2c5c7f..000000000 --- a/src/Generated/Models/InternalResponsesMessageAnnotationUrlCitation.cs +++ /dev/null @@ -1,40 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesMessageAnnotationUrlCitation : ResponseMessageAnnotation - { - public InternalResponsesMessageAnnotationUrlCitation(string url, string title, int startIndex, int endIndex) : base(ResponseMessageAnnotationKind.UriCitation) - { - Argument.AssertNotNull(url, nameof(url)); - Argument.AssertNotNull(title, nameof(title)); - - Url = url; - Title = title; - StartIndex = startIndex; - EndIndex = endIndex; - } - - internal InternalResponsesMessageAnnotationUrlCitation(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties, string url, string title, int startIndex, int endIndex) : base(kind, additionalBinaryDataProperties) - { - Url = url; - Title = title; - StartIndex = startIndex; - EndIndex = endIndex; - } - - public string Url { get; set; } - - public string Title { get; set; } - - public int StartIndex { get; set; } - - public int EndIndex { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesMessageItemParam.Serialization.cs b/src/Generated/Models/InternalResponsesMessageItemParam.Serialization.cs new file mode 100644 index 000000000..5a058c209 --- /dev/null +++ b/src/Generated/Models/InternalResponsesMessageItemParam.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesMessageItemParam : IJsonModel + { + internal InternalResponsesMessageItemParam() : this(InternalItemType.Message, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesMessageItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("role") != true) + { + writer.WritePropertyName("role"u8); + writer.WriteStringValue(Role.ToString()); + } + } + + InternalResponsesMessageItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesMessageItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesMessageItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesMessageItemParam(document.RootElement, options); + } + + internal static InternalResponsesMessageItemParam DeserializeInternalResponsesMessageItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("role"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "user": + return InternalResponsesUserMessageItemParam.DeserializeInternalResponsesUserMessageItemParam(element, options); + case "system": + return InternalResponsesSystemMessageItemParam.DeserializeInternalResponsesSystemMessageItemParam(element, options); + case "developer": + return InternalResponsesDeveloperMessageItemParam.DeserializeInternalResponsesDeveloperMessageItemParam(element, options); + case "assistant": + return InternalResponsesAssistantMessageItemParam.DeserializeInternalResponsesAssistantMessageItemParam(element, options); + } + } + return InternalUnknownResponsesMessageItemResourceItemParam.DeserializeInternalUnknownResponsesMessageItemResourceItemParam(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponsesMessageItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesMessageItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesMessageItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponsesMessageItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesMessageItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponsesMessageItemParam.cs b/src/Generated/Models/InternalResponsesMessageItemParam.cs new file mode 100644 index 000000000..6abe337e7 --- /dev/null +++ b/src/Generated/Models/InternalResponsesMessageItemParam.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesMessageItemParam : InternalItemParam + { + internal InternalResponsesMessageItemParam(InternalResponsesMessageRole role) : base(InternalItemType.Message) + { + Role = role; + } + + internal InternalResponsesMessageItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole role) : base(kind, additionalBinaryDataProperties) + { + Role = role; + } + + internal InternalResponsesMessageRole Role { get; set; } + } +} diff --git a/src/Generated/Models/InternalResponsesMessageRole.cs b/src/Generated/Models/InternalResponsesMessageRole.cs index 6f565078f..2cfee9fdf 100644 --- a/src/Generated/Models/InternalResponsesMessageRole.cs +++ b/src/Generated/Models/InternalResponsesMessageRole.cs @@ -23,13 +23,13 @@ public InternalResponsesMessageRole(string value) _value = value; } - public static InternalResponsesMessageRole System { get; } = new InternalResponsesMessageRole(SystemValue); + internal static InternalResponsesMessageRole System { get; } = new InternalResponsesMessageRole(SystemValue); - public static InternalResponsesMessageRole Developer { get; } = new InternalResponsesMessageRole(DeveloperValue); + internal static InternalResponsesMessageRole Developer { get; } = new InternalResponsesMessageRole(DeveloperValue); - public static InternalResponsesMessageRole User { get; } = new InternalResponsesMessageRole(UserValue); + internal static InternalResponsesMessageRole User { get; } = new InternalResponsesMessageRole(UserValue); - public static InternalResponsesMessageRole Assistant { get; } = new InternalResponsesMessageRole(AssistantValue); + internal static InternalResponsesMessageRole Assistant { get; } = new InternalResponsesMessageRole(AssistantValue); public static bool operator ==(InternalResponsesMessageRole left, InternalResponsesMessageRole right) => left.Equals(right); diff --git a/src/Generated/Models/InternalResponsesOutputRefusalContentPart.Serialization.cs b/src/Generated/Models/InternalResponsesOutputRefusalContentPart.Serialization.cs deleted file mode 100644 index 734deb694..000000000 --- a/src/Generated/Models/InternalResponsesOutputRefusalContentPart.Serialization.cs +++ /dev/null @@ -1,130 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesOutputRefusalContentPart : IJsonModel - { - internal InternalResponsesOutputRefusalContentPart() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesOutputRefusalContentPart)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("refusal") != true) - { - writer.WritePropertyName("refusal"u8); - writer.WriteStringValue(InternalRefusal); - } - } - - InternalResponsesOutputRefusalContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesOutputRefusalContentPart)JsonModelCreateCore(ref reader, options); - - protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesOutputRefusalContentPart)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesOutputRefusalContentPart(document.RootElement, options); - } - - internal static InternalResponsesOutputRefusalContentPart DeserializeInternalResponsesOutputRefusalContentPart(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesContentType internalType = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string internalRefusal = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - internalType = new InternalResponsesContentType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("refusal"u8)) - { - internalRefusal = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesOutputRefusalContentPart(internalType, additionalBinaryDataProperties, internalRefusal); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesOutputRefusalContentPart)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesOutputRefusalContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesOutputRefusalContentPart)PersistableModelCreateCore(data, options); - - protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesOutputRefusalContentPart(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesOutputRefusalContentPart)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesOutputRefusalContentPart internalResponsesOutputRefusalContentPart) - { - if (internalResponsesOutputRefusalContentPart == null) - { - return null; - } - return BinaryContent.Create(internalResponsesOutputRefusalContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesOutputRefusalContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesOutputRefusalContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesOutputRefusalContentPart.cs b/src/Generated/Models/InternalResponsesOutputRefusalContentPart.cs deleted file mode 100644 index 2d6fa38da..000000000 --- a/src/Generated/Models/InternalResponsesOutputRefusalContentPart.cs +++ /dev/null @@ -1,25 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesOutputRefusalContentPart : ResponseContentPart - { - public InternalResponsesOutputRefusalContentPart(string internalRefusal) : base(InternalResponsesContentType.Refusal) - { - Argument.AssertNotNull(internalRefusal, nameof(internalRefusal)); - - InternalRefusal = internalRefusal; - } - - internal InternalResponsesOutputRefusalContentPart(InternalResponsesContentType internalType, IDictionary additionalBinaryDataProperties, string internalRefusal) : base(internalType, additionalBinaryDataProperties) - { - InternalRefusal = internalRefusal; - } - } -} diff --git a/src/Generated/Models/InternalResponsesOutputTextContentPart.Serialization.cs b/src/Generated/Models/InternalResponsesOutputTextContentPart.Serialization.cs deleted file mode 100644 index 4568e7062..000000000 --- a/src/Generated/Models/InternalResponsesOutputTextContentPart.Serialization.cs +++ /dev/null @@ -1,151 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesOutputTextContentPart : IJsonModel - { - internal InternalResponsesOutputTextContentPart() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesOutputTextContentPart)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("annotations") != true) - { - writer.WritePropertyName("annotations"u8); - writer.WriteStartArray(); - foreach (ResponseMessageAnnotation item in Annotations) - { - writer.WriteObjectValue(item, options); - } - writer.WriteEndArray(); - } - if (_additionalBinaryDataProperties?.ContainsKey("text") != true) - { - writer.WritePropertyName("text"u8); - writer.WriteStringValue(InternalText); - } - } - - InternalResponsesOutputTextContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesOutputTextContentPart)JsonModelCreateCore(ref reader, options); - - protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesOutputTextContentPart)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesOutputTextContentPart(document.RootElement, options); - } - - internal static InternalResponsesOutputTextContentPart DeserializeInternalResponsesOutputTextContentPart(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesContentType internalType = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - IList annotations = default; - string internalText = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - internalType = new InternalResponsesContentType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("annotations"u8)) - { - List array = new List(); - foreach (var item in prop.Value.EnumerateArray()) - { - array.Add(ResponseMessageAnnotation.DeserializeResponseMessageAnnotation(item, options)); - } - annotations = array; - continue; - } - if (prop.NameEquals("text"u8)) - { - internalText = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesOutputTextContentPart(internalType, additionalBinaryDataProperties, annotations, internalText); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesOutputTextContentPart)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesOutputTextContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesOutputTextContentPart)PersistableModelCreateCore(data, options); - - protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesOutputTextContentPart(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesOutputTextContentPart)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesOutputTextContentPart internalResponsesOutputTextContentPart) - { - if (internalResponsesOutputTextContentPart == null) - { - return null; - } - return BinaryContent.Create(internalResponsesOutputTextContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesOutputTextContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesOutputTextContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesOutputTextContentPart.cs b/src/Generated/Models/InternalResponsesOutputTextContentPart.cs deleted file mode 100644 index c7974eee3..000000000 --- a/src/Generated/Models/InternalResponsesOutputTextContentPart.cs +++ /dev/null @@ -1,31 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesOutputTextContentPart : ResponseContentPart - { - public InternalResponsesOutputTextContentPart(IEnumerable annotations, string internalText) : base(InternalResponsesContentType.OutputText) - { - Argument.AssertNotNull(annotations, nameof(annotations)); - Argument.AssertNotNull(internalText, nameof(internalText)); - - Annotations = annotations.ToList(); - InternalText = internalText; - } - - internal InternalResponsesOutputTextContentPart(InternalResponsesContentType internalType, IDictionary additionalBinaryDataProperties, IList annotations, string internalText) : base(internalType, additionalBinaryDataProperties) - { - Annotations = annotations; - InternalText = internalText; - } - - public IList Annotations { get; } - } -} diff --git a/src/Generated/Models/InternalResponsesReasoningItemSummaryElement.Serialization.cs b/src/Generated/Models/InternalResponsesReasoningItemSummaryElement.Serialization.cs deleted file mode 100644 index cee749eb7..000000000 --- a/src/Generated/Models/InternalResponsesReasoningItemSummaryElement.Serialization.cs +++ /dev/null @@ -1,139 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - [PersistableModelProxy(typeof(InternalUnknownResponsesReasoningItemSummaryElement))] - internal abstract partial class InternalResponsesReasoningItemSummaryElement : IJsonModel - { - internal InternalResponsesReasoningItemSummaryElement() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElement)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalResponsesReasoningItemSummaryElement IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalResponsesReasoningItemSummaryElement JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElement)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesReasoningItemSummaryElement(document.RootElement, options); - } - - internal static InternalResponsesReasoningItemSummaryElement DeserializeInternalResponsesReasoningItemSummaryElement(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - if (element.TryGetProperty("type"u8, out JsonElement discriminator)) - { - switch (discriminator.GetString()) - { - case "summary_text": - return InternalResponsesReasoningItemSummaryElementSummaryText.DeserializeInternalResponsesReasoningItemSummaryElementSummaryText(element, options); - } - } - return InternalUnknownResponsesReasoningItemSummaryElement.DeserializeInternalUnknownResponsesReasoningItemSummaryElement(element, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElement)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesReasoningItemSummaryElement IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalResponsesReasoningItemSummaryElement PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesReasoningItemSummaryElement(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElement)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesReasoningItemSummaryElement internalResponsesReasoningItemSummaryElement) - { - if (internalResponsesReasoningItemSummaryElement == null) - { - return null; - } - return BinaryContent.Create(internalResponsesReasoningItemSummaryElement, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesReasoningItemSummaryElement(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesReasoningItemSummaryElement(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesReasoningItemSummaryElement.cs b/src/Generated/Models/InternalResponsesReasoningItemSummaryElement.cs deleted file mode 100644 index 5f9fd9191..000000000 --- a/src/Generated/Models/InternalResponsesReasoningItemSummaryElement.cs +++ /dev/null @@ -1,33 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal abstract partial class InternalResponsesReasoningItemSummaryElement - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected InternalResponsesReasoningItemSummaryElement(InternalResponsesReasoningItemSummaryType @type) - { - Type = @type; - } - - internal InternalResponsesReasoningItemSummaryElement(InternalResponsesReasoningItemSummaryType @type, IDictionary additionalBinaryDataProperties) - { - Type = @type; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - internal InternalResponsesReasoningItemSummaryType Type { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.Serialization.cs b/src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.Serialization.cs deleted file mode 100644 index f9aade9bf..000000000 --- a/src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.Serialization.cs +++ /dev/null @@ -1,130 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesReasoningItemSummaryElementSummaryText : IJsonModel - { - internal InternalResponsesReasoningItemSummaryElementSummaryText() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElementSummaryText)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("text") != true) - { - writer.WritePropertyName("text"u8); - writer.WriteStringValue(Text); - } - } - - InternalResponsesReasoningItemSummaryElementSummaryText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesReasoningItemSummaryElementSummaryText)JsonModelCreateCore(ref reader, options); - - protected override InternalResponsesReasoningItemSummaryElement JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElementSummaryText)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesReasoningItemSummaryElementSummaryText(document.RootElement, options); - } - - internal static InternalResponsesReasoningItemSummaryElementSummaryText DeserializeInternalResponsesReasoningItemSummaryElementSummaryText(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesReasoningItemSummaryType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string text = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesReasoningItemSummaryType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("text"u8)) - { - text = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesReasoningItemSummaryElementSummaryText(@type, additionalBinaryDataProperties, text); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElementSummaryText)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesReasoningItemSummaryElementSummaryText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesReasoningItemSummaryElementSummaryText)PersistableModelCreateCore(data, options); - - protected override InternalResponsesReasoningItemSummaryElement PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesReasoningItemSummaryElementSummaryText(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElementSummaryText)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesReasoningItemSummaryElementSummaryText internalResponsesReasoningItemSummaryElementSummaryText) - { - if (internalResponsesReasoningItemSummaryElementSummaryText == null) - { - return null; - } - return BinaryContent.Create(internalResponsesReasoningItemSummaryElementSummaryText, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesReasoningItemSummaryElementSummaryText(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesReasoningItemSummaryElementSummaryText(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.cs b/src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.cs deleted file mode 100644 index 7fde14ca1..000000000 --- a/src/Generated/Models/InternalResponsesReasoningItemSummaryElementSummaryText.cs +++ /dev/null @@ -1,27 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesReasoningItemSummaryElementSummaryText : InternalResponsesReasoningItemSummaryElement - { - public InternalResponsesReasoningItemSummaryElementSummaryText(string text) : base(InternalResponsesReasoningItemSummaryType.SummaryText) - { - Argument.AssertNotNull(text, nameof(text)); - - Text = text; - } - - internal InternalResponsesReasoningItemSummaryElementSummaryText(InternalResponsesReasoningItemSummaryType @type, IDictionary additionalBinaryDataProperties, string text) : base(@type, additionalBinaryDataProperties) - { - Text = text; - } - - public string Text { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesReasoningItemSummaryType.cs b/src/Generated/Models/InternalResponsesReasoningItemSummaryType.cs deleted file mode 100644 index 4f337b26e..000000000 --- a/src/Generated/Models/InternalResponsesReasoningItemSummaryType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesReasoningItemSummaryType : IEquatable - { - private readonly string _value; - private const string SummaryTextValue = "summary_text"; - - public InternalResponsesReasoningItemSummaryType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesReasoningItemSummaryType SummaryText { get; } = new InternalResponsesReasoningItemSummaryType(SummaryTextValue); - - public static bool operator ==(InternalResponsesReasoningItemSummaryType left, InternalResponsesReasoningItemSummaryType right) => left.Equals(right); - - public static bool operator !=(InternalResponsesReasoningItemSummaryType left, InternalResponsesReasoningItemSummaryType right) => !left.Equals(right); - - public static implicit operator InternalResponsesReasoningItemSummaryType(string value) => new InternalResponsesReasoningItemSummaryType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesReasoningItemSummaryType other && Equals(other); - - public bool Equals(InternalResponsesReasoningItemSummaryType 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/InternalResponsesResponseStreamEventType.cs b/src/Generated/Models/InternalResponsesResponseStreamEventType.cs deleted file mode 100644 index b8cc6440d..000000000 --- a/src/Generated/Models/InternalResponsesResponseStreamEventType.cs +++ /dev/null @@ -1,107 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesResponseStreamEventType : IEquatable - { - private readonly string _value; - private const string ErrorValue = "error"; - private const string ResponseCompletedValue = "response.completed"; - private const string ResponseContentPartAddedValue = "response.content_part.added"; - private const string ResponseContentPartDoneValue = "response.content_part.done"; - private const string ResponseCreatedValue = "response.created"; - private const string ResponseFailedValue = "response.failed"; - private const string ResponseFileSearchCallCompletedValue = "response.file_search_call.completed"; - private const string ResponseFileSearchCallInProgressValue = "response.file_search_call.in.progress"; - private const string ResponseFileSearchCallSearchingValue = "response.file_search_call.searching"; - private const string ResponseFunctionCallArgumentsDeltaValue = "response.function_call_arguments.delta"; - private const string ResponseFunctionCallArgumentsDoneValue = "response.function_call_arguments.done"; - private const string ResponseInProgressValue = "response.in_progress"; - private const string ResponseIncompleteValue = "response.incomplete"; - private const string ResponseOutputItemAddedValue = "response.output_item.added"; - private const string ResponseOutputItemDoneValue = "response.output_item.done"; - private const string ResponseOutputTextAnnotationAddedValue = "response.output_text.annotation.added"; - private const string ResponseOutputTextDeltaValue = "response.output_text.delta"; - private const string ResponseOutputTextDoneValue = "response.output_text.done"; - private const string ResponseRefusalDeltaValue = "response.refusal.delta"; - private const string ResponseRefusalDoneValue = "response.refusal.done"; - private const string ResponseWebSearchCallCompletedValue = "response.web_search_call.completed"; - private const string ResponseWebSearchCallInProgressValue = "response.web_search_call.in_progress"; - private const string ResponseWebSearchCallSearchingValue = "response.web_search_call.searching"; - - public InternalResponsesResponseStreamEventType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesResponseStreamEventType Error { get; } = new InternalResponsesResponseStreamEventType(ErrorValue); - - public static InternalResponsesResponseStreamEventType ResponseCompleted { get; } = new InternalResponsesResponseStreamEventType(ResponseCompletedValue); - - public static InternalResponsesResponseStreamEventType ResponseContentPartAdded { get; } = new InternalResponsesResponseStreamEventType(ResponseContentPartAddedValue); - - public static InternalResponsesResponseStreamEventType ResponseContentPartDone { get; } = new InternalResponsesResponseStreamEventType(ResponseContentPartDoneValue); - - public static InternalResponsesResponseStreamEventType ResponseCreated { get; } = new InternalResponsesResponseStreamEventType(ResponseCreatedValue); - - public static InternalResponsesResponseStreamEventType ResponseFailed { get; } = new InternalResponsesResponseStreamEventType(ResponseFailedValue); - - public static InternalResponsesResponseStreamEventType ResponseFileSearchCallCompleted { get; } = new InternalResponsesResponseStreamEventType(ResponseFileSearchCallCompletedValue); - - public static InternalResponsesResponseStreamEventType ResponseFileSearchCallInProgress { get; } = new InternalResponsesResponseStreamEventType(ResponseFileSearchCallInProgressValue); - - public static InternalResponsesResponseStreamEventType ResponseFileSearchCallSearching { get; } = new InternalResponsesResponseStreamEventType(ResponseFileSearchCallSearchingValue); - - public static InternalResponsesResponseStreamEventType ResponseFunctionCallArgumentsDelta { get; } = new InternalResponsesResponseStreamEventType(ResponseFunctionCallArgumentsDeltaValue); - - public static InternalResponsesResponseStreamEventType ResponseFunctionCallArgumentsDone { get; } = new InternalResponsesResponseStreamEventType(ResponseFunctionCallArgumentsDoneValue); - - public static InternalResponsesResponseStreamEventType ResponseInProgress { get; } = new InternalResponsesResponseStreamEventType(ResponseInProgressValue); - - public static InternalResponsesResponseStreamEventType ResponseIncomplete { get; } = new InternalResponsesResponseStreamEventType(ResponseIncompleteValue); - - public static InternalResponsesResponseStreamEventType ResponseOutputItemAdded { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputItemAddedValue); - - public static InternalResponsesResponseStreamEventType ResponseOutputItemDone { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputItemDoneValue); - - public static InternalResponsesResponseStreamEventType ResponseOutputTextAnnotationAdded { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputTextAnnotationAddedValue); - - public static InternalResponsesResponseStreamEventType ResponseOutputTextDelta { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputTextDeltaValue); - - public static InternalResponsesResponseStreamEventType ResponseOutputTextDone { get; } = new InternalResponsesResponseStreamEventType(ResponseOutputTextDoneValue); - - public static InternalResponsesResponseStreamEventType ResponseRefusalDelta { get; } = new InternalResponsesResponseStreamEventType(ResponseRefusalDeltaValue); - - public static InternalResponsesResponseStreamEventType ResponseRefusalDone { get; } = new InternalResponsesResponseStreamEventType(ResponseRefusalDoneValue); - - public static InternalResponsesResponseStreamEventType ResponseWebSearchCallCompleted { get; } = new InternalResponsesResponseStreamEventType(ResponseWebSearchCallCompletedValue); - - public static InternalResponsesResponseStreamEventType ResponseWebSearchCallInProgress { get; } = new InternalResponsesResponseStreamEventType(ResponseWebSearchCallInProgressValue); - - public static InternalResponsesResponseStreamEventType ResponseWebSearchCallSearching { get; } = new InternalResponsesResponseStreamEventType(ResponseWebSearchCallSearchingValue); - - public static bool operator ==(InternalResponsesResponseStreamEventType left, InternalResponsesResponseStreamEventType right) => left.Equals(right); - - public static bool operator !=(InternalResponsesResponseStreamEventType left, InternalResponsesResponseStreamEventType right) => !left.Equals(right); - - public static implicit operator InternalResponsesResponseStreamEventType(string value) => new InternalResponsesResponseStreamEventType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesResponseStreamEventType other && Equals(other); - - public bool Equals(InternalResponsesResponseStreamEventType 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/InternalResponsesSystemMessage.Serialization.cs b/src/Generated/Models/InternalResponsesSystemMessage.Serialization.cs index 58d210547..e8233d5a2 100644 --- a/src/Generated/Models/InternalResponsesSystemMessage.Serialization.cs +++ b/src/Generated/Models/InternalResponsesSystemMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesSystemMessage : IJsonModel { - internal InternalResponsesSystemMessage() + internal InternalResponsesSystemMessage() : this(default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponsesSystemMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesSystemMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,17 +65,17 @@ internal static InternalResponsesSystemMessage DeserializeInternalResponsesSyste { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - MessageStatus? status = default; InternalResponsesMessageRole internalRole = default; + MessageStatus? status = default; IList internalContent = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -81,18 +83,14 @@ internal static InternalResponsesSystemMessage DeserializeInternalResponsesSyste id = prop.Value.GetString(); continue; } - if (prop.NameEquals("status"u8)) + if (prop.NameEquals("role"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - status = prop.Value.GetString().ToMessageStatus(); + internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); continue; } - if (prop.NameEquals("role"u8)) + if (prop.NameEquals("status"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + status = prop.Value.GetString().ToMessageStatus(); continue; } if (prop.NameEquals("content"u8)) @@ -105,26 +103,28 @@ internal static InternalResponsesSystemMessage DeserializeInternalResponsesSyste internalContent = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponsesSystemMessage( - @type, + kind, id, additionalBinaryDataProperties, - status, internalRole, + status, internalContent); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponsesSystemMessage)} does not support writing '{options.Format}' format."); } @@ -132,6 +132,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponsesSystemMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesSystemMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -148,21 +149,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesSystemMessage internalResponsesSystemMessage) - { - if (internalResponsesSystemMessage == null) - { - return null; - } - return BinaryContent.Create(internalResponsesSystemMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesSystemMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesSystemMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponsesSystemMessage.cs b/src/Generated/Models/InternalResponsesSystemMessage.cs index d2afad776..d47eda57a 100644 --- a/src/Generated/Models/InternalResponsesSystemMessage.cs +++ b/src/Generated/Models/InternalResponsesSystemMessage.cs @@ -11,16 +11,14 @@ namespace OpenAI.Responses { internal partial class InternalResponsesSystemMessage : MessageResponseItem { - public InternalResponsesSystemMessage(IEnumerable internalContent) : base(InternalResponsesMessageRole.System) + internal InternalResponsesSystemMessage(string id, MessageStatus? status, IEnumerable internalContent) : base(id, InternalResponsesMessageRole.System, status) { - Argument.AssertNotNull(internalContent, nameof(internalContent)); - InternalContent = internalContent.ToList(); } - internal InternalResponsesSystemMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, InternalResponsesMessageRole internalRole, IList internalContent) : base(@type, id, additionalBinaryDataProperties, status, internalRole) + internal InternalResponsesSystemMessage(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole internalRole, MessageStatus? status, IList internalContent) : base(kind, id, additionalBinaryDataProperties, internalRole, status) { - // Plugin customization: ensure initialization of collection + // Plugin customization: ensure initialization of collections InternalContent = internalContent ?? new ChangeTrackingList(); } } diff --git a/src/Generated/Models/InternalResponsesSystemMessageItemParam.Serialization.cs b/src/Generated/Models/InternalResponsesSystemMessageItemParam.Serialization.cs new file mode 100644 index 000000000..7f2c7b44c --- /dev/null +++ b/src/Generated/Models/InternalResponsesSystemMessageItemParam.Serialization.cs @@ -0,0 +1,135 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesSystemMessageItemParam : IJsonModel + { + internal InternalResponsesSystemMessageItemParam() : this(default, null, InternalResponsesMessageRole.System, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesSystemMessageItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (ResponseContentPart item in Content) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalResponsesSystemMessageItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesSystemMessageItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesSystemMessageItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesSystemMessageItemParam(document.RootElement, options); + } + + internal static InternalResponsesSystemMessageItemParam DeserializeInternalResponsesSystemMessageItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalResponsesMessageRole role = default; + IList content = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("role"u8)) + { + role = new InternalResponsesMessageRole(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("content"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseContentPart.DeserializeResponseContentPart(item, options)); + } + content = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesSystemMessageItemParam(kind, additionalBinaryDataProperties, role, content); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponsesSystemMessageItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesSystemMessageItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesSystemMessageItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponsesSystemMessageItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesSystemMessageItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponsesSystemMessageItemParam.cs b/src/Generated/Models/InternalResponsesSystemMessageItemParam.cs new file mode 100644 index 000000000..373d118d4 --- /dev/null +++ b/src/Generated/Models/InternalResponsesSystemMessageItemParam.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesSystemMessageItemParam : InternalResponsesMessageItemParam + { + public InternalResponsesSystemMessageItemParam(IEnumerable content) : base(InternalResponsesMessageRole.System) + { + Argument.AssertNotNull(content, nameof(content)); + + Content = content.ToList(); + } + + internal InternalResponsesSystemMessageItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole role, IList content) : base(kind, additionalBinaryDataProperties, role) + { + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); + } + + public IList Content { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesTextFormatJsonObject.Serialization.cs b/src/Generated/Models/InternalResponsesTextFormatJsonObject.Serialization.cs index 1f652cdf9..4c50d492c 100644 --- a/src/Generated/Models/InternalResponsesTextFormatJsonObject.Serialization.cs +++ b/src/Generated/Models/InternalResponsesTextFormatJsonObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponsesTextFormatJsonObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesTextFormatJsonObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseTextFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,6 +60,7 @@ internal static InternalResponsesTextFormatJsonObject DeserializeInternalRespons internalType = new InternalResponsesTextFormatType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponsesTextFormatJsonObject(internalType, additionalBinaryDataProperties); @@ -65,13 +68,14 @@ internal static InternalResponsesTextFormatJsonObject DeserializeInternalRespons BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponsesTextFormatJsonObject)} does not support writing '{options.Format}' format."); } @@ -79,6 +83,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponsesTextFormatJsonObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesTextFormatJsonObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseTextFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -95,21 +100,5 @@ protected override ResponseTextFormat PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesTextFormatJsonObject internalResponsesTextFormatJsonObject) - { - if (internalResponsesTextFormatJsonObject == null) - { - return null; - } - return BinaryContent.Create(internalResponsesTextFormatJsonObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesTextFormatJsonObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesTextFormatJsonObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponsesTextFormatJsonObject.cs b/src/Generated/Models/InternalResponsesTextFormatJsonObject.cs index 0e3e570a6..a73814e9c 100644 --- a/src/Generated/Models/InternalResponsesTextFormatJsonObject.cs +++ b/src/Generated/Models/InternalResponsesTextFormatJsonObject.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesTextFormatJsonObject : ResponseTextFormat { - public InternalResponsesTextFormatJsonObject() : base(InternalResponsesTextFormatType.JsonObject) + public InternalResponsesTextFormatJsonObject() : this(InternalResponsesTextFormatType.JsonObject, null) { } diff --git a/src/Generated/Models/InternalResponsesTextFormatJsonSchema.Serialization.cs b/src/Generated/Models/InternalResponsesTextFormatJsonSchema.Serialization.cs index c4377754f..ceadb80f9 100644 --- a/src/Generated/Models/InternalResponsesTextFormatJsonSchema.Serialization.cs +++ b/src/Generated/Models/InternalResponsesTextFormatJsonSchema.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesTextFormatJsonSchema : IJsonModel { - internal InternalResponsesTextFormatJsonSchema() + internal InternalResponsesTextFormatJsonSchema() : this(InternalResponsesTextFormatType.JsonSchema, null, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,21 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(InternalResponsesTextFormatJsonSchema)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(Description) && _additionalBinaryDataProperties?.ContainsKey("description") != true) + { + writer.WritePropertyName("description"u8); + writer.WriteStringValue(Description); + } if (_additionalBinaryDataProperties?.ContainsKey("name") != true) { writer.WritePropertyName("name"u8); writer.WriteStringValue(Name); } + if (Optional.IsDefined(Strict) && _additionalBinaryDataProperties?.ContainsKey("strict") != true) + { + writer.WritePropertyName("strict"u8); + writer.WriteBooleanValue(Strict.Value); + } if (_additionalBinaryDataProperties?.ContainsKey("schema") != true) { writer.WritePropertyName("schema"u8); @@ -49,20 +60,11 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri } #endif } - if (Optional.IsDefined(Description) && _additionalBinaryDataProperties?.ContainsKey("description") != true) - { - writer.WritePropertyName("description"u8); - writer.WriteStringValue(Description); - } - if (Optional.IsDefined(Strict) && _additionalBinaryDataProperties?.ContainsKey("strict") != true) - { - writer.WritePropertyName("strict"u8); - writer.WriteBooleanValue(Strict.Value); - } } InternalResponsesTextFormatJsonSchema IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesTextFormatJsonSchema)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseTextFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,10 +84,10 @@ internal static InternalResponsesTextFormatJsonSchema DeserializeInternalRespons } InternalResponsesTextFormatType internalType = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string name = default; - BinaryData schema = default; string description = default; + string name = default; bool? strict = default; + BinaryData schema = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) @@ -93,19 +95,14 @@ internal static InternalResponsesTextFormatJsonSchema DeserializeInternalRespons internalType = new InternalResponsesTextFormatType(prop.Value.GetString()); continue; } - if (prop.NameEquals("name"u8)) - { - name = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("schema"u8)) + if (prop.NameEquals("description"u8)) { - schema = BinaryData.FromString(prop.Value.GetRawText()); + description = prop.Value.GetString(); continue; } - if (prop.NameEquals("description"u8)) + if (prop.NameEquals("name"u8)) { - description = prop.Value.GetString(); + name = prop.Value.GetString(); continue; } if (prop.NameEquals("strict"u8)) @@ -118,26 +115,33 @@ internal static InternalResponsesTextFormatJsonSchema DeserializeInternalRespons strict = prop.Value.GetBoolean(); continue; } + if (prop.NameEquals("schema"u8)) + { + schema = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponsesTextFormatJsonSchema( internalType, additionalBinaryDataProperties, - name, - schema, description, - strict); + name, + strict, + schema); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponsesTextFormatJsonSchema)} does not support writing '{options.Format}' format."); } @@ -145,6 +149,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponsesTextFormatJsonSchema IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesTextFormatJsonSchema)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseTextFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -161,21 +166,5 @@ protected override ResponseTextFormat PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesTextFormatJsonSchema internalResponsesTextFormatJsonSchema) - { - if (internalResponsesTextFormatJsonSchema == null) - { - return null; - } - return BinaryContent.Create(internalResponsesTextFormatJsonSchema, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesTextFormatJsonSchema(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesTextFormatJsonSchema(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponsesTextFormatJsonSchema.cs b/src/Generated/Models/InternalResponsesTextFormatJsonSchema.cs index 9d713497f..e6f40fb6e 100644 --- a/src/Generated/Models/InternalResponsesTextFormatJsonSchema.cs +++ b/src/Generated/Models/InternalResponsesTextFormatJsonSchema.cs @@ -19,20 +19,18 @@ public InternalResponsesTextFormatJsonSchema(string name, BinaryData schema) : b Schema = schema; } - internal InternalResponsesTextFormatJsonSchema(InternalResponsesTextFormatType internalType, IDictionary additionalBinaryDataProperties, string name, BinaryData schema, string description, bool? strict) : base(internalType, additionalBinaryDataProperties) + internal InternalResponsesTextFormatJsonSchema(InternalResponsesTextFormatType internalType, IDictionary additionalBinaryDataProperties, string description, string name, bool? strict, BinaryData schema) : base(internalType, additionalBinaryDataProperties) { - Name = name; - Schema = schema; Description = description; + Name = name; Strict = strict; + Schema = schema; } - public string Name { get; set; } - - public BinaryData Schema { get; set; } - public string Description { get; set; } + public string Name { get; set; } + public bool? Strict { get; set; } } } diff --git a/src/Generated/Models/InternalResponsesTextFormatText.Serialization.cs b/src/Generated/Models/InternalResponsesTextFormatText.Serialization.cs index 80bfdec5a..7487afc15 100644 --- a/src/Generated/Models/InternalResponsesTextFormatText.Serialization.cs +++ b/src/Generated/Models/InternalResponsesTextFormatText.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponsesTextFormatText IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesTextFormatText)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseTextFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,6 +60,7 @@ internal static InternalResponsesTextFormatText DeserializeInternalResponsesText internalType = new InternalResponsesTextFormatType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponsesTextFormatText(internalType, additionalBinaryDataProperties); @@ -65,13 +68,14 @@ internal static InternalResponsesTextFormatText DeserializeInternalResponsesText BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponsesTextFormatText)} does not support writing '{options.Format}' format."); } @@ -79,6 +83,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponsesTextFormatText IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesTextFormatText)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseTextFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -95,21 +100,5 @@ protected override ResponseTextFormat PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesTextFormatText internalResponsesTextFormatText) - { - if (internalResponsesTextFormatText == null) - { - return null; - } - return BinaryContent.Create(internalResponsesTextFormatText, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesTextFormatText(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesTextFormatText(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponsesTextFormatText.cs b/src/Generated/Models/InternalResponsesTextFormatText.cs index acab0e2a7..84e821f2e 100644 --- a/src/Generated/Models/InternalResponsesTextFormatText.cs +++ b/src/Generated/Models/InternalResponsesTextFormatText.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesTextFormatText : ResponseTextFormat { - public InternalResponsesTextFormatText() : base(InternalResponsesTextFormatType.Text) + public InternalResponsesTextFormatText() : this(InternalResponsesTextFormatType.Text, null) { } diff --git a/src/Generated/Models/InternalResponsesTextFormatType.cs b/src/Generated/Models/InternalResponsesTextFormatType.cs index f1ae82f1e..269427759 100644 --- a/src/Generated/Models/InternalResponsesTextFormatType.cs +++ b/src/Generated/Models/InternalResponsesTextFormatType.cs @@ -12,8 +12,8 @@ namespace OpenAI.Responses { private readonly string _value; private const string TextValue = "text"; - private const string JsonObjectValue = "json_object"; private const string JsonSchemaValue = "json_schema"; + private const string JsonObjectValue = "json_object"; public InternalResponsesTextFormatType(string value) { @@ -22,11 +22,11 @@ public InternalResponsesTextFormatType(string value) _value = value; } - public static InternalResponsesTextFormatType Text { get; } = new InternalResponsesTextFormatType(TextValue); + internal static InternalResponsesTextFormatType Text { get; } = new InternalResponsesTextFormatType(TextValue); - public static InternalResponsesTextFormatType JsonObject { get; } = new InternalResponsesTextFormatType(JsonObjectValue); + internal static InternalResponsesTextFormatType JsonSchema { get; } = new InternalResponsesTextFormatType(JsonSchemaValue); - public static InternalResponsesTextFormatType JsonSchema { get; } = new InternalResponsesTextFormatType(JsonSchemaValue); + internal static InternalResponsesTextFormatType JsonObject { get; } = new InternalResponsesTextFormatType(JsonObjectValue); public static bool operator ==(InternalResponsesTextFormatType left, InternalResponsesTextFormatType right) => left.Equals(right); diff --git a/src/Generated/Models/InternalResponsesToolChoiceObject.Serialization.cs b/src/Generated/Models/InternalResponsesToolChoiceObject.Serialization.cs deleted file mode 100644 index 7fce166f2..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObject.Serialization.cs +++ /dev/null @@ -1,145 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - [PersistableModelProxy(typeof(InternalUnknownResponsesToolChoiceObject))] - internal abstract partial class InternalResponsesToolChoiceObject : IJsonModel - { - internal InternalResponsesToolChoiceObject() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObject)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalResponsesToolChoiceObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalResponsesToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObject)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesToolChoiceObject(document.RootElement, options); - } - - internal static InternalResponsesToolChoiceObject DeserializeInternalResponsesToolChoiceObject(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - if (element.TryGetProperty("type"u8, out JsonElement discriminator)) - { - switch (discriminator.GetString()) - { - case "function": - return InternalResponsesToolChoiceObjectFunction.DeserializeInternalResponsesToolChoiceObjectFunction(element, options); - case "file_search": - return InternalResponsesToolChoiceObjectFileSearch.DeserializeInternalResponsesToolChoiceObjectFileSearch(element, options); - case "web_search_preview": - return InternalResponsesToolChoiceObjectWebSearch.DeserializeInternalResponsesToolChoiceObjectWebSearch(element, options); - case "computer_use_preview": - return InternalResponsesToolChoiceObjectComputer.DeserializeInternalResponsesToolChoiceObjectComputer(element, options); - } - } - return InternalUnknownResponsesToolChoiceObject.DeserializeInternalUnknownResponsesToolChoiceObject(element, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObject)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesToolChoiceObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalResponsesToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesToolChoiceObject(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObject)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesToolChoiceObject internalResponsesToolChoiceObject) - { - if (internalResponsesToolChoiceObject == null) - { - return null; - } - return BinaryContent.Create(internalResponsesToolChoiceObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesToolChoiceObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesToolChoiceObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObject.cs b/src/Generated/Models/InternalResponsesToolChoiceObject.cs deleted file mode 100644 index 87a6f0a55..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObject.cs +++ /dev/null @@ -1,33 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal abstract partial class InternalResponsesToolChoiceObject - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected InternalResponsesToolChoiceObject(InternalResponsesToolChoiceObjectType @type) - { - Type = @type; - } - - internal InternalResponsesToolChoiceObject(InternalResponsesToolChoiceObjectType @type, IDictionary additionalBinaryDataProperties) - { - Type = @type; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - internal InternalResponsesToolChoiceObjectType Type { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObjectComputer.Serialization.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectComputer.Serialization.cs deleted file mode 100644 index a08566a04..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectComputer.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesToolChoiceObjectComputer : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectComputer)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalResponsesToolChoiceObjectComputer IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesToolChoiceObjectComputer)JsonModelCreateCore(ref reader, options); - - protected override InternalResponsesToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectComputer)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesToolChoiceObjectComputer(document.RootElement, options); - } - - internal static InternalResponsesToolChoiceObjectComputer DeserializeInternalResponsesToolChoiceObjectComputer(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolChoiceObjectType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolChoiceObjectType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesToolChoiceObjectComputer(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectComputer)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesToolChoiceObjectComputer IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesToolChoiceObjectComputer)PersistableModelCreateCore(data, options); - - protected override InternalResponsesToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesToolChoiceObjectComputer(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectComputer)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesToolChoiceObjectComputer internalResponsesToolChoiceObjectComputer) - { - if (internalResponsesToolChoiceObjectComputer == null) - { - return null; - } - return BinaryContent.Create(internalResponsesToolChoiceObjectComputer, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesToolChoiceObjectComputer(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesToolChoiceObjectComputer(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObjectComputer.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectComputer.cs deleted file mode 100644 index 2d90183c8..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectComputer.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesToolChoiceObjectComputer : InternalResponsesToolChoiceObject - { - public InternalResponsesToolChoiceObjectComputer() : base(InternalResponsesToolChoiceObjectType.Computer) - { - } - - internal InternalResponsesToolChoiceObjectComputer(InternalResponsesToolChoiceObjectType @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.Serialization.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.Serialization.cs deleted file mode 100644 index 43949e978..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesToolChoiceObjectFileSearch : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectFileSearch)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalResponsesToolChoiceObjectFileSearch IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesToolChoiceObjectFileSearch)JsonModelCreateCore(ref reader, options); - - protected override InternalResponsesToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectFileSearch)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesToolChoiceObjectFileSearch(document.RootElement, options); - } - - internal static InternalResponsesToolChoiceObjectFileSearch DeserializeInternalResponsesToolChoiceObjectFileSearch(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolChoiceObjectType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolChoiceObjectType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesToolChoiceObjectFileSearch(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectFileSearch)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesToolChoiceObjectFileSearch IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesToolChoiceObjectFileSearch)PersistableModelCreateCore(data, options); - - protected override InternalResponsesToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesToolChoiceObjectFileSearch(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectFileSearch)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesToolChoiceObjectFileSearch internalResponsesToolChoiceObjectFileSearch) - { - if (internalResponsesToolChoiceObjectFileSearch == null) - { - return null; - } - return BinaryContent.Create(internalResponsesToolChoiceObjectFileSearch, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesToolChoiceObjectFileSearch(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesToolChoiceObjectFileSearch(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.cs deleted file mode 100644 index a52643b75..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectFileSearch.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesToolChoiceObjectFileSearch : InternalResponsesToolChoiceObject - { - public InternalResponsesToolChoiceObjectFileSearch() : base(InternalResponsesToolChoiceObjectType.FileSearch) - { - } - - internal InternalResponsesToolChoiceObjectFileSearch(InternalResponsesToolChoiceObjectType @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObjectFunction.Serialization.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectFunction.Serialization.cs deleted file mode 100644 index f5bc26bee..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectFunction.Serialization.cs +++ /dev/null @@ -1,130 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesToolChoiceObjectFunction : IJsonModel - { - internal InternalResponsesToolChoiceObjectFunction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectFunction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("name") != true) - { - writer.WritePropertyName("name"u8); - writer.WriteStringValue(Name); - } - } - - InternalResponsesToolChoiceObjectFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesToolChoiceObjectFunction)JsonModelCreateCore(ref reader, options); - - protected override InternalResponsesToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectFunction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesToolChoiceObjectFunction(document.RootElement, options); - } - - internal static InternalResponsesToolChoiceObjectFunction DeserializeInternalResponsesToolChoiceObjectFunction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolChoiceObjectType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string name = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolChoiceObjectType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("name"u8)) - { - name = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesToolChoiceObjectFunction(@type, additionalBinaryDataProperties, name); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectFunction)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesToolChoiceObjectFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesToolChoiceObjectFunction)PersistableModelCreateCore(data, options); - - protected override InternalResponsesToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesToolChoiceObjectFunction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectFunction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesToolChoiceObjectFunction internalResponsesToolChoiceObjectFunction) - { - if (internalResponsesToolChoiceObjectFunction == null) - { - return null; - } - return BinaryContent.Create(internalResponsesToolChoiceObjectFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesToolChoiceObjectFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesToolChoiceObjectFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObjectFunction.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectFunction.cs deleted file mode 100644 index 366bc4408..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectFunction.cs +++ /dev/null @@ -1,27 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesToolChoiceObjectFunction : InternalResponsesToolChoiceObject - { - public InternalResponsesToolChoiceObjectFunction(string name) : base(InternalResponsesToolChoiceObjectType.Function) - { - Argument.AssertNotNull(name, nameof(name)); - - Name = name; - } - - internal InternalResponsesToolChoiceObjectFunction(InternalResponsesToolChoiceObjectType @type, IDictionary additionalBinaryDataProperties, string name) : base(@type, additionalBinaryDataProperties) - { - Name = name; - } - - public string Name { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObjectType.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectType.cs deleted file mode 100644 index 5f4efd4de..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectType.cs +++ /dev/null @@ -1,50 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesToolChoiceObjectType : IEquatable - { - private readonly string _value; - private const string FunctionValue = "function"; - private const string FileSearchValue = "file_search"; - private const string WebSearchValue = "web_search_preview"; - private const string ComputerValue = "computer_use_preview"; - - public InternalResponsesToolChoiceObjectType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesToolChoiceObjectType Function { get; } = new InternalResponsesToolChoiceObjectType(FunctionValue); - - public static InternalResponsesToolChoiceObjectType FileSearch { get; } = new InternalResponsesToolChoiceObjectType(FileSearchValue); - - public static InternalResponsesToolChoiceObjectType WebSearch { get; } = new InternalResponsesToolChoiceObjectType(WebSearchValue); - - public static InternalResponsesToolChoiceObjectType Computer { get; } = new InternalResponsesToolChoiceObjectType(ComputerValue); - - public static bool operator ==(InternalResponsesToolChoiceObjectType left, InternalResponsesToolChoiceObjectType right) => left.Equals(right); - - public static bool operator !=(InternalResponsesToolChoiceObjectType left, InternalResponsesToolChoiceObjectType right) => !left.Equals(right); - - public static implicit operator InternalResponsesToolChoiceObjectType(string value) => new InternalResponsesToolChoiceObjectType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesToolChoiceObjectType other && Equals(other); - - public bool Equals(InternalResponsesToolChoiceObjectType 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/InternalResponsesToolChoiceObjectWebSearch.Serialization.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.Serialization.cs deleted file mode 100644 index f3138056e..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesToolChoiceObjectWebSearch : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectWebSearch)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalResponsesToolChoiceObjectWebSearch IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesToolChoiceObjectWebSearch)JsonModelCreateCore(ref reader, options); - - protected override InternalResponsesToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectWebSearch)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesToolChoiceObjectWebSearch(document.RootElement, options); - } - - internal static InternalResponsesToolChoiceObjectWebSearch DeserializeInternalResponsesToolChoiceObjectWebSearch(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolChoiceObjectType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolChoiceObjectType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesToolChoiceObjectWebSearch(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectWebSearch)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesToolChoiceObjectWebSearch IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesToolChoiceObjectWebSearch)PersistableModelCreateCore(data, options); - - protected override InternalResponsesToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesToolChoiceObjectWebSearch(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObjectWebSearch)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesToolChoiceObjectWebSearch internalResponsesToolChoiceObjectWebSearch) - { - if (internalResponsesToolChoiceObjectWebSearch == null) - { - return null; - } - return BinaryContent.Create(internalResponsesToolChoiceObjectWebSearch, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesToolChoiceObjectWebSearch(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesToolChoiceObjectWebSearch(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.cs b/src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.cs deleted file mode 100644 index 405863e56..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceObjectWebSearch.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesToolChoiceObjectWebSearch : InternalResponsesToolChoiceObject - { - public InternalResponsesToolChoiceObjectWebSearch() : base(InternalResponsesToolChoiceObjectType.WebSearch) - { - } - - internal InternalResponsesToolChoiceObjectWebSearch(InternalResponsesToolChoiceObjectType @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalResponsesToolChoiceOption.cs b/src/Generated/Models/InternalResponsesToolChoiceOption.cs deleted file mode 100644 index cb38a66df..000000000 --- a/src/Generated/Models/InternalResponsesToolChoiceOption.cs +++ /dev/null @@ -1,47 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesToolChoiceOption : IEquatable - { - private readonly string _value; - private const string NoneValue = "none"; - private const string AutoValue = "auto"; - private const string RequiredValue = "required"; - - public InternalResponsesToolChoiceOption(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesToolChoiceOption None { get; } = new InternalResponsesToolChoiceOption(NoneValue); - - public static InternalResponsesToolChoiceOption Auto { get; } = new InternalResponsesToolChoiceOption(AutoValue); - - public static InternalResponsesToolChoiceOption Required { get; } = new InternalResponsesToolChoiceOption(RequiredValue); - - public static bool operator ==(InternalResponsesToolChoiceOption left, InternalResponsesToolChoiceOption right) => left.Equals(right); - - public static bool operator !=(InternalResponsesToolChoiceOption left, InternalResponsesToolChoiceOption right) => !left.Equals(right); - - public static implicit operator InternalResponsesToolChoiceOption(string value) => new InternalResponsesToolChoiceOption(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesToolChoiceOption other && Equals(other); - - public bool Equals(InternalResponsesToolChoiceOption 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/InternalResponsesToolType.cs b/src/Generated/Models/InternalResponsesToolType.cs deleted file mode 100644 index 9cc3bf6a2..000000000 --- a/src/Generated/Models/InternalResponsesToolType.cs +++ /dev/null @@ -1,50 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - internal readonly partial struct InternalResponsesToolType : IEquatable - { - private readonly string _value; - private const string FunctionValue = "function"; - private const string FileSearchValue = "file_search"; - private const string WebSearchValue = "web_search_preview"; - private const string ComputerValue = "computer_use_preview"; - - public InternalResponsesToolType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalResponsesToolType Function { get; } = new InternalResponsesToolType(FunctionValue); - - public static InternalResponsesToolType FileSearch { get; } = new InternalResponsesToolType(FileSearchValue); - - public static InternalResponsesToolType WebSearch { get; } = new InternalResponsesToolType(WebSearchValue); - - public static InternalResponsesToolType Computer { get; } = new InternalResponsesToolType(ComputerValue); - - public static bool operator ==(InternalResponsesToolType left, InternalResponsesToolType right) => left.Equals(right); - - public static bool operator !=(InternalResponsesToolType left, InternalResponsesToolType right) => !left.Equals(right); - - public static implicit operator InternalResponsesToolType(string value) => new InternalResponsesToolType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalResponsesToolType other && Equals(other); - - public bool Equals(InternalResponsesToolType 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/InternalResponsesUserMessage.Serialization.cs b/src/Generated/Models/InternalResponsesUserMessage.Serialization.cs index 7699f6542..e3e3bd9a6 100644 --- a/src/Generated/Models/InternalResponsesUserMessage.Serialization.cs +++ b/src/Generated/Models/InternalResponsesUserMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalResponsesUserMessage : IJsonModel { - internal InternalResponsesUserMessage() + internal InternalResponsesUserMessage() : this(default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalResponsesUserMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesUserMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,17 +65,17 @@ internal static InternalResponsesUserMessage DeserializeInternalResponsesUserMes { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - MessageStatus? status = default; InternalResponsesMessageRole internalRole = default; + MessageStatus? status = default; IList internalContent = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -81,18 +83,14 @@ internal static InternalResponsesUserMessage DeserializeInternalResponsesUserMes id = prop.Value.GetString(); continue; } - if (prop.NameEquals("status"u8)) + if (prop.NameEquals("role"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - status = prop.Value.GetString().ToMessageStatus(); + internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); continue; } - if (prop.NameEquals("role"u8)) + if (prop.NameEquals("status"u8)) { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + status = prop.Value.GetString().ToMessageStatus(); continue; } if (prop.NameEquals("content"u8)) @@ -105,26 +103,28 @@ internal static InternalResponsesUserMessage DeserializeInternalResponsesUserMes internalContent = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalResponsesUserMessage( - @type, + kind, id, additionalBinaryDataProperties, - status, internalRole, + status, internalContent); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalResponsesUserMessage)} does not support writing '{options.Format}' format."); } @@ -132,6 +132,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalResponsesUserMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesUserMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -148,21 +149,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesUserMessage internalResponsesUserMessage) - { - if (internalResponsesUserMessage == null) - { - return null; - } - return BinaryContent.Create(internalResponsesUserMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesUserMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesUserMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalResponsesUserMessage.cs b/src/Generated/Models/InternalResponsesUserMessage.cs index cf6508bea..12a6eceba 100644 --- a/src/Generated/Models/InternalResponsesUserMessage.cs +++ b/src/Generated/Models/InternalResponsesUserMessage.cs @@ -11,16 +11,14 @@ namespace OpenAI.Responses { internal partial class InternalResponsesUserMessage : MessageResponseItem { - public InternalResponsesUserMessage(IEnumerable internalContent) : base(InternalResponsesMessageRole.User) + internal InternalResponsesUserMessage(string id, MessageStatus? status, IEnumerable internalContent) : base(id, InternalResponsesMessageRole.User, status) { - Argument.AssertNotNull(internalContent, nameof(internalContent)); - InternalContent = internalContent.ToList(); } - internal InternalResponsesUserMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, InternalResponsesMessageRole internalRole, IList internalContent) : base(@type, id, additionalBinaryDataProperties, status, internalRole) + internal InternalResponsesUserMessage(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole internalRole, MessageStatus? status, IList internalContent) : base(kind, id, additionalBinaryDataProperties, internalRole, status) { - // Plugin customization: ensure initialization of collection + // Plugin customization: ensure initialization of collections InternalContent = internalContent ?? new ChangeTrackingList(); } } diff --git a/src/Generated/Models/InternalResponsesUserMessageItemParam.Serialization.cs b/src/Generated/Models/InternalResponsesUserMessageItemParam.Serialization.cs new file mode 100644 index 000000000..fdc225160 --- /dev/null +++ b/src/Generated/Models/InternalResponsesUserMessageItemParam.Serialization.cs @@ -0,0 +1,135 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesUserMessageItemParam : IJsonModel + { + internal InternalResponsesUserMessageItemParam() : this(default, null, InternalResponsesMessageRole.User, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesUserMessageItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (ResponseContentPart item in Content) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + InternalResponsesUserMessageItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesUserMessageItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesUserMessageItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesUserMessageItemParam(document.RootElement, options); + } + + internal static InternalResponsesUserMessageItemParam DeserializeInternalResponsesUserMessageItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalResponsesMessageRole role = default; + IList content = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("role"u8)) + { + role = new InternalResponsesMessageRole(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("content"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ResponseContentPart.DeserializeResponseContentPart(item, options)); + } + content = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalResponsesUserMessageItemParam(kind, additionalBinaryDataProperties, role, content); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponsesUserMessageItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesUserMessageItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesUserMessageItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponsesUserMessageItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesUserMessageItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalResponsesUserMessageItemParam.cs b/src/Generated/Models/InternalResponsesUserMessageItemParam.cs new file mode 100644 index 000000000..e3e8d7ada --- /dev/null +++ b/src/Generated/Models/InternalResponsesUserMessageItemParam.cs @@ -0,0 +1,29 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalResponsesUserMessageItemParam : InternalResponsesMessageItemParam + { + public InternalResponsesUserMessageItemParam(IEnumerable content) : base(InternalResponsesMessageRole.User) + { + Argument.AssertNotNull(content, nameof(content)); + + Content = content.ToList(); + } + + internal InternalResponsesUserMessageItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole role, IList content) : base(kind, additionalBinaryDataProperties, role) + { + // Plugin customization: ensure initialization of collections + Content = content ?? new ChangeTrackingList(); + } + + public IList Content { get; } + } +} diff --git a/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.Serialization.cs b/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.Serialization.cs deleted file mode 100644 index f70ce13dd..000000000 --- a/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.Serialization.cs +++ /dev/null @@ -1,165 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesWebSearchApproximateLocation : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesWebSearchApproximateLocation)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(Country) && _additionalBinaryDataProperties?.ContainsKey("country") != true) - { - writer.WritePropertyName("country"u8); - writer.WriteStringValue(Country); - } - if (Optional.IsDefined(Region) && _additionalBinaryDataProperties?.ContainsKey("region") != true) - { - writer.WritePropertyName("region"u8); - writer.WriteStringValue(Region); - } - if (Optional.IsDefined(City) && _additionalBinaryDataProperties?.ContainsKey("city") != true) - { - writer.WritePropertyName("city"u8); - writer.WriteStringValue(City); - } - if (Optional.IsDefined(Timezone) && _additionalBinaryDataProperties?.ContainsKey("timezone") != true) - { - writer.WritePropertyName("timezone"u8); - writer.WriteStringValue(Timezone); - } - } - - InternalResponsesWebSearchApproximateLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesWebSearchApproximateLocation)JsonModelCreateCore(ref reader, options); - - protected override WebSearchToolLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesWebSearchApproximateLocation)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesWebSearchApproximateLocation(document.RootElement, options); - } - - internal static InternalResponsesWebSearchApproximateLocation DeserializeInternalResponsesWebSearchApproximateLocation(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "approximate"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string country = default; - string region = default; - string city = default; - string timezone = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("country"u8)) - { - country = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("region"u8)) - { - region = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("city"u8)) - { - city = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("timezone"u8)) - { - timezone = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesWebSearchApproximateLocation( - @type, - additionalBinaryDataProperties, - country, - region, - city, - timezone); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesWebSearchApproximateLocation)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesWebSearchApproximateLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesWebSearchApproximateLocation)PersistableModelCreateCore(data, options); - - protected override WebSearchToolLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesWebSearchApproximateLocation(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesWebSearchApproximateLocation)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesWebSearchApproximateLocation internalResponsesWebSearchApproximateLocation) - { - if (internalResponsesWebSearchApproximateLocation == null) - { - return null; - } - return BinaryContent.Create(internalResponsesWebSearchApproximateLocation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesWebSearchApproximateLocation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesWebSearchApproximateLocation(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.cs b/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.cs deleted file mode 100644 index 68609630b..000000000 --- a/src/Generated/Models/InternalResponsesWebSearchApproximateLocation.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesWebSearchApproximateLocation : WebSearchToolLocation - { - public InternalResponsesWebSearchApproximateLocation() - { - } - - internal InternalResponsesWebSearchApproximateLocation(string @type, IDictionary additionalBinaryDataProperties, string country, string region, string city, string timezone) : base(@type, additionalBinaryDataProperties) - { - Country = country; - Region = region; - City = city; - Timezone = timezone; - } - - public string Country { get; set; } - - public string Region { get; set; } - - public string City { get; set; } - - public string Timezone { get; set; } - } -} diff --git a/src/Generated/Models/InternalResponsesWebSearchTool.Serialization.cs b/src/Generated/Models/InternalResponsesWebSearchTool.Serialization.cs deleted file mode 100644 index a5de85eac..000000000 --- a/src/Generated/Models/InternalResponsesWebSearchTool.Serialization.cs +++ /dev/null @@ -1,145 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesWebSearchTool : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesWebSearchTool)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(UserLocation) && _additionalBinaryDataProperties?.ContainsKey("user_location") != true) - { - writer.WritePropertyName("user_location"u8); - writer.WriteObjectValue(UserLocation, options); - } - if (Optional.IsDefined(SearchContextSize) && _additionalBinaryDataProperties?.ContainsKey("search_context_size") != true) - { - writer.WritePropertyName("search_context_size"u8); - writer.WriteStringValue(SearchContextSize.Value.ToString()); - } - } - - InternalResponsesWebSearchTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalResponsesWebSearchTool)JsonModelCreateCore(ref reader, options); - - protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesWebSearchTool)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesWebSearchTool(document.RootElement, options); - } - - internal static InternalResponsesWebSearchTool DeserializeInternalResponsesWebSearchTool(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - WebSearchToolLocation userLocation = default; - WebSearchToolContextSize? searchContextSize = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("user_location"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - userLocation = WebSearchToolLocation.DeserializeWebSearchToolLocation(prop.Value, options); - continue; - } - if (prop.NameEquals("search_context_size"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - searchContextSize = new WebSearchToolContextSize(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalResponsesWebSearchTool(@type, additionalBinaryDataProperties, userLocation, searchContextSize); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesWebSearchTool)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesWebSearchTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalResponsesWebSearchTool)PersistableModelCreateCore(data, options); - - protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesWebSearchTool(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesWebSearchTool)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalResponsesWebSearchTool internalResponsesWebSearchTool) - { - if (internalResponsesWebSearchTool == null) - { - return null; - } - return BinaryContent.Create(internalResponsesWebSearchTool, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalResponsesWebSearchTool(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalResponsesWebSearchTool(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalResponsesWebSearchTool.cs b/src/Generated/Models/InternalResponsesWebSearchTool.cs deleted file mode 100644 index 83f625dc8..000000000 --- a/src/Generated/Models/InternalResponsesWebSearchTool.cs +++ /dev/null @@ -1,26 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalResponsesWebSearchTool : ResponseTool - { - public InternalResponsesWebSearchTool() : base(InternalResponsesToolType.WebSearch) - { - } - - internal InternalResponsesWebSearchTool(InternalResponsesToolType @type, IDictionary additionalBinaryDataProperties, WebSearchToolLocation userLocation, WebSearchToolContextSize? searchContextSize) : base(@type, additionalBinaryDataProperties) - { - UserLocation = userLocation; - SearchContextSize = searchContextSize; - } - - public WebSearchToolLocation UserLocation { get; set; } - - public WebSearchToolContextSize? SearchContextSize { get; set; } - } -} diff --git a/src/Generated/Models/InternalRunGraderRequest.Serialization.cs b/src/Generated/Models/InternalRunGraderRequest.Serialization.cs new file mode 100644 index 000000000..be7babcf7 --- /dev/null +++ b/src/Generated/Models/InternalRunGraderRequest.Serialization.cs @@ -0,0 +1,172 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalRunGraderRequest : IJsonModel + { + internal InternalRunGraderRequest() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRunGraderRequest)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("grader") != true) + { + writer.WritePropertyName("grader"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Grader); +#else + using (JsonDocument document = JsonDocument.Parse(Grader)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(Item) && _additionalBinaryDataProperties?.ContainsKey("item") != true) + { + writer.WritePropertyName("item"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Item); +#else + using (JsonDocument document = JsonDocument.Parse(Item)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("model_sample") != true) + { + writer.WritePropertyName("model_sample"u8); + writer.WriteStringValue(ModelSample); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRunGraderRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRunGraderRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRunGraderRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRunGraderRequest(document.RootElement, options); + } + + internal static InternalRunGraderRequest DeserializeInternalRunGraderRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData grader = default; + BinaryData item = default; + string modelSample = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("grader"u8)) + { + grader = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("item"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + item = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("model_sample"u8)) + { + modelSample = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRunGraderRequest(grader, item, modelSample, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRunGraderRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalRunGraderRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRunGraderRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRunGraderRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRunGraderRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRunGraderRequest.cs b/src/Generated/Models/InternalRunGraderRequest.cs new file mode 100644 index 000000000..59d5ab635 --- /dev/null +++ b/src/Generated/Models/InternalRunGraderRequest.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalRunGraderRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalRunGraderRequest(BinaryData grader, string modelSample) + { + Argument.AssertNotNull(grader, nameof(grader)); + Argument.AssertNotNull(modelSample, nameof(modelSample)); + + Grader = grader; + ModelSample = modelSample; + } + + internal InternalRunGraderRequest(BinaryData grader, BinaryData item, string modelSample, IDictionary additionalBinaryDataProperties) + { + Grader = grader; + Item = item; + ModelSample = modelSample; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public BinaryData Grader { get; } + + public BinaryData Item { get; set; } + + public string ModelSample { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRunGraderResponse.Serialization.cs b/src/Generated/Models/InternalRunGraderResponse.Serialization.cs new file mode 100644 index 000000000..918313bc7 --- /dev/null +++ b/src/Generated/Models/InternalRunGraderResponse.Serialization.cs @@ -0,0 +1,179 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalRunGraderResponse : IJsonModel + { + internal InternalRunGraderResponse() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRunGraderResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("reward") != true) + { + writer.WritePropertyName("reward"u8); + writer.WriteNumberValue(Reward); + } + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); + writer.WriteObjectValue(Metadata, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("sub_rewards") != true) + { + writer.WritePropertyName("sub_rewards"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(SubRewards); +#else + using (JsonDocument document = JsonDocument.Parse(SubRewards)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("model_grader_token_usage_per_model") != true) + { + writer.WritePropertyName("model_grader_token_usage_per_model"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(ModelGraderTokenUsagePerModel); +#else + using (JsonDocument document = JsonDocument.Parse(ModelGraderTokenUsagePerModel)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRunGraderResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRunGraderResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRunGraderResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRunGraderResponse(document.RootElement, options); + } + + internal static InternalRunGraderResponse DeserializeInternalRunGraderResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + float reward = default; + InternalRunGraderResponseMetadata metadata = default; + BinaryData subRewards = default; + BinaryData modelGraderTokenUsagePerModel = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("reward"u8)) + { + reward = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + metadata = InternalRunGraderResponseMetadata.DeserializeInternalRunGraderResponseMetadata(prop.Value, options); + continue; + } + if (prop.NameEquals("sub_rewards"u8)) + { + subRewards = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("model_grader_token_usage_per_model"u8)) + { + modelGraderTokenUsagePerModel = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRunGraderResponse(reward, metadata, subRewards, modelGraderTokenUsagePerModel, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRunGraderResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalRunGraderResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRunGraderResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRunGraderResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRunGraderResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRunGraderResponse.cs b/src/Generated/Models/InternalRunGraderResponse.cs new file mode 100644 index 000000000..72dc93a4b --- /dev/null +++ b/src/Generated/Models/InternalRunGraderResponse.cs @@ -0,0 +1,45 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Graders +{ + internal partial class InternalRunGraderResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRunGraderResponse(float reward, InternalRunGraderResponseMetadata metadata, BinaryData subRewards, BinaryData modelGraderTokenUsagePerModel) + { + Reward = reward; + Metadata = metadata; + SubRewards = subRewards; + ModelGraderTokenUsagePerModel = modelGraderTokenUsagePerModel; + } + + internal InternalRunGraderResponse(float reward, InternalRunGraderResponseMetadata metadata, BinaryData subRewards, BinaryData modelGraderTokenUsagePerModel, IDictionary additionalBinaryDataProperties) + { + Reward = reward; + Metadata = metadata; + SubRewards = subRewards; + ModelGraderTokenUsagePerModel = modelGraderTokenUsagePerModel; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public float Reward { get; } + + internal InternalRunGraderResponseMetadata Metadata { get; } + + public BinaryData SubRewards { get; } + + public BinaryData ModelGraderTokenUsagePerModel { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRunGraderResponseMetadata.Serialization.cs b/src/Generated/Models/InternalRunGraderResponseMetadata.Serialization.cs new file mode 100644 index 000000000..38c39c000 --- /dev/null +++ b/src/Generated/Models/InternalRunGraderResponseMetadata.Serialization.cs @@ -0,0 +1,237 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalRunGraderResponseMetadata : IJsonModel + { + internal InternalRunGraderResponseMetadata() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRunGraderResponseMetadata)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("errors") != true) + { + writer.WritePropertyName("errors"u8); + writer.WriteObjectValue(Errors, options); + } + if (_additionalBinaryDataProperties?.ContainsKey("execution_time") != true) + { + writer.WritePropertyName("execution_time"u8); + writer.WriteNumberValue(ExecutionTime); + } + if (_additionalBinaryDataProperties?.ContainsKey("scores") != true) + { + writer.WritePropertyName("scores"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Scores); +#else + using (JsonDocument document = JsonDocument.Parse(Scores)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (_additionalBinaryDataProperties?.ContainsKey("token_usage") != true) + { + if (Optional.IsDefined(TokenUsage)) + { + writer.WritePropertyName("token_usage"u8); + writer.WriteNumberValue(TokenUsage.Value); + } + else + { + writer.WriteNull("token_usage"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("sampled_model_name") != true) + { + if (Optional.IsDefined(SampledModelName)) + { + writer.WritePropertyName("sampled_model_name"u8); + writer.WriteStringValue(SampledModelName); + } + else + { + writer.WriteNull("sampled_model_name"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRunGraderResponseMetadata IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRunGraderResponseMetadata JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRunGraderResponseMetadata)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRunGraderResponseMetadata(document.RootElement, options); + } + + internal static InternalRunGraderResponseMetadata DeserializeInternalRunGraderResponseMetadata(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string name = default; + string kind = default; + InternalRunGraderResponseMetadataErrors errors = default; + float executionTime = default; + BinaryData scores = default; + int? tokenUsage = default; + string sampledModelName = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("errors"u8)) + { + errors = InternalRunGraderResponseMetadataErrors.DeserializeInternalRunGraderResponseMetadataErrors(prop.Value, options); + continue; + } + if (prop.NameEquals("execution_time"u8)) + { + executionTime = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("scores"u8)) + { + scores = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("token_usage"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + tokenUsage = null; + continue; + } + tokenUsage = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("sampled_model_name"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + sampledModelName = null; + continue; + } + sampledModelName = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRunGraderResponseMetadata( + name, + kind, + errors, + executionTime, + scores, + tokenUsage, + sampledModelName, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRunGraderResponseMetadata)} does not support writing '{options.Format}' format."); + } + } + + InternalRunGraderResponseMetadata IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRunGraderResponseMetadata PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRunGraderResponseMetadata(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRunGraderResponseMetadata)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRunGraderResponseMetadata.cs b/src/Generated/Models/InternalRunGraderResponseMetadata.cs new file mode 100644 index 000000000..375561c9c --- /dev/null +++ b/src/Generated/Models/InternalRunGraderResponseMetadata.cs @@ -0,0 +1,57 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Graders +{ + internal partial class InternalRunGraderResponseMetadata + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRunGraderResponseMetadata(string name, string kind, InternalRunGraderResponseMetadataErrors errors, float executionTime, BinaryData scores, int? tokenUsage, string sampledModelName) + { + Name = name; + Kind = kind; + Errors = errors; + ExecutionTime = executionTime; + Scores = scores; + TokenUsage = tokenUsage; + SampledModelName = sampledModelName; + } + + internal InternalRunGraderResponseMetadata(string name, string kind, InternalRunGraderResponseMetadataErrors errors, float executionTime, BinaryData scores, int? tokenUsage, string sampledModelName, IDictionary additionalBinaryDataProperties) + { + Name = name; + Kind = kind; + Errors = errors; + ExecutionTime = executionTime; + Scores = scores; + TokenUsage = tokenUsage; + SampledModelName = sampledModelName; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Name { get; } + + public string Kind { get; } + + internal InternalRunGraderResponseMetadataErrors Errors { get; } + + public float ExecutionTime { get; } + + public BinaryData Scores { get; } + + public int? TokenUsage { get; } + + public string SampledModelName { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRunGraderResponseMetadataErrors.Serialization.cs b/src/Generated/Models/InternalRunGraderResponseMetadataErrors.Serialization.cs new file mode 100644 index 000000000..cc582168f --- /dev/null +++ b/src/Generated/Models/InternalRunGraderResponseMetadataErrors.Serialization.cs @@ -0,0 +1,326 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalRunGraderResponseMetadataErrors : IJsonModel + { + internal InternalRunGraderResponseMetadataErrors() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRunGraderResponseMetadataErrors)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("formula_parse_error") != true) + { + writer.WritePropertyName("formula_parse_error"u8); + writer.WriteBooleanValue(FormulaParseError); + } + if (_additionalBinaryDataProperties?.ContainsKey("sample_parse_error") != true) + { + writer.WritePropertyName("sample_parse_error"u8); + writer.WriteBooleanValue(SampleParseError); + } + if (_additionalBinaryDataProperties?.ContainsKey("truncated_observation_error") != true) + { + writer.WritePropertyName("truncated_observation_error"u8); + writer.WriteBooleanValue(TruncatedObservationError); + } + if (_additionalBinaryDataProperties?.ContainsKey("unresponsive_reward_error") != true) + { + writer.WritePropertyName("unresponsive_reward_error"u8); + writer.WriteBooleanValue(UnresponsiveRewardError); + } + if (_additionalBinaryDataProperties?.ContainsKey("invalid_variable_error") != true) + { + writer.WritePropertyName("invalid_variable_error"u8); + writer.WriteBooleanValue(InvalidVariableError); + } + if (_additionalBinaryDataProperties?.ContainsKey("other_error") != true) + { + writer.WritePropertyName("other_error"u8); + writer.WriteBooleanValue(OtherError); + } + if (_additionalBinaryDataProperties?.ContainsKey("python_grader_server_error") != true) + { + writer.WritePropertyName("python_grader_server_error"u8); + writer.WriteBooleanValue(PythonGraderServerError); + } + if (_additionalBinaryDataProperties?.ContainsKey("python_grader_server_error_type") != true) + { + if (Optional.IsDefined(PythonGraderServerErrorType)) + { + writer.WritePropertyName("python_grader_server_error_type"u8); + writer.WriteStringValue(PythonGraderServerErrorType); + } + else + { + writer.WriteNull("python_grader_server_error_type"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("python_grader_runtime_error") != true) + { + writer.WritePropertyName("python_grader_runtime_error"u8); + writer.WriteBooleanValue(PythonGraderRuntimeError); + } + if (_additionalBinaryDataProperties?.ContainsKey("python_grader_runtime_error_details") != true) + { + if (Optional.IsDefined(PythonGraderRuntimeErrorDetails)) + { + writer.WritePropertyName("python_grader_runtime_error_details"u8); + writer.WriteStringValue(PythonGraderRuntimeErrorDetails); + } + else + { + writer.WriteNull("python_grader_runtime_error_details"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("model_grader_server_error") != true) + { + writer.WritePropertyName("model_grader_server_error"u8); + writer.WriteBooleanValue(ModelGraderServerError); + } + if (_additionalBinaryDataProperties?.ContainsKey("model_grader_refusal_error") != true) + { + writer.WritePropertyName("model_grader_refusal_error"u8); + writer.WriteBooleanValue(ModelGraderRefusalError); + } + if (_additionalBinaryDataProperties?.ContainsKey("model_grader_parse_error") != true) + { + writer.WritePropertyName("model_grader_parse_error"u8); + writer.WriteBooleanValue(ModelGraderParseError); + } + if (_additionalBinaryDataProperties?.ContainsKey("model_grader_server_error_details") != true) + { + if (Optional.IsDefined(ModelGraderServerErrorDetails)) + { + writer.WritePropertyName("model_grader_server_error_details"u8); + writer.WriteStringValue(ModelGraderServerErrorDetails); + } + else + { + writer.WriteNull("model_grader_server_error_details"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalRunGraderResponseMetadataErrors IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalRunGraderResponseMetadataErrors JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalRunGraderResponseMetadataErrors)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalRunGraderResponseMetadataErrors(document.RootElement, options); + } + + internal static InternalRunGraderResponseMetadataErrors DeserializeInternalRunGraderResponseMetadataErrors(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + bool formulaParseError = default; + bool sampleParseError = default; + bool truncatedObservationError = default; + bool unresponsiveRewardError = default; + bool invalidVariableError = default; + bool otherError = default; + bool pythonGraderServerError = default; + string pythonGraderServerErrorType = default; + bool pythonGraderRuntimeError = default; + string pythonGraderRuntimeErrorDetails = default; + bool modelGraderServerError = default; + bool modelGraderRefusalError = default; + bool modelGraderParseError = default; + string modelGraderServerErrorDetails = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("formula_parse_error"u8)) + { + formulaParseError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("sample_parse_error"u8)) + { + sampleParseError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("truncated_observation_error"u8)) + { + truncatedObservationError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("unresponsive_reward_error"u8)) + { + unresponsiveRewardError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("invalid_variable_error"u8)) + { + invalidVariableError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("other_error"u8)) + { + otherError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("python_grader_server_error"u8)) + { + pythonGraderServerError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("python_grader_server_error_type"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + pythonGraderServerErrorType = null; + continue; + } + pythonGraderServerErrorType = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("python_grader_runtime_error"u8)) + { + pythonGraderRuntimeError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("python_grader_runtime_error_details"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + pythonGraderRuntimeErrorDetails = null; + continue; + } + pythonGraderRuntimeErrorDetails = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("model_grader_server_error"u8)) + { + modelGraderServerError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("model_grader_refusal_error"u8)) + { + modelGraderRefusalError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("model_grader_parse_error"u8)) + { + modelGraderParseError = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("model_grader_server_error_details"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + modelGraderServerErrorDetails = null; + continue; + } + modelGraderServerErrorDetails = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalRunGraderResponseMetadataErrors( + formulaParseError, + sampleParseError, + truncatedObservationError, + unresponsiveRewardError, + invalidVariableError, + otherError, + pythonGraderServerError, + pythonGraderServerErrorType, + pythonGraderRuntimeError, + pythonGraderRuntimeErrorDetails, + modelGraderServerError, + modelGraderRefusalError, + modelGraderParseError, + modelGraderServerErrorDetails, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalRunGraderResponseMetadataErrors)} does not support writing '{options.Format}' format."); + } + } + + InternalRunGraderResponseMetadataErrors IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalRunGraderResponseMetadataErrors PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalRunGraderResponseMetadataErrors(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalRunGraderResponseMetadataErrors)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalRunGraderResponseMetadataErrors.cs b/src/Generated/Models/InternalRunGraderResponseMetadataErrors.cs new file mode 100644 index 000000000..8819c6a62 --- /dev/null +++ b/src/Generated/Models/InternalRunGraderResponseMetadataErrors.cs @@ -0,0 +1,85 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Graders +{ + internal partial class InternalRunGraderResponseMetadataErrors + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalRunGraderResponseMetadataErrors(bool formulaParseError, bool sampleParseError, bool truncatedObservationError, bool unresponsiveRewardError, bool invalidVariableError, bool otherError, bool pythonGraderServerError, string pythonGraderServerErrorType, bool pythonGraderRuntimeError, string pythonGraderRuntimeErrorDetails, bool modelGraderServerError, bool modelGraderRefusalError, bool modelGraderParseError, string modelGraderServerErrorDetails) + { + FormulaParseError = formulaParseError; + SampleParseError = sampleParseError; + TruncatedObservationError = truncatedObservationError; + UnresponsiveRewardError = unresponsiveRewardError; + InvalidVariableError = invalidVariableError; + OtherError = otherError; + PythonGraderServerError = pythonGraderServerError; + PythonGraderServerErrorType = pythonGraderServerErrorType; + PythonGraderRuntimeError = pythonGraderRuntimeError; + PythonGraderRuntimeErrorDetails = pythonGraderRuntimeErrorDetails; + ModelGraderServerError = modelGraderServerError; + ModelGraderRefusalError = modelGraderRefusalError; + ModelGraderParseError = modelGraderParseError; + ModelGraderServerErrorDetails = modelGraderServerErrorDetails; + } + + internal InternalRunGraderResponseMetadataErrors(bool formulaParseError, bool sampleParseError, bool truncatedObservationError, bool unresponsiveRewardError, bool invalidVariableError, bool otherError, bool pythonGraderServerError, string pythonGraderServerErrorType, bool pythonGraderRuntimeError, string pythonGraderRuntimeErrorDetails, bool modelGraderServerError, bool modelGraderRefusalError, bool modelGraderParseError, string modelGraderServerErrorDetails, IDictionary additionalBinaryDataProperties) + { + FormulaParseError = formulaParseError; + SampleParseError = sampleParseError; + TruncatedObservationError = truncatedObservationError; + UnresponsiveRewardError = unresponsiveRewardError; + InvalidVariableError = invalidVariableError; + OtherError = otherError; + PythonGraderServerError = pythonGraderServerError; + PythonGraderServerErrorType = pythonGraderServerErrorType; + PythonGraderRuntimeError = pythonGraderRuntimeError; + PythonGraderRuntimeErrorDetails = pythonGraderRuntimeErrorDetails; + ModelGraderServerError = modelGraderServerError; + ModelGraderRefusalError = modelGraderRefusalError; + ModelGraderParseError = modelGraderParseError; + ModelGraderServerErrorDetails = modelGraderServerErrorDetails; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public bool FormulaParseError { get; } + + public bool SampleParseError { get; } + + public bool TruncatedObservationError { get; } + + public bool UnresponsiveRewardError { get; } + + public bool InvalidVariableError { get; } + + public bool OtherError { get; } + + public bool PythonGraderServerError { get; } + + public string PythonGraderServerErrorType { get; } + + public bool PythonGraderRuntimeError { get; } + + public string PythonGraderRuntimeErrorDetails { get; } + + public bool ModelGraderServerError { get; } + + public bool ModelGraderRefusalError { get; } + + public bool ModelGraderParseError { get; } + + public string ModelGraderServerErrorDetails { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalRunObjectObject.cs b/src/Generated/Models/InternalRunObjectObject.cs deleted file mode 100644 index f4488c922..000000000 --- a/src/Generated/Models/InternalRunObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalRunObjectObject : IEquatable - { - private readonly string _value; - private const string ThreadRunValue = "thread.run"; - - public InternalRunObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRunObjectObject ThreadRun { get; } = new InternalRunObjectObject(ThreadRunValue); - - public static bool operator ==(InternalRunObjectObject left, InternalRunObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalRunObjectObject left, InternalRunObjectObject right) => !left.Equals(right); - - public static implicit operator InternalRunObjectObject(string value) => new InternalRunObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRunObjectObject other && Equals(other); - - public bool Equals(InternalRunObjectObject 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/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs index 46539bda9..56b81c720 100644 --- a/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs +++ b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8Json writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,6 +28,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRunObjectRequiredActionSubmitToolOutputs)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("tool_calls") != true) { writer.WritePropertyName("tool_calls"u8); @@ -37,6 +39,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +63,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunObjectRequiredActionSubmitToolOutputs IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunObjectRequiredActionSubmitToolOutputs JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -91,6 +95,7 @@ internal static InternalRunObjectRequiredActionSubmitToolOutputs DeserializeInte toolCalls = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunObjectRequiredActionSubmitToolOutputs(toolCalls, additionalBinaryDataProperties); @@ -98,13 +103,14 @@ internal static InternalRunObjectRequiredActionSubmitToolOutputs DeserializeInte BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunObjectRequiredActionSubmitToolOutputs)} does not support writing '{options.Format}' format."); } @@ -112,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunObjectRequiredActionSubmitToolOutputs IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunObjectRequiredActionSubmitToolOutputs PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -128,21 +135,5 @@ protected virtual InternalRunObjectRequiredActionSubmitToolOutputs PersistableMo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunObjectRequiredActionSubmitToolOutputs internalRunObjectRequiredActionSubmitToolOutputs) - { - if (internalRunObjectRequiredActionSubmitToolOutputs == null) - { - return null; - } - return BinaryContent.Create(internalRunObjectRequiredActionSubmitToolOutputs, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunObjectRequiredActionSubmitToolOutputs(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunObjectRequiredActionSubmitToolOutputs(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.cs b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.cs index ea44705be..33bfcae49 100644 --- a/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.cs +++ b/src/Generated/Models/InternalRunObjectRequiredActionSubmitToolOutputs.cs @@ -12,18 +12,18 @@ internal partial class InternalRunObjectRequiredActionSubmitToolOutputs { private protected IDictionary _additionalBinaryDataProperties; - internal InternalRunObjectRequiredActionSubmitToolOutputs() + internal InternalRunObjectRequiredActionSubmitToolOutputs() : this(null, null) { - ToolCalls = new ChangeTrackingList(); } internal InternalRunObjectRequiredActionSubmitToolOutputs(IReadOnlyList toolCalls, IDictionary additionalBinaryDataProperties) { - ToolCalls = toolCalls; + // Plugin customization: ensure initialization of collections + ToolCalls = toolCalls ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public IReadOnlyList ToolCalls { get; } + internal IReadOnlyList ToolCalls { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalRunObjectRequiredActionType.cs b/src/Generated/Models/InternalRunObjectRequiredActionType.cs deleted file mode 100644 index d5c50136a..000000000 --- a/src/Generated/Models/InternalRunObjectRequiredActionType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalRunObjectRequiredActionType : IEquatable - { - private readonly string _value; - private const string SubmitToolOutputsValue = "submit_tool_outputs"; - - public InternalRunObjectRequiredActionType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRunObjectRequiredActionType SubmitToolOutputs { get; } = new InternalRunObjectRequiredActionType(SubmitToolOutputsValue); - - public static bool operator ==(InternalRunObjectRequiredActionType left, InternalRunObjectRequiredActionType right) => left.Equals(right); - - public static bool operator !=(InternalRunObjectRequiredActionType left, InternalRunObjectRequiredActionType right) => !left.Equals(right); - - public static implicit operator InternalRunObjectRequiredActionType(string value) => new InternalRunObjectRequiredActionType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRunObjectRequiredActionType other && Equals(other); - - public bool Equals(InternalRunObjectRequiredActionType 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/InternalRunRequiredAction.Serialization.cs b/src/Generated/Models/InternalRunRequiredAction.Serialization.cs index df0e0a0f2..2e811a10d 100644 --- a/src/Generated/Models/InternalRunRequiredAction.Serialization.cs +++ b/src/Generated/Models/InternalRunRequiredAction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -31,6 +32,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRunRequiredAction)} does not support writing '{format}' format."); } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } if (_additionalBinaryDataProperties?.ContainsKey("submit_tool_outputs") != true) { writer.WritePropertyName("submit_tool_outputs"u8); @@ -41,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteObjectValue(Type, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunRequiredAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunRequiredAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,11 +89,17 @@ internal static InternalRunRequiredAction DeserializeInternalRunRequiredAction(J { return null; } + string kind = default; InternalRunObjectRequiredActionSubmitToolOutputs submitToolOutputs = default; object @type = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } if (prop.NameEquals("submit_tool_outputs"u8)) { submitToolOutputs = InternalRunObjectRequiredActionSubmitToolOutputs.DeserializeInternalRunObjectRequiredActionSubmitToolOutputs(prop.Value, options); @@ -96,20 +110,22 @@ internal static InternalRunRequiredAction DeserializeInternalRunRequiredAction(J @type = prop.Value.GetObject(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunRequiredAction(submitToolOutputs, @type, additionalBinaryDataProperties); + return new InternalRunRequiredAction(kind, submitToolOutputs, @type, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunRequiredAction)} does not support writing '{options.Format}' format."); } @@ -117,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunRequiredAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunRequiredAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +150,5 @@ protected virtual InternalRunRequiredAction PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunRequiredAction internalRunRequiredAction) - { - if (internalRunRequiredAction == null) - { - return null; - } - return BinaryContent.Create(internalRunRequiredAction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunRequiredAction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunRequiredAction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunRequiredAction.cs b/src/Generated/Models/InternalRunRequiredAction.cs index ea41c0060..ade40077b 100644 --- a/src/Generated/Models/InternalRunRequiredAction.cs +++ b/src/Generated/Models/InternalRunRequiredAction.cs @@ -16,14 +16,17 @@ internal InternalRunRequiredAction(InternalRunObjectRequiredActionSubmitToolOutp SubmitToolOutputs = submitToolOutputs; } - internal InternalRunRequiredAction(InternalRunObjectRequiredActionSubmitToolOutputs submitToolOutputs, object @type, IDictionary additionalBinaryDataProperties) + internal InternalRunRequiredAction(string kind, InternalRunObjectRequiredActionSubmitToolOutputs submitToolOutputs, object @type, IDictionary additionalBinaryDataProperties) { + Kind = kind; SubmitToolOutputs = submitToolOutputs; Type = @type; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalRunObjectRequiredActionSubmitToolOutputs SubmitToolOutputs { get; } + public string Kind { get; } = "submit_tool_outputs"; + + internal InternalRunObjectRequiredActionSubmitToolOutputs SubmitToolOutputs { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs b/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs index 5b85bda72..8511246d7 100644 --- a/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs +++ b/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepCodeInterpreterLogOutput : IJsonModel { - internal InternalRunStepCodeInterpreterLogOutput() + internal InternalRunStepCodeInterpreterLogOutput() : this(InternalRunStepDetailsCodeInterpreterOutputType.Logs, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepCodeInterpreterLogOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepCodeInterpreterLogOutput)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,14 @@ internal static InternalRunStepCodeInterpreterLogOutput DeserializeInternalRunSt { return null; } - string @type = "logs"; + InternalRunStepDetailsCodeInterpreterOutputType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string internalLogs = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsCodeInterpreterOutputType(prop.Value.GetString()); continue; } if (prop.NameEquals("logs"u8)) @@ -73,20 +75,22 @@ internal static InternalRunStepCodeInterpreterLogOutput DeserializeInternalRunSt internalLogs = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepCodeInterpreterLogOutput(@type, additionalBinaryDataProperties, internalLogs); + return new InternalRunStepCodeInterpreterLogOutput(kind, additionalBinaryDataProperties, internalLogs); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepCodeInterpreterLogOutput)} does not support writing '{options.Format}' format."); } @@ -94,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepCodeInterpreterLogOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepCodeInterpreterLogOutput)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +115,5 @@ protected override RunStepCodeInterpreterOutput PersistableModelCreateCore(Binar } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepCodeInterpreterLogOutput internalRunStepCodeInterpreterLogOutput) - { - if (internalRunStepCodeInterpreterLogOutput == null) - { - return null; - } - return BinaryContent.Create(internalRunStepCodeInterpreterLogOutput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepCodeInterpreterLogOutput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepCodeInterpreterLogOutput(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.cs b/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.cs index 20134cd52..efbdb14ed 100644 --- a/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.cs +++ b/src/Generated/Models/InternalRunStepCodeInterpreterLogOutput.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepCodeInterpreterLogOutput : RunStepCodeInterpreterOutput { - internal InternalRunStepCodeInterpreterLogOutput(string internalLogs) : base("logs") + internal InternalRunStepCodeInterpreterLogOutput(string internalLogs) : base(InternalRunStepDetailsCodeInterpreterOutputType.Logs) { InternalLogs = internalLogs; } - internal InternalRunStepCodeInterpreterLogOutput(string @type, IDictionary additionalBinaryDataProperties, string internalLogs) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepCodeInterpreterLogOutput(InternalRunStepDetailsCodeInterpreterOutputType kind, IDictionary additionalBinaryDataProperties, string internalLogs) : base(kind, additionalBinaryDataProperties) { InternalLogs = internalLogs; } diff --git a/src/Generated/Models/InternalRunStepDelta.Serialization.cs b/src/Generated/Models/InternalRunStepDelta.Serialization.cs index 9afb4e72a..eaa59f793 100644 --- a/src/Generated/Models/InternalRunStepDelta.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDelta.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteObjectValue(Object, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDelta JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalRunStepDelta DeserializeInternalRunStepDelta(JsonElement @object = prop.Value.GetObject(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDelta(id, delta, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalRunStepDelta DeserializeInternalRunStepDelta(JsonElement BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDelta)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDelta PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalRunStepDelta PersistableModelCreateCore(BinaryData dat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDelta internalRunStepDelta) - { - if (internalRunStepDelta == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDelta, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDelta(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDelta(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDelta.cs b/src/Generated/Models/InternalRunStepDelta.cs index 828b44a5e..36bee9972 100644 --- a/src/Generated/Models/InternalRunStepDelta.cs +++ b/src/Generated/Models/InternalRunStepDelta.cs @@ -27,7 +27,7 @@ internal InternalRunStepDelta(string id, InternalRunStepDeltaObjectDelta delta, public string Id { get; } - public InternalRunStepDeltaObjectDelta Delta { get; } + internal InternalRunStepDeltaObjectDelta Delta { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs index 159a42b9d..2bda551fa 100644 --- a/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaObjectDelta.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("step_details"u8); writer.WriteObjectValue(StepDetails, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDeltaObjectDelta IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaObjectDelta JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalRunStepDeltaObjectDelta DeserializeInternalRunStepDeltaO stepDetails = InternalRunStepDeltaStepDetails.DeserializeInternalRunStepDeltaStepDetails(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaObjectDelta(stepDetails, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalRunStepDeltaObjectDelta DeserializeInternalRunStepDeltaO BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaObjectDelta)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaObjectDelta IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaObjectDelta PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalRunStepDeltaObjectDelta PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaObjectDelta internalRunStepDeltaObjectDelta) - { - if (internalRunStepDeltaObjectDelta == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaObjectDelta, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaObjectDelta(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaObjectDelta(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaObjectDelta.cs b/src/Generated/Models/InternalRunStepDeltaObjectDelta.cs index 127abc57c..cbcf61253 100644 --- a/src/Generated/Models/InternalRunStepDeltaObjectDelta.cs +++ b/src/Generated/Models/InternalRunStepDeltaObjectDelta.cs @@ -21,7 +21,7 @@ internal InternalRunStepDeltaObjectDelta(InternalRunStepDeltaStepDetails stepDet _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalRunStepDeltaStepDetails StepDetails { get; } + internal InternalRunStepDeltaStepDetails StepDetails { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalRunStepDeltaObjectObject.cs b/src/Generated/Models/InternalRunStepDeltaObjectObject.cs deleted file mode 100644 index 9e63f1475..000000000 --- a/src/Generated/Models/InternalRunStepDeltaObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalRunStepDeltaObjectObject : IEquatable - { - private readonly string _value; - private const string ThreadRunStepDeltaValue = "thread.run.step.delta"; - - public InternalRunStepDeltaObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRunStepDeltaObjectObject ThreadRunStepDelta { get; } = new InternalRunStepDeltaObjectObject(ThreadRunStepDeltaValue); - - public static bool operator ==(InternalRunStepDeltaObjectObject left, InternalRunStepDeltaObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalRunStepDeltaObjectObject left, InternalRunStepDeltaObjectObject right) => !left.Equals(right); - - public static implicit operator InternalRunStepDeltaObjectObject(string value) => new InternalRunStepDeltaObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRunStepDeltaObjectObject other && Equals(other); - - public bool Equals(InternalRunStepDeltaObjectObject 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/InternalRunStepDeltaStepDetails.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs index 427714c03..8bfce2a20 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetails.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDeltaStepDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -91,13 +94,14 @@ internal static InternalRunStepDeltaStepDetails DeserializeInternalRunStepDeltaS BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetails)} does not support writing '{options.Format}' format."); } @@ -105,6 +109,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +126,5 @@ protected virtual InternalRunStepDeltaStepDetails PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetails internalRunStepDeltaStepDetails) - { - if (internalRunStepDeltaStepDetails == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetails.cs b/src/Generated/Models/InternalRunStepDeltaStepDetails.cs index b1e8bee11..756a782b9 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetails.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetails.cs @@ -11,18 +11,18 @@ internal abstract partial class InternalRunStepDeltaStepDetails { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalRunStepDeltaStepDetails(string @type) + private protected InternalRunStepDeltaStepDetails(InternalRunStepDetailsType kind) { - Type = @type; + Kind = kind; } - internal InternalRunStepDeltaStepDetails(string @type, IDictionary additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetails(InternalRunStepDetailsType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalRunStepDetailsType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs index 64fb7e2c9..dae28e258 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8 writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetailsMessageCreationObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsMessageCreationObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -54,14 +56,14 @@ internal static InternalRunStepDeltaStepDetailsMessageCreationObject Deserialize { return null; } - string @type = "message_creation"; + InternalRunStepDetailsType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation messageCreation = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsType(prop.Value.GetString()); continue; } if (prop.NameEquals("message_creation"u8)) @@ -73,20 +75,22 @@ internal static InternalRunStepDeltaStepDetailsMessageCreationObject Deserialize messageCreation = InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.DeserializeInternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDeltaStepDetailsMessageCreationObject(@type, additionalBinaryDataProperties, messageCreation); + return new InternalRunStepDeltaStepDetailsMessageCreationObject(kind, additionalBinaryDataProperties, messageCreation); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsMessageCreationObject)} does not support writing '{options.Format}' format."); } @@ -94,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsMessageCreationObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsMessageCreationObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +115,5 @@ protected override InternalRunStepDeltaStepDetails PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsMessageCreationObject internalRunStepDeltaStepDetailsMessageCreationObject) - { - if (internalRunStepDeltaStepDetailsMessageCreationObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsMessageCreationObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsMessageCreationObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsMessageCreationObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.cs index 9faa536c5..954a35f73 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObject.cs @@ -9,15 +9,15 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsMessageCreationObject : InternalRunStepDeltaStepDetails { - internal InternalRunStepDeltaStepDetailsMessageCreationObject() : base("message_creation") + internal InternalRunStepDeltaStepDetailsMessageCreationObject() : this(InternalRunStepDetailsType.MessageCreation, null, null) { } - internal InternalRunStepDeltaStepDetailsMessageCreationObject(string @type, IDictionary additionalBinaryDataProperties, InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation messageCreation) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetailsMessageCreationObject(InternalRunStepDetailsType kind, IDictionary additionalBinaryDataProperties, InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation messageCreation) : base(kind, additionalBinaryDataProperties) { MessageCreation = messageCreation; } - public InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation MessageCreation { get; } + internal InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation MessageCreation { get; } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs index b9744c04e..e9f282d23 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message_id"u8); writer.WriteStringValue(MessageId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,6 +84,7 @@ internal static InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreat messageId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation(messageId, additionalBinaryDataProperties); @@ -88,13 +92,14 @@ internal static InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreat BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation)} does not support writing '{options.Format}' format."); } @@ -102,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,21 +124,5 @@ protected virtual InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation internalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation) - { - if (internalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsMessageCreationObjectMessageCreation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs index 2ef6c6192..6cd6ce822 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeObject : IJsonModel { - internal InternalRunStepDeltaStepDetailsToolCallsCodeObject() + internal InternalRunStepDeltaStepDetailsToolCallsCodeObject() : this(RunStepToolCallKind.CodeInterpreter, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Js writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetailsToolCallsCodeObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsCodeObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,7 +70,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeObject DeserializeIn { return null; } - string @type = "code_interpreter"; + RunStepToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; string id = default; @@ -77,7 +79,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeObject DeserializeIn { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } if (prop.NameEquals("index"u8)) @@ -99,20 +101,22 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeObject DeserializeIn codeInterpreter = InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDeltaStepDetailsToolCallsCodeObject(@type, additionalBinaryDataProperties, index, id, codeInterpreter); + return new InternalRunStepDeltaStepDetailsToolCallsCodeObject(kind, additionalBinaryDataProperties, index, id, codeInterpreter); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsCodeObject)} does not support writing '{options.Format}' format."); } @@ -120,6 +124,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsCodeObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsCodeObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -136,21 +141,5 @@ protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsCodeObject internalRunStepDeltaStepDetailsToolCallsCodeObject) - { - if (internalRunStepDeltaStepDetailsToolCallsCodeObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsCodeObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsCodeObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.cs index 232eaacc8..a9dbc42f8 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeObject : InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject { - internal InternalRunStepDeltaStepDetailsToolCallsCodeObject(int index) : base("code_interpreter") + internal InternalRunStepDeltaStepDetailsToolCallsCodeObject(int index) : base(RunStepToolCallKind.CodeInterpreter) { Index = index; } - internal InternalRunStepDeltaStepDetailsToolCallsCodeObject(string @type, IDictionary additionalBinaryDataProperties, int index, string id, InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetailsToolCallsCodeObject(RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, int index, string id, InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(kind, additionalBinaryDataProperties) { Index = index; Id = id; @@ -25,6 +25,6 @@ internal InternalRunStepDeltaStepDetailsToolCallsCodeObject(string @type, IDicti public string Id { get; } - public InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter CodeInterpreter { get; } + internal InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter CodeInterpreter { get; } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs index f5197ba8b..4dc4a8758 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("input"u8); writer.WriteStringValue(Input); } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(Outputs) && _additionalBinaryDataProperties?.ContainsKey("outputs") != true) { writer.WritePropertyName("outputs"u8); @@ -42,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +68,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -106,6 +110,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterprete outputs = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter(input, outputs ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -113,13 +118,14 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterprete BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter)} does not support writing '{options.Format}' format."); } @@ -127,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -143,21 +150,5 @@ protected virtual InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpre } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter internalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter) - { - if (internalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.cs index 46ffaab59..013813139 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter.cs @@ -12,15 +12,15 @@ internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInt { private protected IDictionary _additionalBinaryDataProperties; - internal InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter() + internal InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter() : this(null, null, null) { - Outputs = new ChangeTrackingList(); } internal InternalRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter(string input, IReadOnlyList outputs, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Input = input; - Outputs = outputs; + Outputs = outputs ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs index 9955c8044..934dd5d2f 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject : IJsonModel { - internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject() + internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject() : this(InternalRunStepDetailsCodeInterpreterOutputType.Image, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.W writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepUpdateCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,7 +65,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject De { return null; } - string @type = "image"; + InternalRunStepDetailsCodeInterpreterOutputType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage image = default; @@ -71,7 +73,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject De { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsCodeInterpreterOutputType(prop.Value.GetString()); continue; } if (prop.NameEquals("index"u8)) @@ -88,20 +90,22 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject De image = InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(@type, additionalBinaryDataProperties, index, image); + return new InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(kind, additionalBinaryDataProperties, index, image); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject)} does not support writing '{options.Format}' format."); } @@ -109,6 +113,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepUpdateCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -125,21 +130,5 @@ protected override RunStepUpdateCodeInterpreterOutput PersistableModelCreateCore } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject internalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject) - { - if (internalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.cs index 76500ee8d..03cf34637 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject : RunStepUpdateCodeInterpreterOutput { - internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(int index) : base("image") + internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(int index) : base(InternalRunStepDetailsCodeInterpreterOutputType.Image) { Index = index; } - internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(string @type, IDictionary additionalBinaryDataProperties, int index, InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage image) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(InternalRunStepDetailsCodeInterpreterOutputType kind, IDictionary additionalBinaryDataProperties, int index, InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage image) : base(kind, additionalBinaryDataProperties) { Index = index; Image = image; @@ -22,6 +22,6 @@ internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObject(string @t public int Index { get; } - public InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage Image { get; } + internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage Image { get; } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs index 7171718da..f1c4a5fae 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,6 +84,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectIma fileId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage(fileId, additionalBinaryDataProperties); @@ -88,13 +92,14 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectIma BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage)} does not support writing '{options.Format}' format."); } @@ -102,6 +107,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,21 +124,5 @@ protected virtual InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectI } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage internalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage) - { - if (internalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeOutputImageObjectImage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs index 3d16e8a98..3ed84fd29 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject : IJsonModel { - internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject() + internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject() : this(InternalRunStepDetailsCodeInterpreterOutputType.Logs, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepUpdateCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,7 +65,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject Des { return null; } - string @type = "logs"; + InternalRunStepDetailsCodeInterpreterOutputType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; string internalLogs = default; @@ -71,7 +73,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject Des { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsCodeInterpreterOutputType(prop.Value.GetString()); continue; } if (prop.NameEquals("index"u8)) @@ -84,20 +86,22 @@ internal static InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject Des internalLogs = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(@type, additionalBinaryDataProperties, index, internalLogs); + return new InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(kind, additionalBinaryDataProperties, index, internalLogs); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject)} does not support writing '{options.Format}' format."); } @@ -105,6 +109,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepUpdateCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +126,5 @@ protected override RunStepUpdateCodeInterpreterOutput PersistableModelCreateCore } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject internalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject) - { - if (internalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.cs index 37998b442..0374c9fb0 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject : RunStepUpdateCodeInterpreterOutput { - internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(int index) : base("logs") + internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(int index) : base(InternalRunStepDetailsCodeInterpreterOutputType.Logs) { Index = index; } - internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(string @type, IDictionary additionalBinaryDataProperties, int index, string internalLogs) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetailsToolCallsCodeOutputLogsObject(InternalRunStepDetailsCodeInterpreterOutputType kind, IDictionary additionalBinaryDataProperties, int index, string internalLogs) : base(kind, additionalBinaryDataProperties) { Index = index; InternalLogs = internalLogs; diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs index 3fac49451..342051dbe 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsFileSearchObject : IJsonModel { - internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObject() + internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObject() : this(RunStepToolCallKind.FileSearch, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write( writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetailsToolCallsFileSearchObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsFileSearchObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,7 +70,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFileSearchObject Deseria { return null; } - string @type = "file_search"; + RunStepToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; string id = default; @@ -77,7 +79,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFileSearchObject Deseria { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } if (prop.NameEquals("index"u8)) @@ -95,20 +97,22 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFileSearchObject Deseria fileSearch = InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.DeserializeInternalRunStepDetailsToolCallsFileSearchObjectFileSearch(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDeltaStepDetailsToolCallsFileSearchObject(@type, additionalBinaryDataProperties, index, id, fileSearch); + return new InternalRunStepDeltaStepDetailsToolCallsFileSearchObject(kind, additionalBinaryDataProperties, index, id, fileSearch); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsFileSearchObject)} does not support writing '{options.Format}' format."); } @@ -116,6 +120,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsFileSearchObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsFileSearchObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -132,21 +137,5 @@ protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsFileSearchObject internalRunStepDeltaStepDetailsToolCallsFileSearchObject) - { - if (internalRunStepDeltaStepDetailsToolCallsFileSearchObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsFileSearchObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsFileSearchObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsFileSearchObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.cs index 59052b52c..b02e6e584 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObject.cs @@ -9,13 +9,13 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsFileSearchObject : InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject { - internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObject(int index, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base("file_search") + internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObject(int index, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(RunStepToolCallKind.FileSearch) { Index = index; FileSearch = fileSearch; } - internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObject(string @type, IDictionary additionalBinaryDataProperties, int index, string id, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObject(RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, int index, string id, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(kind, additionalBinaryDataProperties) { Index = index; Id = id; diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs index 7f41f6d24..9f3cb6877 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,6 +28,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(Results) && _additionalBinaryDataProperties?.ContainsKey("results") != true) { writer.WritePropertyName("results"u8); @@ -42,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("ranking_options"u8); writer.WriteObjectValue(RankingOptions, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +68,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,6 +114,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSear rankingOptions = FileSearchRankingOptions.DeserializeFileSearchRankingOptions(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch(results ?? new ChangeTrackingList(), rankingOptions, additionalBinaryDataProperties); @@ -117,13 +122,14 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSear BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch)} does not support writing '{options.Format}' format."); } @@ -131,6 +137,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -147,21 +154,5 @@ protected virtual InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSe } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch internalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch) - { - if (internalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.cs index 610b1286c..691f7cfe4 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch.cs @@ -12,14 +12,14 @@ internal partial class InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectF { private protected IDictionary _additionalBinaryDataProperties; - internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch() + internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch() : this(null, null, null) { - Results = new ChangeTrackingList(); } internal InternalRunStepDeltaStepDetailsToolCallsFileSearchObjectFileSearch(IReadOnlyList results, FileSearchRankingOptions rankingOptions, IDictionary additionalBinaryDataProperties) { - Results = results; + // Plugin customization: ensure initialization of collections + Results = results ?? new ChangeTrackingList(); RankingOptions = rankingOptions; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs index e40afde54..3f36ecea3 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsFunctionObject : IJsonModel { - internal InternalRunStepDeltaStepDetailsToolCallsFunctionObject() + internal InternalRunStepDeltaStepDetailsToolCallsFunctionObject() : this(RunStepToolCallKind.Function, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Ut writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetailsToolCallsFunctionObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsFunctionObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,7 +70,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObject Deseriali { return null; } - string @type = "function"; + RunStepToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int index = default; string id = default; @@ -77,7 +79,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObject Deseriali { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } if (prop.NameEquals("index"u8)) @@ -99,20 +101,22 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObject Deseriali function = InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.DeserializeInternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDeltaStepDetailsToolCallsFunctionObject(@type, additionalBinaryDataProperties, index, id, function); + return new InternalRunStepDeltaStepDetailsToolCallsFunctionObject(kind, additionalBinaryDataProperties, index, id, function); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsFunctionObject)} does not support writing '{options.Format}' format."); } @@ -120,6 +124,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsFunctionObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsFunctionObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -136,21 +141,5 @@ protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsFunctionObject internalRunStepDeltaStepDetailsToolCallsFunctionObject) - { - if (internalRunStepDeltaStepDetailsToolCallsFunctionObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsFunctionObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsFunctionObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsFunctionObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.cs index 403afcb1b..8f31e2543 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsFunctionObject : InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject { - internal InternalRunStepDeltaStepDetailsToolCallsFunctionObject(int index) : base("function") + internal InternalRunStepDeltaStepDetailsToolCallsFunctionObject(int index) : base(RunStepToolCallKind.Function) { Index = index; } - internal InternalRunStepDeltaStepDetailsToolCallsFunctionObject(string @type, IDictionary additionalBinaryDataProperties, int index, string id, InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction function) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetailsToolCallsFunctionObject(RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, int index, string id, InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction function) : base(kind, additionalBinaryDataProperties) { Index = index; Id = id; @@ -25,6 +25,6 @@ internal InternalRunStepDeltaStepDetailsToolCallsFunctionObject(string @type, ID public string Id { get; } - public InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction Function { get; } + internal InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction Function { get; } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs index 41c02a000..750038e9b 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel. writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("output"u8); writer.WriteStringValue(Output); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -108,6 +111,7 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction D output = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction(name, arguments, output, additionalBinaryDataProperties); @@ -115,13 +119,14 @@ internal static InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction D BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction)} does not support writing '{options.Format}' format."); } @@ -129,6 +134,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -145,21 +151,5 @@ protected virtual InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction internalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction) - { - if (internalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsFunctionObjectFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs index 2238b8e9f..dbee7cace 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetailsToolCallsObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -59,14 +61,14 @@ internal static InternalRunStepDeltaStepDetailsToolCallsObject DeserializeIntern { return null; } - string @type = "tool_calls"; + InternalRunStepDetailsType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); IList toolCalls = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsType(prop.Value.GetString()); continue; } if (prop.NameEquals("tool_calls"u8)) @@ -83,20 +85,22 @@ internal static InternalRunStepDeltaStepDetailsToolCallsObject DeserializeIntern toolCalls = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDeltaStepDetailsToolCallsObject(@type, additionalBinaryDataProperties, toolCalls ?? new ChangeTrackingList()); + return new InternalRunStepDeltaStepDetailsToolCallsObject(kind, additionalBinaryDataProperties, toolCalls ?? new ChangeTrackingList()); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsObject)} does not support writing '{options.Format}' format."); } @@ -104,6 +108,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDeltaStepDetailsToolCallsObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -120,21 +125,5 @@ protected override InternalRunStepDeltaStepDetails PersistableModelCreateCore(Bi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsObject internalRunStepDeltaStepDetailsToolCallsObject) - { - if (internalRunStepDeltaStepDetailsToolCallsObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.cs index 20bc75d39..c3cbba53d 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObject.cs @@ -10,16 +10,16 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDeltaStepDetailsToolCallsObject : InternalRunStepDeltaStepDetails { - internal InternalRunStepDeltaStepDetailsToolCallsObject() : base("tool_calls") + internal InternalRunStepDeltaStepDetailsToolCallsObject() : this(InternalRunStepDetailsType.ToolCalls, null, null) { - ToolCalls = new ChangeTrackingList(); } - internal InternalRunStepDeltaStepDetailsToolCallsObject(string @type, IDictionary additionalBinaryDataProperties, IList toolCalls) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetailsToolCallsObject(InternalRunStepDetailsType kind, IDictionary additionalBinaryDataProperties, IList toolCalls) : base(kind, additionalBinaryDataProperties) { - ToolCalls = toolCalls; + // Plugin customization: ensure initialization of collections + ToolCalls = toolCalls ?? new ChangeTrackingList(); } - public IList ToolCalls { get; } + internal IList ToolCalls { get; } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index 760405f31..69c9c7837 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.W writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -93,13 +96,14 @@ internal static InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject De BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject)} does not support writing '{options.Format}' format."); } @@ -107,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -123,21 +128,5 @@ protected virtual InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject internalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject) - { - if (internalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs index ac05b64a0..c962de955 100644 --- a/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs +++ b/src/Generated/Models/InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs @@ -11,18 +11,18 @@ internal abstract partial class InternalRunStepDeltaStepDetailsToolCallsObjectTo { private protected IDictionary _additionalBinaryDataProperties; - private protected InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(string @type) + private protected InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(RunStepToolCallKind kind) { - Type = @type; + Kind = kind; } - internal InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(string @type, IDictionary additionalBinaryDataProperties) + internal InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal RunStepToolCallKind Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalRunStepDetailsCodeInterpreterOutputType.cs b/src/Generated/Models/InternalRunStepDetailsCodeInterpreterOutputType.cs new file mode 100644 index 000000000..43ffda452 --- /dev/null +++ b/src/Generated/Models/InternalRunStepDetailsCodeInterpreterOutputType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal readonly partial struct InternalRunStepDetailsCodeInterpreterOutputType : IEquatable + { + private readonly string _value; + private const string LogsValue = "logs"; + private const string ImageValue = "image"; + + public InternalRunStepDetailsCodeInterpreterOutputType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRunStepDetailsCodeInterpreterOutputType Logs { get; } = new InternalRunStepDetailsCodeInterpreterOutputType(LogsValue); + + internal static InternalRunStepDetailsCodeInterpreterOutputType Image { get; } = new InternalRunStepDetailsCodeInterpreterOutputType(ImageValue); + + public static bool operator ==(InternalRunStepDetailsCodeInterpreterOutputType left, InternalRunStepDetailsCodeInterpreterOutputType right) => left.Equals(right); + + public static bool operator !=(InternalRunStepDetailsCodeInterpreterOutputType left, InternalRunStepDetailsCodeInterpreterOutputType right) => !left.Equals(right); + + public static implicit operator InternalRunStepDetailsCodeInterpreterOutputType(string value) => new InternalRunStepDetailsCodeInterpreterOutputType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRunStepDetailsCodeInterpreterOutputType other && Equals(other); + + public bool Equals(InternalRunStepDetailsCodeInterpreterOutputType 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/InternalRunStepDetailsMessageCreationObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs index cdb893735..c04c3ed27 100644 --- a/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsMessageCreationObject : IJsonModel { - internal InternalRunStepDetailsMessageCreationObject() + internal InternalRunStepDetailsMessageCreationObject() : this(InternalRunStepDetailsType.MessageCreation, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDetailsMessageCreationObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDetailsMessageCreationObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,14 @@ internal static InternalRunStepDetailsMessageCreationObject DeserializeInternalR { return null; } - string @type = "message_creation"; + InternalRunStepDetailsType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDetailsMessageCreationObjectMessageCreation messageCreation = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsType(prop.Value.GetString()); continue; } if (prop.NameEquals("message_creation"u8)) @@ -73,20 +75,22 @@ internal static InternalRunStepDetailsMessageCreationObject DeserializeInternalR messageCreation = InternalRunStepDetailsMessageCreationObjectMessageCreation.DeserializeInternalRunStepDetailsMessageCreationObjectMessageCreation(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDetailsMessageCreationObject(@type, additionalBinaryDataProperties, messageCreation); + return new InternalRunStepDetailsMessageCreationObject(kind, additionalBinaryDataProperties, messageCreation); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsMessageCreationObject)} does not support writing '{options.Format}' format."); } @@ -94,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsMessageCreationObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDetailsMessageCreationObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +115,5 @@ protected override RunStepDetails PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsMessageCreationObject internalRunStepDetailsMessageCreationObject) - { - if (internalRunStepDetailsMessageCreationObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsMessageCreationObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsMessageCreationObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsMessageCreationObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.cs b/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.cs index 0297b8f72..4840850bf 100644 --- a/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsMessageCreationObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsMessageCreationObject : RunStepDetails { - internal InternalRunStepDetailsMessageCreationObject(InternalRunStepDetailsMessageCreationObjectMessageCreation messageCreation) : base("message_creation") + internal InternalRunStepDetailsMessageCreationObject(InternalRunStepDetailsMessageCreationObjectMessageCreation messageCreation) : base(InternalRunStepDetailsType.MessageCreation) { _messageCreation = messageCreation; } - internal InternalRunStepDetailsMessageCreationObject(string @type, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsMessageCreationObjectMessageCreation messageCreation) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDetailsMessageCreationObject(InternalRunStepDetailsType kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsMessageCreationObjectMessageCreation messageCreation) : base(kind, additionalBinaryDataProperties) { _messageCreation = messageCreation; } diff --git a/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs index 4efd7836c..faa37062f 100644 --- a/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsMessageCreationObjectMessageCreation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message_id"u8); writer.WriteStringValue(MessageId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDetailsMessageCreationObjectMessageCreation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsMessageCreationObjectMessageCreation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalRunStepDetailsMessageCreationObjectMessageCreation Deser messageId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsMessageCreationObjectMessageCreation(messageId, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalRunStepDetailsMessageCreationObjectMessageCreation Deser BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsMessageCreationObjectMessageCreation)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsMessageCreationObjectMessageCreation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsMessageCreationObjectMessageCreation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalRunStepDetailsMessageCreationObjectMessageCreation Per } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsMessageCreationObjectMessageCreation internalRunStepDetailsMessageCreationObjectMessageCreation) - { - if (internalRunStepDetailsMessageCreationObjectMessageCreation == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsMessageCreationObjectMessageCreation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsMessageCreationObjectMessageCreation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsMessageCreationObjectMessageCreation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.Serialization.cs index 4775f9581..a553b4d8a 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsCodeObject : IJsonModel { - internal InternalRunStepDetailsToolCallsCodeObject() + internal InternalRunStepDetailsToolCallsCodeObject() : this(RunStepToolCallKind.CodeInterpreter, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDetailsToolCallsCodeObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsCodeObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepToolCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,20 +60,20 @@ internal static InternalRunStepDetailsToolCallsCodeObject DeserializeInternalRun { return null; } - string id = default; RunStepToolCallKind kind = default; + string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("id"u8)) + if (prop.NameEquals("type"u8)) { - id = prop.Value.GetString(); + kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("id"u8)) { - kind = prop.Value.GetString().ToRunStepToolCallKind(); + id = prop.Value.GetString(); continue; } if (prop.NameEquals("code_interpreter"u8)) @@ -79,20 +81,22 @@ internal static InternalRunStepDetailsToolCallsCodeObject DeserializeInternalRun codeInterpreter = InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.DeserializeInternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDetailsToolCallsCodeObject(id, kind, additionalBinaryDataProperties, codeInterpreter); + return new InternalRunStepDetailsToolCallsCodeObject(kind, id, additionalBinaryDataProperties, codeInterpreter); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsCodeObject)} does not support writing '{options.Format}' format."); } @@ -100,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsCodeObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsCodeObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepToolCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,21 +121,5 @@ protected override RunStepToolCall PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsCodeObject internalRunStepDetailsToolCallsCodeObject) - { - if (internalRunStepDetailsToolCallsCodeObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsCodeObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsCodeObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsCodeObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.cs index de2dade56..6aa333d86 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObject.cs @@ -9,16 +9,16 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsCodeObject : RunStepToolCall { - internal InternalRunStepDetailsToolCallsCodeObject(string id, InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(id, RunStepToolCallKind.CodeInterpreter) + internal InternalRunStepDetailsToolCallsCodeObject(string id, InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(RunStepToolCallKind.CodeInterpreter, id) { CodeInterpreter = codeInterpreter; } - internal InternalRunStepDetailsToolCallsCodeObject(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(id, kind, additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsCodeObject(RunStepToolCallKind kind, string id, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter codeInterpreter) : base(kind, id, additionalBinaryDataProperties) { CodeInterpreter = codeInterpreter; } - public InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter CodeInterpreter { get; } + internal InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter CodeInterpreter { get; } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs index b83e9c3af..f13c32de6 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter : IJsonModel { - internal InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter() + internal InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter() : this(null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write( writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("input"u8); writer.WriteStringValue(Input); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("outputs") != true) { writer.WritePropertyName("outputs"u8); @@ -46,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -106,6 +110,7 @@ internal static InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter Deseria outputs = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(input, outputs, additionalBinaryDataProperties); @@ -113,13 +118,14 @@ internal static InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter Deseria BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter)} does not support writing '{options.Format}' format."); } @@ -127,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -143,21 +150,5 @@ protected virtual InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter Persi } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter internalRunStepDetailsToolCallsCodeObjectCodeInterpreter) - { - if (internalRunStepDetailsToolCallsCodeObjectCodeInterpreter == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsCodeObjectCodeInterpreter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.cs index 4c6e6bd96..6933c51ca 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter.cs @@ -20,8 +20,9 @@ internal InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(string input) internal InternalRunStepDetailsToolCallsCodeObjectCodeInterpreter(string input, IReadOnlyList outputs, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Input = input; - Outputs = outputs; + Outputs = outputs ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs index 05e0ef525..171a1c146 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsCodeOutputImageObject : IJsonModel { - internal InternalRunStepDetailsToolCallsCodeOutputImageObject() + internal InternalRunStepDetailsToolCallsCodeOutputImageObject() : this(InternalRunStepDetailsCodeInterpreterOutputType.Image, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8 writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDetailsToolCallsCodeOutputImageObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsCodeOutputImageObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,14 @@ internal static InternalRunStepDetailsToolCallsCodeOutputImageObject Deserialize { return null; } - string @type = "image"; + InternalRunStepDetailsCodeInterpreterOutputType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDetailsToolCallsCodeOutputImageObjectImage image = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsCodeInterpreterOutputType(prop.Value.GetString()); continue; } if (prop.NameEquals("image"u8)) @@ -73,20 +75,22 @@ internal static InternalRunStepDetailsToolCallsCodeOutputImageObject Deserialize image = InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.DeserializeInternalRunStepDetailsToolCallsCodeOutputImageObjectImage(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDetailsToolCallsCodeOutputImageObject(@type, additionalBinaryDataProperties, image); + return new InternalRunStepDetailsToolCallsCodeOutputImageObject(kind, additionalBinaryDataProperties, image); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsCodeOutputImageObject)} does not support writing '{options.Format}' format."); } @@ -94,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsCodeOutputImageObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsCodeOutputImageObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +115,5 @@ protected override RunStepCodeInterpreterOutput PersistableModelCreateCore(Binar } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsCodeOutputImageObject internalRunStepDetailsToolCallsCodeOutputImageObject) - { - if (internalRunStepDetailsToolCallsCodeOutputImageObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsCodeOutputImageObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsCodeOutputImageObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsCodeOutputImageObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.cs index 4f00f2f41..7da27786d 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObject.cs @@ -9,12 +9,12 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsCodeOutputImageObject : RunStepCodeInterpreterOutput { - internal InternalRunStepDetailsToolCallsCodeOutputImageObject(InternalRunStepDetailsToolCallsCodeOutputImageObjectImage image) : base("image") + internal InternalRunStepDetailsToolCallsCodeOutputImageObject(InternalRunStepDetailsToolCallsCodeOutputImageObjectImage image) : base(InternalRunStepDetailsCodeInterpreterOutputType.Image) { _image = image; } - internal InternalRunStepDetailsToolCallsCodeOutputImageObject(string @type, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsCodeOutputImageObjectImage image) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsCodeOutputImageObject(InternalRunStepDetailsCodeInterpreterOutputType kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsCodeOutputImageObjectImage image) : base(kind, additionalBinaryDataProperties) { _image = image; } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs index 9eae18630..83bafaa75 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsCodeOutputImageObjectImage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_id"u8); writer.WriteStringValue(FileId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDetailsToolCallsCodeOutputImageObjectImage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsCodeOutputImageObjectImage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static InternalRunStepDetailsToolCallsCodeOutputImageObjectImage Deseri fileId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsCodeOutputImageObjectImage(fileId, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static InternalRunStepDetailsToolCallsCodeOutputImageObjectImage Deseri BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsCodeOutputImageObjectImage)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsCodeOutputImageObjectImage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsCodeOutputImageObjectImage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual InternalRunStepDetailsToolCallsCodeOutputImageObjectImage Pers } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsCodeOutputImageObjectImage internalRunStepDetailsToolCallsCodeOutputImageObjectImage) - { - if (internalRunStepDetailsToolCallsCodeOutputImageObjectImage == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsCodeOutputImageObjectImage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsCodeOutputImageObjectImage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsCodeOutputImageObjectImage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.Serialization.cs index 992fe5e0f..7d1f0e214 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsFileSearchObject : IJsonModel { - internal InternalRunStepDetailsToolCallsFileSearchObject() + internal InternalRunStepDetailsToolCallsFileSearchObject() : this(RunStepToolCallKind.FileSearch, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDetailsToolCallsFileSearchObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsFileSearchObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepToolCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,20 +60,20 @@ internal static InternalRunStepDetailsToolCallsFileSearchObject DeserializeInter { return null; } - string id = default; RunStepToolCallKind kind = default; + string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("id"u8)) + if (prop.NameEquals("type"u8)) { - id = prop.Value.GetString(); + kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("id"u8)) { - kind = prop.Value.GetString().ToRunStepToolCallKind(); + id = prop.Value.GetString(); continue; } if (prop.NameEquals("file_search"u8)) @@ -79,20 +81,22 @@ internal static InternalRunStepDetailsToolCallsFileSearchObject DeserializeInter fileSearch = InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.DeserializeInternalRunStepDetailsToolCallsFileSearchObjectFileSearch(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDetailsToolCallsFileSearchObject(id, kind, additionalBinaryDataProperties, fileSearch); + return new InternalRunStepDetailsToolCallsFileSearchObject(kind, id, additionalBinaryDataProperties, fileSearch); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsFileSearchObject)} does not support writing '{options.Format}' format."); } @@ -100,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsFileSearchObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsFileSearchObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepToolCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,21 +121,5 @@ protected override RunStepToolCall PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsFileSearchObject internalRunStepDetailsToolCallsFileSearchObject) - { - if (internalRunStepDetailsToolCallsFileSearchObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsFileSearchObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsFileSearchObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsFileSearchObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.cs index bb4dea596..1580bf40c 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObject.cs @@ -9,16 +9,16 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsFileSearchObject : RunStepToolCall { - internal InternalRunStepDetailsToolCallsFileSearchObject(string id, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(id, RunStepToolCallKind.FileSearch) + internal InternalRunStepDetailsToolCallsFileSearchObject(string id, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(RunStepToolCallKind.FileSearch, id) { FileSearch = fileSearch; } - internal InternalRunStepDetailsToolCallsFileSearchObject(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(id, kind, additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsFileSearchObject(RunStepToolCallKind kind, string id, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsFileSearchObjectFileSearch fileSearch) : base(kind, id, additionalBinaryDataProperties) { FileSearch = fileSearch; } - public InternalRunStepDetailsToolCallsFileSearchObjectFileSearch FileSearch { get; } + internal InternalRunStepDetailsToolCallsFileSearchObjectFileSearch FileSearch { get; } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs index 6ad6794e5..13c46fcda 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,6 +28,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsFileSearchObjectFileSearch)} does not support writing '{format}' format."); } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(Results) && _additionalBinaryDataProperties?.ContainsKey("results") != true) { writer.WritePropertyName("results"u8); @@ -42,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("ranking_options"u8); writer.WriteObjectValue(RankingOptions, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +68,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDetailsToolCallsFileSearchObjectFileSearch IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsFileSearchObjectFileSearch JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,6 +114,7 @@ internal static InternalRunStepDetailsToolCallsFileSearchObjectFileSearch Deseri rankingOptions = FileSearchRankingOptions.DeserializeFileSearchRankingOptions(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsFileSearchObjectFileSearch(results ?? new ChangeTrackingList(), rankingOptions, additionalBinaryDataProperties); @@ -117,13 +122,14 @@ internal static InternalRunStepDetailsToolCallsFileSearchObjectFileSearch Deseri BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsFileSearchObjectFileSearch)} does not support writing '{options.Format}' format."); } @@ -131,6 +137,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsFileSearchObjectFileSearch IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsFileSearchObjectFileSearch PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -147,21 +154,5 @@ protected virtual InternalRunStepDetailsToolCallsFileSearchObjectFileSearch Pers } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsFileSearchObjectFileSearch internalRunStepDetailsToolCallsFileSearchObjectFileSearch) - { - if (internalRunStepDetailsToolCallsFileSearchObjectFileSearch == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsFileSearchObjectFileSearch, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsFileSearchObjectFileSearch(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsFileSearchObjectFileSearch(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.cs index 2052d81a0..90bd1eb06 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchObjectFileSearch.cs @@ -12,14 +12,14 @@ internal partial class InternalRunStepDetailsToolCallsFileSearchObjectFileSearch { private protected IDictionary _additionalBinaryDataProperties; - internal InternalRunStepDetailsToolCallsFileSearchObjectFileSearch() + internal InternalRunStepDetailsToolCallsFileSearchObjectFileSearch() : this(null, null, null) { - Results = new ChangeTrackingList(); } internal InternalRunStepDetailsToolCallsFileSearchObjectFileSearch(IReadOnlyList results, FileSearchRankingOptions rankingOptions, IDictionary additionalBinaryDataProperties) { - Results = results; + // Plugin customization: ensure initialization of collections + Results = results ?? new ChangeTrackingList(); RankingOptions = rankingOptions; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.Serialization.cs index 46631bd19..af43d0dc1 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.W writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("score_threshold"u8); writer.WriteNumberValue(ScoreThreshold); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject De scoreThreshold = prop.Value.GetSingle(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject(ranker, scoreThreshold, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject De BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject internalRunStepDetailsToolCallsFileSearchRankingOptionsObject) - { - if (internalRunStepDetailsToolCallsFileSearchRankingOptionsObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsFileSearchRankingOptionsObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsFileSearchRankingOptionsObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsFileSearchRankingOptionsObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.Serialization.cs index d1c28641d..c49c045bb 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsFunctionObject : IJsonModel { - internal InternalRunStepDetailsToolCallsFunctionObject() + internal InternalRunStepDetailsToolCallsFunctionObject() : this(RunStepToolCallKind.Function, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDetailsToolCallsFunctionObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsFunctionObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepToolCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,20 +60,20 @@ internal static InternalRunStepDetailsToolCallsFunctionObject DeserializeInterna { return null; } - string id = default; RunStepToolCallKind kind = default; + string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); InternalRunStepDetailsToolCallsFunctionObjectFunction function = default; foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("id"u8)) + if (prop.NameEquals("type"u8)) { - id = prop.Value.GetString(); + kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("id"u8)) { - kind = prop.Value.GetString().ToRunStepToolCallKind(); + id = prop.Value.GetString(); continue; } if (prop.NameEquals("function"u8)) @@ -79,20 +81,22 @@ internal static InternalRunStepDetailsToolCallsFunctionObject DeserializeInterna function = InternalRunStepDetailsToolCallsFunctionObjectFunction.DeserializeInternalRunStepDetailsToolCallsFunctionObjectFunction(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDetailsToolCallsFunctionObject(id, kind, additionalBinaryDataProperties, function); + return new InternalRunStepDetailsToolCallsFunctionObject(kind, id, additionalBinaryDataProperties, function); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsFunctionObject)} does not support writing '{options.Format}' format."); } @@ -100,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsFunctionObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsFunctionObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepToolCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -116,21 +121,5 @@ protected override RunStepToolCall PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsFunctionObject internalRunStepDetailsToolCallsFunctionObject) - { - if (internalRunStepDetailsToolCallsFunctionObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsFunctionObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsFunctionObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsFunctionObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.cs index e86326594..0048172b8 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObject.cs @@ -9,16 +9,16 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsFunctionObject : RunStepToolCall { - internal InternalRunStepDetailsToolCallsFunctionObject(string id, InternalRunStepDetailsToolCallsFunctionObjectFunction function) : base(id, RunStepToolCallKind.Function) + internal InternalRunStepDetailsToolCallsFunctionObject(string id, InternalRunStepDetailsToolCallsFunctionObjectFunction function) : base(RunStepToolCallKind.Function, id) { Function = function; } - internal InternalRunStepDetailsToolCallsFunctionObject(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsFunctionObjectFunction function) : base(id, kind, additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsFunctionObject(RunStepToolCallKind kind, string id, IDictionary additionalBinaryDataProperties, InternalRunStepDetailsToolCallsFunctionObjectFunction function) : base(kind, id, additionalBinaryDataProperties) { Function = function; } - public InternalRunStepDetailsToolCallsFunctionObjectFunction Function { get; } + internal InternalRunStepDetailsToolCallsFunctionObjectFunction Function { get; } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs index 5d14c57ab..6a2bcf9d8 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsFunctionObjectFunction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,6 +54,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("output"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -76,6 +78,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunStepDetailsToolCallsFunctionObjectFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsFunctionObjectFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -119,6 +122,7 @@ internal static InternalRunStepDetailsToolCallsFunctionObjectFunction Deserializ output = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunStepDetailsToolCallsFunctionObjectFunction(name, arguments, output, additionalBinaryDataProperties); @@ -126,13 +130,14 @@ internal static InternalRunStepDetailsToolCallsFunctionObjectFunction Deserializ BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsFunctionObjectFunction)} does not support writing '{options.Format}' format."); } @@ -140,6 +145,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsFunctionObjectFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunStepDetailsToolCallsFunctionObjectFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -156,21 +162,5 @@ protected virtual InternalRunStepDetailsToolCallsFunctionObjectFunction Persista } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsFunctionObjectFunction internalRunStepDetailsToolCallsFunctionObjectFunction) - { - if (internalRunStepDetailsToolCallsFunctionObjectFunction == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsFunctionObjectFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsFunctionObjectFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsFunctionObjectFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs index 5f9d04fb0..17b9c7d8d 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsObject.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsObject : IJsonModel { - internal InternalRunStepDetailsToolCallsObject() + internal InternalRunStepDetailsToolCallsObject() : this(InternalRunStepDetailsType.ToolCalls, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDetailsToolCallsObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsObject)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,14 +65,14 @@ internal static InternalRunStepDetailsToolCallsObject DeserializeInternalRunStep { return null; } - string @type = "tool_calls"; + InternalRunStepDetailsType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); IReadOnlyList internalToolCalls = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsType(prop.Value.GetString()); continue; } if (prop.NameEquals("tool_calls"u8)) @@ -83,20 +85,22 @@ internal static InternalRunStepDetailsToolCallsObject DeserializeInternalRunStep internalToolCalls = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalRunStepDetailsToolCallsObject(@type, additionalBinaryDataProperties, internalToolCalls); + return new InternalRunStepDetailsToolCallsObject(kind, additionalBinaryDataProperties, internalToolCalls); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDetailsToolCallsObject)} does not support writing '{options.Format}' format."); } @@ -104,6 +108,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDetailsToolCallsObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalRunStepDetailsToolCallsObject)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -120,21 +125,5 @@ protected override RunStepDetails PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunStepDetailsToolCallsObject internalRunStepDetailsToolCallsObject) - { - if (internalRunStepDetailsToolCallsObject == null) - { - return null; - } - return BinaryContent.Create(internalRunStepDetailsToolCallsObject, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunStepDetailsToolCallsObject(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunStepDetailsToolCallsObject(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunStepDetailsToolCallsObject.cs b/src/Generated/Models/InternalRunStepDetailsToolCallsObject.cs index c54f7ea86..722ed5712 100644 --- a/src/Generated/Models/InternalRunStepDetailsToolCallsObject.cs +++ b/src/Generated/Models/InternalRunStepDetailsToolCallsObject.cs @@ -5,19 +5,21 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; namespace OpenAI.Assistants { internal partial class InternalRunStepDetailsToolCallsObject : RunStepDetails { - internal InternalRunStepDetailsToolCallsObject(IEnumerable internalToolCalls) : base("tool_calls") + internal InternalRunStepDetailsToolCallsObject(IEnumerable internalToolCalls) : base(InternalRunStepDetailsType.ToolCalls) { InternalToolCalls = internalToolCalls.ToList(); } - internal InternalRunStepDetailsToolCallsObject(string @type, IDictionary additionalBinaryDataProperties, IReadOnlyList internalToolCalls) : base(@type, additionalBinaryDataProperties) + internal InternalRunStepDetailsToolCallsObject(InternalRunStepDetailsType kind, IDictionary additionalBinaryDataProperties, IReadOnlyList internalToolCalls) : base(kind, additionalBinaryDataProperties) { - InternalToolCalls = internalToolCalls; + // Plugin customization: ensure initialization of collections + InternalToolCalls = internalToolCalls ?? new ChangeTrackingList(); } } } diff --git a/src/Generated/Models/InternalRunStepDetailsType.cs b/src/Generated/Models/InternalRunStepDetailsType.cs new file mode 100644 index 000000000..7d7ba6503 --- /dev/null +++ b/src/Generated/Models/InternalRunStepDetailsType.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal readonly partial struct InternalRunStepDetailsType : IEquatable + { + private readonly string _value; + private const string MessageCreationValue = "message_creation"; + private const string ToolCallsValue = "tool_calls"; + + public InternalRunStepDetailsType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalRunStepDetailsType MessageCreation { get; } = new InternalRunStepDetailsType(MessageCreationValue); + + internal static InternalRunStepDetailsType ToolCalls { get; } = new InternalRunStepDetailsType(ToolCallsValue); + + public static bool operator ==(InternalRunStepDetailsType left, InternalRunStepDetailsType right) => left.Equals(right); + + public static bool operator !=(InternalRunStepDetailsType left, InternalRunStepDetailsType right) => !left.Equals(right); + + public static implicit operator InternalRunStepDetailsType(string value) => new InternalRunStepDetailsType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalRunStepDetailsType other && Equals(other); + + public bool Equals(InternalRunStepDetailsType 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/InternalRunStepObjectObject.cs b/src/Generated/Models/InternalRunStepObjectObject.cs deleted file mode 100644 index e4b8fc0cc..000000000 --- a/src/Generated/Models/InternalRunStepObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalRunStepObjectObject : IEquatable - { - private readonly string _value; - private const string ThreadRunStepValue = "thread.run.step"; - - public InternalRunStepObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRunStepObjectObject ThreadRunStep { get; } = new InternalRunStepObjectObject(ThreadRunStepValue); - - public static bool operator ==(InternalRunStepObjectObject left, InternalRunStepObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalRunStepObjectObject left, InternalRunStepObjectObject right) => !left.Equals(right); - - public static implicit operator InternalRunStepObjectObject(string value) => new InternalRunStepObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRunStepObjectObject other && Equals(other); - - public bool Equals(InternalRunStepObjectObject 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/InternalRunToolCallObjectFunction.Serialization.cs b/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs index 4d09c1430..559f3489b 100644 --- a/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs +++ b/src/Generated/Models/InternalRunToolCallObjectFunction.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("arguments"u8); writer.WriteStringValue(Arguments); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalRunToolCallObjectFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalRunToolCallObjectFunction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static InternalRunToolCallObjectFunction DeserializeInternalRunToolCall arguments = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalRunToolCallObjectFunction(name, arguments, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static InternalRunToolCallObjectFunction DeserializeInternalRunToolCall BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunToolCallObjectFunction)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunToolCallObjectFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalRunToolCallObjectFunction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual InternalRunToolCallObjectFunction PersistableModelCreateCore(B } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalRunToolCallObjectFunction internalRunToolCallObjectFunction) - { - if (internalRunToolCallObjectFunction == null) - { - return null; - } - return BinaryContent.Create(internalRunToolCallObjectFunction, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalRunToolCallObjectFunction(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalRunToolCallObjectFunction(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalRunToolCallObjectType.cs b/src/Generated/Models/InternalRunToolCallObjectType.cs deleted file mode 100644 index f788b6996..000000000 --- a/src/Generated/Models/InternalRunToolCallObjectType.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalRunToolCallObjectType : IEquatable - { - private readonly string _value; - private const string FunctionValue = "function"; - - public InternalRunToolCallObjectType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalRunToolCallObjectType Function { get; } = new InternalRunToolCallObjectType(FunctionValue); - - public static bool operator ==(InternalRunToolCallObjectType left, InternalRunToolCallObjectType right) => left.Equals(right); - - public static bool operator !=(InternalRunToolCallObjectType left, InternalRunToolCallObjectType right) => !left.Equals(right); - - public static implicit operator InternalRunToolCallObjectType(string value) => new InternalRunToolCallObjectType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalRunToolCallObjectType other && Equals(other); - - public bool Equals(InternalRunToolCallObjectType 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/InternalServiceTier.cs b/src/Generated/Models/InternalServiceTier.cs new file mode 100644 index 000000000..aaa2faf49 --- /dev/null +++ b/src/Generated/Models/InternalServiceTier.cs @@ -0,0 +1,50 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Internal +{ + internal readonly partial struct InternalServiceTier : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + private const string DefaultValue = "default"; + private const string FlexValue = "flex"; + private const string ScaleValue = "scale"; + + public InternalServiceTier(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalServiceTier Auto { get; } = new InternalServiceTier(AutoValue); + + internal static InternalServiceTier Default { get; } = new InternalServiceTier(DefaultValue); + + internal static InternalServiceTier Flex { get; } = new InternalServiceTier(FlexValue); + + internal static InternalServiceTier Scale { get; } = new InternalServiceTier(ScaleValue); + + public static bool operator ==(InternalServiceTier left, InternalServiceTier right) => left.Equals(right); + + public static bool operator !=(InternalServiceTier left, InternalServiceTier right) => !left.Equals(right); + + public static implicit operator InternalServiceTier(string value) => new InternalServiceTier(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalServiceTier other && Equals(other); + + public bool Equals(InternalServiceTier 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/InternalStaticChunkingStrategy.Serialization.cs b/src/Generated/Models/InternalStaticChunkingStrategy.Serialization.cs new file mode 100644 index 000000000..d29f67c5f --- /dev/null +++ b/src/Generated/Models/InternalStaticChunkingStrategy.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalStaticChunkingStrategy : IJsonModel + { + internal InternalStaticChunkingStrategy() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalStaticChunkingStrategy)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("max_chunk_size_tokens") != true) + { + writer.WritePropertyName("max_chunk_size_tokens"u8); + writer.WriteNumberValue(MaxChunkSizeTokens); + } + if (_additionalBinaryDataProperties?.ContainsKey("chunk_overlap_tokens") != true) + { + writer.WritePropertyName("chunk_overlap_tokens"u8); + writer.WriteNumberValue(ChunkOverlapTokens); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalStaticChunkingStrategy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalStaticChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalStaticChunkingStrategy)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalStaticChunkingStrategy(document.RootElement, options); + } + + internal static InternalStaticChunkingStrategy DeserializeInternalStaticChunkingStrategy(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int maxChunkSizeTokens = default; + int chunkOverlapTokens = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("max_chunk_size_tokens"u8)) + { + maxChunkSizeTokens = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("chunk_overlap_tokens"u8)) + { + chunkOverlapTokens = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalStaticChunkingStrategy(maxChunkSizeTokens, chunkOverlapTokens, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalStaticChunkingStrategy)} does not support writing '{options.Format}' format."); + } + } + + InternalStaticChunkingStrategy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalStaticChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalStaticChunkingStrategy(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalStaticChunkingStrategy)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalStaticChunkingStrategy.cs b/src/Generated/Models/InternalStaticChunkingStrategy.cs new file mode 100644 index 000000000..b36f2d08b --- /dev/null +++ b/src/Generated/Models/InternalStaticChunkingStrategy.cs @@ -0,0 +1,37 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalStaticChunkingStrategy + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalStaticChunkingStrategy(int maxChunkSizeTokens, int chunkOverlapTokens) + { + MaxChunkSizeTokens = maxChunkSizeTokens; + ChunkOverlapTokens = chunkOverlapTokens; + } + + internal InternalStaticChunkingStrategy(int maxChunkSizeTokens, int chunkOverlapTokens, IDictionary additionalBinaryDataProperties) + { + MaxChunkSizeTokens = maxChunkSizeTokens; + ChunkOverlapTokens = chunkOverlapTokens; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public int MaxChunkSizeTokens { get; set; } + + public int ChunkOverlapTokens { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs b/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs deleted file mode 100644 index 234e13921..000000000 --- a/src/Generated/Models/InternalStaticChunkingStrategyDetails.Serialization.cs +++ /dev/null @@ -1,153 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal partial class InternalStaticChunkingStrategyDetails : IJsonModel - { - internal InternalStaticChunkingStrategyDetails() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalStaticChunkingStrategyDetails)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("max_chunk_size_tokens") != true) - { - writer.WritePropertyName("max_chunk_size_tokens"u8); - writer.WriteNumberValue(MaxChunkSizeTokens); - } - if (_additionalBinaryDataProperties?.ContainsKey("chunk_overlap_tokens") != true) - { - writer.WritePropertyName("chunk_overlap_tokens"u8); - writer.WriteNumberValue(ChunkOverlapTokens); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalStaticChunkingStrategyDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalStaticChunkingStrategyDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalStaticChunkingStrategyDetails)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalStaticChunkingStrategyDetails(document.RootElement, options); - } - - internal static InternalStaticChunkingStrategyDetails DeserializeInternalStaticChunkingStrategyDetails(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - int maxChunkSizeTokens = default; - int chunkOverlapTokens = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("max_chunk_size_tokens"u8)) - { - maxChunkSizeTokens = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("chunk_overlap_tokens"u8)) - { - chunkOverlapTokens = prop.Value.GetInt32(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalStaticChunkingStrategyDetails(maxChunkSizeTokens, chunkOverlapTokens, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalStaticChunkingStrategyDetails)} does not support writing '{options.Format}' format."); - } - } - - InternalStaticChunkingStrategyDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalStaticChunkingStrategyDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalStaticChunkingStrategyDetails(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalStaticChunkingStrategyDetails)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalStaticChunkingStrategyDetails internalStaticChunkingStrategyDetails) - { - if (internalStaticChunkingStrategyDetails == null) - { - return null; - } - return BinaryContent.Create(internalStaticChunkingStrategyDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalStaticChunkingStrategyDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalStaticChunkingStrategyDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalStaticChunkingStrategyDetails.cs b/src/Generated/Models/InternalStaticChunkingStrategyDetails.cs deleted file mode 100644 index 3a88a1f8c..000000000 --- a/src/Generated/Models/InternalStaticChunkingStrategyDetails.cs +++ /dev/null @@ -1,37 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.VectorStores -{ - internal partial class InternalStaticChunkingStrategyDetails - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalStaticChunkingStrategyDetails(int maxChunkSizeTokens, int chunkOverlapTokens) - { - MaxChunkSizeTokens = maxChunkSizeTokens; - ChunkOverlapTokens = chunkOverlapTokens; - } - - internal InternalStaticChunkingStrategyDetails(int maxChunkSizeTokens, int chunkOverlapTokens, IDictionary additionalBinaryDataProperties) - { - MaxChunkSizeTokens = maxChunkSizeTokens; - ChunkOverlapTokens = chunkOverlapTokens; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public int MaxChunkSizeTokens { get; set; } - - public int ChunkOverlapTokens { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs b/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs index ce152a196..f6f5543f7 100644 --- a/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs +++ b/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.VectorStores { internal partial class InternalStaticChunkingStrategyRequestParam : IJsonModel { - internal InternalStaticChunkingStrategyRequestParam() + internal InternalStaticChunkingStrategyRequestParam() : this(InternalChunkingStrategyRequestParamType.Static, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,7 +42,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalStaticChunkingStrategyRequestParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalStaticChunkingStrategyRequestParam)JsonModelCreateCore(ref reader, options); - protected override InternalFileChunkingStrategyRequestParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyRequestParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -58,35 +60,37 @@ internal static InternalStaticChunkingStrategyRequestParam DeserializeInternalSt { return null; } - string @type = "static"; + InternalChunkingStrategyRequestParamType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalStaticChunkingStrategyDetails @static = default; + InternalStaticChunkingStrategy @static = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalChunkingStrategyRequestParamType(prop.Value.GetString()); continue; } if (prop.NameEquals("static"u8)) { - @static = InternalStaticChunkingStrategyDetails.DeserializeInternalStaticChunkingStrategyDetails(prop.Value, options); + @static = InternalStaticChunkingStrategy.DeserializeInternalStaticChunkingStrategy(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalStaticChunkingStrategyRequestParam(@type, additionalBinaryDataProperties, @static); + return new InternalStaticChunkingStrategyRequestParam(kind, additionalBinaryDataProperties, @static); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalStaticChunkingStrategyRequestParam)} does not support writing '{options.Format}' format."); } @@ -94,7 +98,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalStaticChunkingStrategyRequestParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalStaticChunkingStrategyRequestParam)PersistableModelCreateCore(data, options); - protected override InternalFileChunkingStrategyRequestParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyRequestParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) @@ -110,21 +115,5 @@ protected override InternalFileChunkingStrategyRequestParam PersistableModelCrea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalStaticChunkingStrategyRequestParam internalStaticChunkingStrategyRequestParam) - { - if (internalStaticChunkingStrategyRequestParam == null) - { - return null; - } - return BinaryContent.Create(internalStaticChunkingStrategyRequestParam, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalStaticChunkingStrategyRequestParam(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalStaticChunkingStrategyRequestParam(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.cs b/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.cs index dae22259c..771285fc2 100644 --- a/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.cs +++ b/src/Generated/Models/InternalStaticChunkingStrategyRequestParam.cs @@ -8,20 +8,20 @@ namespace OpenAI.VectorStores { - internal partial class InternalStaticChunkingStrategyRequestParam : InternalFileChunkingStrategyRequestParam + internal partial class InternalStaticChunkingStrategyRequestParam : InternalChunkingStrategyRequestParam { - public InternalStaticChunkingStrategyRequestParam(InternalStaticChunkingStrategyDetails @static) : base("static") + internal InternalStaticChunkingStrategyRequestParam(InternalStaticChunkingStrategy @static) : base(InternalChunkingStrategyRequestParamType.Static) { Argument.AssertNotNull(@static, nameof(@static)); Static = @static; } - internal InternalStaticChunkingStrategyRequestParam(string @type, IDictionary additionalBinaryDataProperties, InternalStaticChunkingStrategyDetails @static) : base(@type, additionalBinaryDataProperties) + internal InternalStaticChunkingStrategyRequestParam(InternalChunkingStrategyRequestParamType kind, IDictionary additionalBinaryDataProperties, InternalStaticChunkingStrategy @static) : base(kind, additionalBinaryDataProperties) { Static = @static; } - public InternalStaticChunkingStrategyDetails Static { get; } + internal InternalStaticChunkingStrategy Static { get; } } } diff --git a/src/Generated/Models/InternalStaticChunkingStrategyResponseParam.Serialization.cs b/src/Generated/Models/InternalStaticChunkingStrategyResponseParam.Serialization.cs new file mode 100644 index 000000000..102cb07f7 --- /dev/null +++ b/src/Generated/Models/InternalStaticChunkingStrategyResponseParam.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalStaticChunkingStrategyResponseParam : IJsonModel + { + internal InternalStaticChunkingStrategyResponseParam() : this(InternalChunkingStrategyResponseParamType.Static, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalStaticChunkingStrategyResponseParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("static") != true) + { + writer.WritePropertyName("static"u8); + writer.WriteObjectValue(Static, options); + } + } + + InternalStaticChunkingStrategyResponseParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalStaticChunkingStrategyResponseParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyResponseParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalStaticChunkingStrategyResponseParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalStaticChunkingStrategyResponseParam(document.RootElement, options); + } + + internal static InternalStaticChunkingStrategyResponseParam DeserializeInternalStaticChunkingStrategyResponseParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalChunkingStrategyResponseParamType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalStaticChunkingStrategy @static = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalChunkingStrategyResponseParamType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("static"u8)) + { + @static = InternalStaticChunkingStrategy.DeserializeInternalStaticChunkingStrategy(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalStaticChunkingStrategyResponseParam(kind, additionalBinaryDataProperties, @static); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalStaticChunkingStrategyResponseParam)} does not support writing '{options.Format}' format."); + } + } + + InternalStaticChunkingStrategyResponseParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalStaticChunkingStrategyResponseParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyResponseParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalStaticChunkingStrategyResponseParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalStaticChunkingStrategyResponseParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalStaticChunkingStrategyResponseParam.cs b/src/Generated/Models/InternalStaticChunkingStrategyResponseParam.cs new file mode 100644 index 000000000..0eabab989 --- /dev/null +++ b/src/Generated/Models/InternalStaticChunkingStrategyResponseParam.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalStaticChunkingStrategyResponseParam : InternalChunkingStrategyResponseParam + { + internal InternalStaticChunkingStrategyResponseParam(InternalStaticChunkingStrategy @static) : base(InternalChunkingStrategyResponseParamType.Static) + { + Static = @static; + } + + internal InternalStaticChunkingStrategyResponseParam(InternalChunkingStrategyResponseParamType kind, IDictionary additionalBinaryDataProperties, InternalStaticChunkingStrategy @static) : base(kind, additionalBinaryDataProperties) + { + Static = @static; + } + + internal InternalStaticChunkingStrategy Static { get; } + } +} diff --git a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs index 89d62b32c..0251238d9 100644 --- a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs +++ b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class InternalSubmitToolOutputsRunRequest : IJsonModel { - internal InternalSubmitToolOutputsRunRequest() + internal InternalSubmitToolOutputsRunRequest() : this(null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("stream"u8); writer.WriteBooleanValue(Stream.Value); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalSubmitToolOutputsRunRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalSubmitToolOutputsRunRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,6 +114,7 @@ internal static InternalSubmitToolOutputsRunRequest DeserializeInternalSubmitToo stream = prop.Value.GetBoolean(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalSubmitToolOutputsRunRequest(toolOutputs, stream, additionalBinaryDataProperties); @@ -118,13 +122,14 @@ internal static InternalSubmitToolOutputsRunRequest DeserializeInternalSubmitToo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalSubmitToolOutputsRunRequest)} does not support writing '{options.Format}' format."); } @@ -132,6 +137,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalSubmitToolOutputsRunRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalSubmitToolOutputsRunRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -148,21 +154,5 @@ protected virtual InternalSubmitToolOutputsRunRequest PersistableModelCreateCore } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalSubmitToolOutputsRunRequest internalSubmitToolOutputsRunRequest) - { - if (internalSubmitToolOutputsRunRequest == null) - { - return null; - } - return BinaryContent.Create(internalSubmitToolOutputsRunRequest, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalSubmitToolOutputsRunRequest(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalSubmitToolOutputsRunRequest(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.cs b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.cs index d009edf76..ba1b11271 100644 --- a/src/Generated/Models/InternalSubmitToolOutputsRunRequest.cs +++ b/src/Generated/Models/InternalSubmitToolOutputsRunRequest.cs @@ -22,7 +22,8 @@ public InternalSubmitToolOutputsRunRequest(IEnumerable toolOutputs) internal InternalSubmitToolOutputsRunRequest(IList toolOutputs, bool? stream, IDictionary additionalBinaryDataProperties) { - ToolOutputs = toolOutputs; + // Plugin customization: ensure initialization of collections + ToolOutputs = toolOutputs ?? new ChangeTrackingList(); Stream = stream; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalThreadObjectObject.cs b/src/Generated/Models/InternalThreadObjectObject.cs deleted file mode 100644 index edef44eec..000000000 --- a/src/Generated/Models/InternalThreadObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal readonly partial struct InternalThreadObjectObject : IEquatable - { - private readonly string _value; - private const string ThreadValue = "thread"; - - public InternalThreadObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalThreadObjectObject Thread { get; } = new InternalThreadObjectObject(ThreadValue); - - public static bool operator ==(InternalThreadObjectObject left, InternalThreadObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalThreadObjectObject left, InternalThreadObjectObject right) => !left.Equals(right); - - public static implicit operator InternalThreadObjectObject(string value) => new InternalThreadObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalThreadObjectObject other && Equals(other); - - public bool Equals(InternalThreadObjectObject 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/InternalThreadObjectToolResources.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs index 32677acc2..82336bb0b 100644 --- a/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("file_search"u8); writer.WriteObjectValue(FileSearch, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalThreadObjectToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalThreadObjectToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static InternalThreadObjectToolResources DeserializeInternalThreadObjec fileSearch = InternalThreadObjectToolResourcesFileSearch.DeserializeInternalThreadObjectToolResourcesFileSearch(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalThreadObjectToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static InternalThreadObjectToolResources DeserializeInternalThreadObjec BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalThreadObjectToolResources)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalThreadObjectToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalThreadObjectToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual InternalThreadObjectToolResources PersistableModelCreateCore(B } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalThreadObjectToolResources internalThreadObjectToolResources) - { - if (internalThreadObjectToolResources == null) - { - return null; - } - return BinaryContent.Create(internalThreadObjectToolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalThreadObjectToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalThreadObjectToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalThreadObjectToolResources.cs b/src/Generated/Models/InternalThreadObjectToolResources.cs index b7e4c296f..c6c23e413 100644 --- a/src/Generated/Models/InternalThreadObjectToolResources.cs +++ b/src/Generated/Models/InternalThreadObjectToolResources.cs @@ -22,9 +22,9 @@ internal InternalThreadObjectToolResources(InternalThreadObjectToolResourcesCode _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public InternalThreadObjectToolResourcesCodeInterpreter CodeInterpreter { get; } + internal InternalThreadObjectToolResourcesCodeInterpreter CodeInterpreter { get; } - public InternalThreadObjectToolResourcesFileSearch FileSearch { get; } + internal InternalThreadObjectToolResourcesFileSearch FileSearch { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs index d605c0c0d..05a49a37a 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8Json writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalThreadObjectToolResourcesCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalThreadObjectToolResourcesCodeInterpreter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalThreadObjectToolResourcesCodeInterpreter DeserializeInte fileIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalThreadObjectToolResourcesCodeInterpreter(fileIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalThreadObjectToolResourcesCodeInterpreter DeserializeInte BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalThreadObjectToolResourcesCodeInterpreter)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalThreadObjectToolResourcesCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalThreadObjectToolResourcesCodeInterpreter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalThreadObjectToolResourcesCodeInterpreter PersistableMo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalThreadObjectToolResourcesCodeInterpreter internalThreadObjectToolResourcesCodeInterpreter) - { - if (internalThreadObjectToolResourcesCodeInterpreter == null) - { - return null; - } - return BinaryContent.Create(internalThreadObjectToolResourcesCodeInterpreter, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalThreadObjectToolResourcesCodeInterpreter(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalThreadObjectToolResourcesCodeInterpreter(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.cs b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.cs index d83af6916..b6ab66568 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesCodeInterpreter.cs @@ -12,14 +12,14 @@ internal partial class InternalThreadObjectToolResourcesCodeInterpreter { private protected IDictionary _additionalBinaryDataProperties; - internal InternalThreadObjectToolResourcesCodeInterpreter() + internal InternalThreadObjectToolResourcesCodeInterpreter() : this(null, null) { - FileIds = new ChangeTrackingList(); } internal InternalThreadObjectToolResourcesCodeInterpreter(IList fileIds, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs index 1b6f8a38f..e945a5b88 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalThreadObjectToolResourcesFileSearch IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalThreadObjectToolResourcesFileSearch JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalThreadObjectToolResourcesFileSearch DeserializeInternalT vectorStoreIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalThreadObjectToolResourcesFileSearch(vectorStoreIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalThreadObjectToolResourcesFileSearch DeserializeInternalT BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalThreadObjectToolResourcesFileSearch)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalThreadObjectToolResourcesFileSearch IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalThreadObjectToolResourcesFileSearch PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalThreadObjectToolResourcesFileSearch PersistableModelCr } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalThreadObjectToolResourcesFileSearch internalThreadObjectToolResourcesFileSearch) - { - if (internalThreadObjectToolResourcesFileSearch == null) - { - return null; - } - return BinaryContent.Create(internalThreadObjectToolResourcesFileSearch, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalThreadObjectToolResourcesFileSearch(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalThreadObjectToolResourcesFileSearch(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.cs b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.cs index 6bcad4a1f..a9be0927d 100644 --- a/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.cs +++ b/src/Generated/Models/InternalThreadObjectToolResourcesFileSearch.cs @@ -12,14 +12,14 @@ internal partial class InternalThreadObjectToolResourcesFileSearch { private protected IDictionary _additionalBinaryDataProperties; - internal InternalThreadObjectToolResourcesFileSearch() + internal InternalThreadObjectToolResourcesFileSearch() : this(null, null) { - VectorStoreIds = new ChangeTrackingList(); } internal InternalThreadObjectToolResourcesFileSearch(IList vectorStoreIds, IDictionary additionalBinaryDataProperties) { - VectorStoreIds = vectorStoreIds; + // Plugin customization: ensure initialization of collections + VectorStoreIds = vectorStoreIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalTodoFineTuneChatRequestInput.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneChatRequestInput.Serialization.cs index 897d43baa..2520831c7 100644 --- a/src/Generated/Models/InternalTodoFineTuneChatRequestInput.Serialization.cs +++ b/src/Generated/Models/InternalTodoFineTuneChatRequestInput.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.Chat; @@ -21,6 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter write writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -75,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -98,6 +100,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalTodoFineTuneChatRequestInput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalTodoFineTuneChatRequestInput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -180,6 +183,7 @@ internal static InternalTodoFineTuneChatRequestInput DeserializeInternalTodoFine functions = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalTodoFineTuneChatRequestInput(messages ?? new ChangeTrackingList(), tools ?? new ChangeTrackingList(), parallelToolCalls, functions ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -187,13 +191,14 @@ internal static InternalTodoFineTuneChatRequestInput DeserializeInternalTodoFine BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalTodoFineTuneChatRequestInput)} does not support writing '{options.Format}' format."); } @@ -201,6 +206,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalTodoFineTuneChatRequestInput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalTodoFineTuneChatRequestInput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -217,21 +223,5 @@ protected virtual InternalTodoFineTuneChatRequestInput PersistableModelCreateCor } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalTodoFineTuneChatRequestInput internalTodoFineTuneChatRequestInput) - { - if (internalTodoFineTuneChatRequestInput == null) - { - return null; - } - return BinaryContent.Create(internalTodoFineTuneChatRequestInput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalTodoFineTuneChatRequestInput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalTodoFineTuneChatRequestInput(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalTodoFineTuneChatRequestInput.cs b/src/Generated/Models/InternalTodoFineTuneChatRequestInput.cs index 165135c4c..2c0978e66 100644 --- a/src/Generated/Models/InternalTodoFineTuneChatRequestInput.cs +++ b/src/Generated/Models/InternalTodoFineTuneChatRequestInput.cs @@ -13,19 +13,17 @@ internal partial class InternalTodoFineTuneChatRequestInput { private protected IDictionary _additionalBinaryDataProperties; - public InternalTodoFineTuneChatRequestInput() + public InternalTodoFineTuneChatRequestInput() : this(null, null, default, null, null) { - Messages = new ChangeTrackingList(); - Tools = new ChangeTrackingList(); - Functions = new ChangeTrackingList(); } internal InternalTodoFineTuneChatRequestInput(IList messages, IList tools, bool? parallelToolCalls, IList functions, IDictionary additionalBinaryDataProperties) { - Messages = messages; - Tools = tools; + // Plugin customization: ensure initialization of collections + Messages = messages ?? new ChangeTrackingList(); + Tools = tools ?? new ChangeTrackingList(); ParallelToolCalls = parallelToolCalls; - Functions = functions; + Functions = functions ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.Serialization.cs deleted file mode 100644 index c4f62fc89..000000000 --- a/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.Serialization.cs +++ /dev/null @@ -1,149 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneCompletionRequestInput : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneCompletionRequestInput)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(Prompt) && _additionalBinaryDataProperties?.ContainsKey("prompt") != true) - { - writer.WritePropertyName("prompt"u8); - writer.WriteStringValue(Prompt); - } - if (Optional.IsDefined(Completion) && _additionalBinaryDataProperties?.ContainsKey("completion") != true) - { - writer.WritePropertyName("completion"u8); - writer.WriteStringValue(Completion); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalTodoFineTuneCompletionRequestInput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalTodoFineTuneCompletionRequestInput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneCompletionRequestInput)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalTodoFineTuneCompletionRequestInput(document.RootElement, options); - } - - internal static InternalTodoFineTuneCompletionRequestInput DeserializeInternalTodoFineTuneCompletionRequestInput(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string prompt = default; - string completion = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("prompt"u8)) - { - prompt = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("completion"u8)) - { - completion = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalTodoFineTuneCompletionRequestInput(prompt, completion, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneCompletionRequestInput)} does not support writing '{options.Format}' format."); - } - } - - InternalTodoFineTuneCompletionRequestInput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalTodoFineTuneCompletionRequestInput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalTodoFineTuneCompletionRequestInput(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneCompletionRequestInput)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalTodoFineTuneCompletionRequestInput internalTodoFineTuneCompletionRequestInput) - { - if (internalTodoFineTuneCompletionRequestInput == null) - { - return null; - } - return BinaryContent.Create(internalTodoFineTuneCompletionRequestInput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalTodoFineTuneCompletionRequestInput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalTodoFineTuneCompletionRequestInput(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.cs b/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.cs deleted file mode 100644 index f7292b95b..000000000 --- a/src/Generated/Models/InternalTodoFineTuneCompletionRequestInput.cs +++ /dev/null @@ -1,35 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneCompletionRequestInput - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalTodoFineTuneCompletionRequestInput() - { - } - - internal InternalTodoFineTuneCompletionRequestInput(string prompt, string completion, IDictionary additionalBinaryDataProperties) - { - Prompt = prompt; - Completion = completion; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public string Prompt { get; set; } - - public string Completion { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneDPOMethod.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneDPOMethod.Serialization.cs deleted file mode 100644 index a36ddd8b1..000000000 --- a/src/Generated/Models/InternalTodoFineTuneDPOMethod.Serialization.cs +++ /dev/null @@ -1,142 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneDPOMethod : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneDPOMethod)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(Hyperparameters) && _additionalBinaryDataProperties?.ContainsKey("hyperparameters") != true) - { - writer.WritePropertyName("hyperparameters"u8); - writer.WriteObjectValue(Hyperparameters, options); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalTodoFineTuneDPOMethod IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalTodoFineTuneDPOMethod JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneDPOMethod)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalTodoFineTuneDPOMethod(document.RootElement, options); - } - - internal static InternalTodoFineTuneDPOMethod DeserializeInternalTodoFineTuneDPOMethod(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalTodoFineTuneDPOMethodHyperparameters hyperparameters = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("hyperparameters"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - hyperparameters = InternalTodoFineTuneDPOMethodHyperparameters.DeserializeInternalTodoFineTuneDPOMethodHyperparameters(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalTodoFineTuneDPOMethod(hyperparameters, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneDPOMethod)} does not support writing '{options.Format}' format."); - } - } - - InternalTodoFineTuneDPOMethod IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalTodoFineTuneDPOMethod PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalTodoFineTuneDPOMethod(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneDPOMethod)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalTodoFineTuneDPOMethod internalTodoFineTuneDPOMethod) - { - if (internalTodoFineTuneDPOMethod == null) - { - return null; - } - return BinaryContent.Create(internalTodoFineTuneDPOMethod, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalTodoFineTuneDPOMethod(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalTodoFineTuneDPOMethod(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneDPOMethod.cs b/src/Generated/Models/InternalTodoFineTuneDPOMethod.cs deleted file mode 100644 index 15ee9dbcd..000000000 --- a/src/Generated/Models/InternalTodoFineTuneDPOMethod.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneDPOMethod - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalTodoFineTuneDPOMethod() - { - } - - internal InternalTodoFineTuneDPOMethod(InternalTodoFineTuneDPOMethodHyperparameters hyperparameters, IDictionary additionalBinaryDataProperties) - { - Hyperparameters = hyperparameters; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalTodoFineTuneDPOMethodHyperparameters Hyperparameters { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.Serialization.cs deleted file mode 100644 index d5cf833e4..000000000 --- a/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.Serialization.cs +++ /dev/null @@ -1,215 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneDPOMethodHyperparameters : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneDPOMethodHyperparameters)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(Beta) && _additionalBinaryDataProperties?.ContainsKey("beta") != true) - { - writer.WritePropertyName("beta"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(Beta); -#else - using (JsonDocument document = JsonDocument.Parse(Beta)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (Optional.IsDefined(BatchSize) && _additionalBinaryDataProperties?.ContainsKey("batch_size") != true) - { - writer.WritePropertyName("batch_size"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(BatchSize); -#else - using (JsonDocument document = JsonDocument.Parse(BatchSize)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (Optional.IsDefined(LearningRateMultiplier) && _additionalBinaryDataProperties?.ContainsKey("learning_rate_multiplier") != true) - { - writer.WritePropertyName("learning_rate_multiplier"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(LearningRateMultiplier); -#else - using (JsonDocument document = JsonDocument.Parse(LearningRateMultiplier)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (Optional.IsDefined(NEpochs) && _additionalBinaryDataProperties?.ContainsKey("n_epochs") != true) - { - writer.WritePropertyName("n_epochs"u8); -#if NET6_0_OR_GREATER - writer.WriteRawValue(NEpochs); -#else - using (JsonDocument document = JsonDocument.Parse(NEpochs)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalTodoFineTuneDPOMethodHyperparameters IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalTodoFineTuneDPOMethodHyperparameters JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneDPOMethodHyperparameters)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalTodoFineTuneDPOMethodHyperparameters(document.RootElement, options); - } - - internal static InternalTodoFineTuneDPOMethodHyperparameters DeserializeInternalTodoFineTuneDPOMethodHyperparameters(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - BinaryData beta = default; - BinaryData batchSize = default; - BinaryData learningRateMultiplier = default; - BinaryData nEpochs = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("beta"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - beta = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - if (prop.NameEquals("batch_size"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - batchSize = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - if (prop.NameEquals("learning_rate_multiplier"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - learningRateMultiplier = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - if (prop.NameEquals("n_epochs"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - nEpochs = BinaryData.FromString(prop.Value.GetRawText()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalTodoFineTuneDPOMethodHyperparameters(beta, batchSize, learningRateMultiplier, nEpochs, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneDPOMethodHyperparameters)} does not support writing '{options.Format}' format."); - } - } - - InternalTodoFineTuneDPOMethodHyperparameters IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalTodoFineTuneDPOMethodHyperparameters PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalTodoFineTuneDPOMethodHyperparameters(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneDPOMethodHyperparameters)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalTodoFineTuneDPOMethodHyperparameters internalTodoFineTuneDPOMethodHyperparameters) - { - if (internalTodoFineTuneDPOMethodHyperparameters == null) - { - return null; - } - return BinaryContent.Create(internalTodoFineTuneDPOMethodHyperparameters, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalTodoFineTuneDPOMethodHyperparameters(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalTodoFineTuneDPOMethodHyperparameters(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.cs b/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.cs deleted file mode 100644 index 2d0fc8cd5..000000000 --- a/src/Generated/Models/InternalTodoFineTuneDPOMethodHyperparameters.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneDPOMethodHyperparameters - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalTodoFineTuneDPOMethodHyperparameters() - { - } - - internal InternalTodoFineTuneDPOMethodHyperparameters(BinaryData beta, BinaryData batchSize, BinaryData learningRateMultiplier, BinaryData nEpochs, IDictionary additionalBinaryDataProperties) - { - Beta = beta; - BatchSize = batchSize; - LearningRateMultiplier = learningRateMultiplier; - NEpochs = nEpochs; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public BinaryData Beta { get; set; } - - public BinaryData BatchSize { get; set; } - - public BinaryData LearningRateMultiplier { get; set; } - - public BinaryData NEpochs { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneMethod.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneMethod.Serialization.cs deleted file mode 100644 index d085af683..000000000 --- a/src/Generated/Models/InternalTodoFineTuneMethod.Serialization.cs +++ /dev/null @@ -1,172 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneMethod : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneMethod)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(Type) && _additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.Value.ToString()); - } - if (Optional.IsDefined(Supervised) && _additionalBinaryDataProperties?.ContainsKey("supervised") != true) - { - writer.WritePropertyName("supervised"u8); - writer.WriteObjectValue(Supervised, options); - } - if (Optional.IsDefined(Dpo) && _additionalBinaryDataProperties?.ContainsKey("dpo") != true) - { - writer.WritePropertyName("dpo"u8); - writer.WriteObjectValue(Dpo, options); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalTodoFineTuneMethod IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalTodoFineTuneMethod JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneMethod)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalTodoFineTuneMethod(document.RootElement, options); - } - - internal static InternalTodoFineTuneMethod DeserializeInternalTodoFineTuneMethod(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalTodoFineTuneMethodType? @type = default; - InternalTodoFineTuneSupervisedMethod supervised = default; - InternalTodoFineTuneDPOMethod dpo = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - @type = new InternalTodoFineTuneMethodType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("supervised"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - supervised = InternalTodoFineTuneSupervisedMethod.DeserializeInternalTodoFineTuneSupervisedMethod(prop.Value, options); - continue; - } - if (prop.NameEquals("dpo"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - dpo = InternalTodoFineTuneDPOMethod.DeserializeInternalTodoFineTuneDPOMethod(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalTodoFineTuneMethod(@type, supervised, dpo, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneMethod)} does not support writing '{options.Format}' format."); - } - } - - InternalTodoFineTuneMethod IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalTodoFineTuneMethod PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalTodoFineTuneMethod(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneMethod)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalTodoFineTuneMethod internalTodoFineTuneMethod) - { - if (internalTodoFineTuneMethod == null) - { - return null; - } - return BinaryContent.Create(internalTodoFineTuneMethod, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalTodoFineTuneMethod(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalTodoFineTuneMethod(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneMethod.cs b/src/Generated/Models/InternalTodoFineTuneMethod.cs deleted file mode 100644 index f3c742bca..000000000 --- a/src/Generated/Models/InternalTodoFineTuneMethod.cs +++ /dev/null @@ -1,38 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneMethod - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalTodoFineTuneMethod() - { - } - - internal InternalTodoFineTuneMethod(InternalTodoFineTuneMethodType? @type, InternalTodoFineTuneSupervisedMethod supervised, InternalTodoFineTuneDPOMethod dpo, IDictionary additionalBinaryDataProperties) - { - Type = @type; - Supervised = supervised; - Dpo = dpo; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalTodoFineTuneMethodType? Type { get; set; } - - public InternalTodoFineTuneSupervisedMethod Supervised { get; set; } - - public InternalTodoFineTuneDPOMethod Dpo { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneMethodType.cs b/src/Generated/Models/InternalTodoFineTuneMethodType.cs deleted file mode 100644 index 9d4bff177..000000000 --- a/src/Generated/Models/InternalTodoFineTuneMethodType.cs +++ /dev/null @@ -1,44 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal readonly partial struct InternalTodoFineTuneMethodType : IEquatable - { - private readonly string _value; - private const string SupervisedValue = "supervised"; - private const string DpoValue = "dpo"; - - public InternalTodoFineTuneMethodType(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalTodoFineTuneMethodType Supervised { get; } = new InternalTodoFineTuneMethodType(SupervisedValue); - - public static InternalTodoFineTuneMethodType Dpo { get; } = new InternalTodoFineTuneMethodType(DpoValue); - - public static bool operator ==(InternalTodoFineTuneMethodType left, InternalTodoFineTuneMethodType right) => left.Equals(right); - - public static bool operator !=(InternalTodoFineTuneMethodType left, InternalTodoFineTuneMethodType right) => !left.Equals(right); - - public static implicit operator InternalTodoFineTuneMethodType(string value) => new InternalTodoFineTuneMethodType(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalTodoFineTuneMethodType other && Equals(other); - - public bool Equals(InternalTodoFineTuneMethodType 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/InternalTodoFineTuneSupervisedMethod.Serialization.cs b/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.Serialization.cs deleted file mode 100644 index 19da7c368..000000000 --- a/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.Serialization.cs +++ /dev/null @@ -1,142 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneSupervisedMethod : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneSupervisedMethod)} does not support writing '{format}' format."); - } - if (Optional.IsDefined(Hyperparameters) && _additionalBinaryDataProperties?.ContainsKey("hyperparameters") != true) - { - writer.WritePropertyName("hyperparameters"u8); - writer.WriteObjectValue(Hyperparameters, options); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - InternalTodoFineTuneSupervisedMethod IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalTodoFineTuneSupervisedMethod JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalTodoFineTuneSupervisedMethod)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalTodoFineTuneSupervisedMethod(document.RootElement, options); - } - - internal static InternalTodoFineTuneSupervisedMethod DeserializeInternalTodoFineTuneSupervisedMethod(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalFineTuneSupervisedMethodHyperparameters hyperparameters = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("hyperparameters"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - hyperparameters = InternalFineTuneSupervisedMethodHyperparameters.DeserializeInternalFineTuneSupervisedMethodHyperparameters(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalTodoFineTuneSupervisedMethod(hyperparameters, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneSupervisedMethod)} does not support writing '{options.Format}' format."); - } - } - - InternalTodoFineTuneSupervisedMethod IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalTodoFineTuneSupervisedMethod PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalTodoFineTuneSupervisedMethod(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalTodoFineTuneSupervisedMethod)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalTodoFineTuneSupervisedMethod internalTodoFineTuneSupervisedMethod) - { - if (internalTodoFineTuneSupervisedMethod == null) - { - return null; - } - return BinaryContent.Create(internalTodoFineTuneSupervisedMethod, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalTodoFineTuneSupervisedMethod(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalTodoFineTuneSupervisedMethod(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.cs b/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.cs deleted file mode 100644 index 3cc8531a5..000000000 --- a/src/Generated/Models/InternalTodoFineTuneSupervisedMethod.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.FineTuning -{ - internal partial class InternalTodoFineTuneSupervisedMethod - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalTodoFineTuneSupervisedMethod() - { - } - - internal InternalTodoFineTuneSupervisedMethod(InternalFineTuneSupervisedMethodHyperparameters hyperparameters, IDictionary additionalBinaryDataProperties) - { - Hyperparameters = hyperparameters; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - public InternalFineTuneSupervisedMethodHyperparameters Hyperparameters { get; set; } - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalToolChoiceObject.Serialization.cs b/src/Generated/Models/InternalToolChoiceObject.Serialization.cs new file mode 100644 index 000000000..37d5a2c48 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObject.Serialization.cs @@ -0,0 +1,140 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + [PersistableModelProxy(typeof(InternalUnknownToolChoiceObject))] + internal abstract partial class InternalToolChoiceObject : IJsonModel + { + internal InternalToolChoiceObject() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObject)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalToolChoiceObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObject(document.RootElement, options); + } + + internal static InternalToolChoiceObject DeserializeInternalToolChoiceObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "file_search": + return InternalToolChoiceObjectFileSearch.DeserializeInternalToolChoiceObjectFileSearch(element, options); + case "computer_use_preview": + return InternalToolChoiceObjectComputer.DeserializeInternalToolChoiceObjectComputer(element, options); + case "web_search_preview": + return InternalToolChoiceObjectWebSearch.DeserializeInternalToolChoiceObjectWebSearch(element, options); + case "image_generation": + return InternalToolChoiceObjectImageGen.DeserializeInternalToolChoiceObjectImageGen(element, options); + case "code_interpreter": + return InternalToolChoiceObjectCodeInterpreter.DeserializeInternalToolChoiceObjectCodeInterpreter(element, options); + case "mcp": + return InternalToolChoiceObjectMCP.DeserializeInternalToolChoiceObjectMCP(element, options); + case "function": + return InternalToolChoiceObjectFunction.DeserializeInternalToolChoiceObjectFunction(element, options); + } + } + return InternalUnknownToolChoiceObject.DeserializeInternalUnknownToolChoiceObject(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObject)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalToolChoiceObject.cs b/src/Generated/Models/InternalToolChoiceObject.cs new file mode 100644 index 000000000..bf775ccae --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObject.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal abstract partial class InternalToolChoiceObject + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected InternalToolChoiceObject(InternalToolChoiceObjectType kind) + { + Kind = kind; + } + + internal InternalToolChoiceObject(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalToolChoiceObjectType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectCodeInterpreter.Serialization.cs b/src/Generated/Models/InternalToolChoiceObjectCodeInterpreter.Serialization.cs new file mode 100644 index 000000000..126c77a72 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectCodeInterpreter.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectCodeInterpreter : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectCodeInterpreter)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalToolChoiceObjectCodeInterpreter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalToolChoiceObjectCodeInterpreter)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectCodeInterpreter)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObjectCodeInterpreter(document.RootElement, options); + } + + internal static InternalToolChoiceObjectCodeInterpreter DeserializeInternalToolChoiceObjectCodeInterpreter(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolChoiceObjectType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolChoiceObjectType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalToolChoiceObjectCodeInterpreter(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObjectCodeInterpreter)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObjectCodeInterpreter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalToolChoiceObjectCodeInterpreter)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObjectCodeInterpreter(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObjectCodeInterpreter)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectCodeInterpreter.cs b/src/Generated/Models/InternalToolChoiceObjectCodeInterpreter.cs new file mode 100644 index 000000000..73804b909 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectCodeInterpreter.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectCodeInterpreter : InternalToolChoiceObject + { + public InternalToolChoiceObjectCodeInterpreter() : this(InternalToolChoiceObjectType.CodeInterpreter, null) + { + } + + internal InternalToolChoiceObjectCodeInterpreter(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectComputer.Serialization.cs b/src/Generated/Models/InternalToolChoiceObjectComputer.Serialization.cs new file mode 100644 index 000000000..89b6fd5c5 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectComputer.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectComputer : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectComputer)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalToolChoiceObjectComputer IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalToolChoiceObjectComputer)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectComputer)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObjectComputer(document.RootElement, options); + } + + internal static InternalToolChoiceObjectComputer DeserializeInternalToolChoiceObjectComputer(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolChoiceObjectType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolChoiceObjectType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalToolChoiceObjectComputer(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObjectComputer)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObjectComputer IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalToolChoiceObjectComputer)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObjectComputer(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObjectComputer)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectComputer.cs b/src/Generated/Models/InternalToolChoiceObjectComputer.cs new file mode 100644 index 000000000..a8c2d7895 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectComputer.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectComputer : InternalToolChoiceObject + { + public InternalToolChoiceObjectComputer() : this(InternalToolChoiceObjectType.Computer, null) + { + } + + internal InternalToolChoiceObjectComputer(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectFileSearch.Serialization.cs b/src/Generated/Models/InternalToolChoiceObjectFileSearch.Serialization.cs new file mode 100644 index 000000000..bb4364585 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectFileSearch.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectFileSearch : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectFileSearch)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalToolChoiceObjectFileSearch IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalToolChoiceObjectFileSearch)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectFileSearch)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObjectFileSearch(document.RootElement, options); + } + + internal static InternalToolChoiceObjectFileSearch DeserializeInternalToolChoiceObjectFileSearch(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolChoiceObjectType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolChoiceObjectType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalToolChoiceObjectFileSearch(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObjectFileSearch)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObjectFileSearch IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalToolChoiceObjectFileSearch)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObjectFileSearch(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObjectFileSearch)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectFileSearch.cs b/src/Generated/Models/InternalToolChoiceObjectFileSearch.cs new file mode 100644 index 000000000..73c81299f --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectFileSearch.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectFileSearch : InternalToolChoiceObject + { + public InternalToolChoiceObjectFileSearch() : this(InternalToolChoiceObjectType.FileSearch, null) + { + } + + internal InternalToolChoiceObjectFileSearch(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectFunction.Serialization.cs b/src/Generated/Models/InternalToolChoiceObjectFunction.Serialization.cs new file mode 100644 index 000000000..7c11689e8 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectFunction.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectFunction : IJsonModel + { + internal InternalToolChoiceObjectFunction() : this(InternalToolChoiceObjectType.Function, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectFunction)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + } + + InternalToolChoiceObjectFunction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalToolChoiceObjectFunction)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectFunction)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObjectFunction(document.RootElement, options); + } + + internal static InternalToolChoiceObjectFunction DeserializeInternalToolChoiceObjectFunction(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolChoiceObjectType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string name = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolChoiceObjectType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalToolChoiceObjectFunction(kind, additionalBinaryDataProperties, name); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObjectFunction)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObjectFunction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalToolChoiceObjectFunction)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObjectFunction(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObjectFunction)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectFunction.cs b/src/Generated/Models/InternalToolChoiceObjectFunction.cs new file mode 100644 index 000000000..9382e44a0 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectFunction.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectFunction : InternalToolChoiceObject + { + public InternalToolChoiceObjectFunction(string name) : base(InternalToolChoiceObjectType.Function) + { + Argument.AssertNotNull(name, nameof(name)); + + Name = name; + } + + internal InternalToolChoiceObjectFunction(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties, string name) : base(kind, additionalBinaryDataProperties) + { + Name = name; + } + + public string Name { get; set; } + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectImageGen.Serialization.cs b/src/Generated/Models/InternalToolChoiceObjectImageGen.Serialization.cs new file mode 100644 index 000000000..bc5e387ce --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectImageGen.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectImageGen : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectImageGen)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalToolChoiceObjectImageGen IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalToolChoiceObjectImageGen)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectImageGen)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObjectImageGen(document.RootElement, options); + } + + internal static InternalToolChoiceObjectImageGen DeserializeInternalToolChoiceObjectImageGen(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolChoiceObjectType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolChoiceObjectType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalToolChoiceObjectImageGen(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObjectImageGen)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObjectImageGen IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalToolChoiceObjectImageGen)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObjectImageGen(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObjectImageGen)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectImageGen.cs b/src/Generated/Models/InternalToolChoiceObjectImageGen.cs new file mode 100644 index 000000000..6496a5296 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectImageGen.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectImageGen : InternalToolChoiceObject + { + public InternalToolChoiceObjectImageGen() : this(InternalToolChoiceObjectType.ImageGeneration, null) + { + } + + internal InternalToolChoiceObjectImageGen(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectMCP.Serialization.cs b/src/Generated/Models/InternalToolChoiceObjectMCP.Serialization.cs new file mode 100644 index 000000000..bb5b1860d --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectMCP.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectMCP : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectMCP)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalToolChoiceObjectMCP IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalToolChoiceObjectMCP)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectMCP)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObjectMCP(document.RootElement, options); + } + + internal static InternalToolChoiceObjectMCP DeserializeInternalToolChoiceObjectMCP(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolChoiceObjectType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolChoiceObjectType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalToolChoiceObjectMCP(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObjectMCP)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObjectMCP IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalToolChoiceObjectMCP)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObjectMCP(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObjectMCP)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectMCP.cs b/src/Generated/Models/InternalToolChoiceObjectMCP.cs new file mode 100644 index 000000000..d6e99cc72 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectMCP.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectMCP : InternalToolChoiceObject + { + public InternalToolChoiceObjectMCP() : this(InternalToolChoiceObjectType.Mcp, null) + { + } + + internal InternalToolChoiceObjectMCP(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectType.cs b/src/Generated/Models/InternalToolChoiceObjectType.cs new file mode 100644 index 000000000..a3be715be --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectType.cs @@ -0,0 +1,59 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalToolChoiceObjectType : IEquatable + { + private readonly string _value; + private const string FileSearchValue = "file_search"; + private const string FunctionValue = "function"; + private const string ComputerValue = "computer_use_preview"; + private const string WebSearchValue = "web_search_preview"; + private const string ImageGenerationValue = "image_generation"; + private const string CodeInterpreterValue = "code_interpreter"; + private const string McpValue = "mcp"; + + public InternalToolChoiceObjectType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalToolChoiceObjectType FileSearch { get; } = new InternalToolChoiceObjectType(FileSearchValue); + + internal static InternalToolChoiceObjectType Function { get; } = new InternalToolChoiceObjectType(FunctionValue); + + internal static InternalToolChoiceObjectType Computer { get; } = new InternalToolChoiceObjectType(ComputerValue); + + internal static InternalToolChoiceObjectType WebSearch { get; } = new InternalToolChoiceObjectType(WebSearchValue); + + internal static InternalToolChoiceObjectType ImageGeneration { get; } = new InternalToolChoiceObjectType(ImageGenerationValue); + + internal static InternalToolChoiceObjectType CodeInterpreter { get; } = new InternalToolChoiceObjectType(CodeInterpreterValue); + + internal static InternalToolChoiceObjectType Mcp { get; } = new InternalToolChoiceObjectType(McpValue); + + public static bool operator ==(InternalToolChoiceObjectType left, InternalToolChoiceObjectType right) => left.Equals(right); + + public static bool operator !=(InternalToolChoiceObjectType left, InternalToolChoiceObjectType right) => !left.Equals(right); + + public static implicit operator InternalToolChoiceObjectType(string value) => new InternalToolChoiceObjectType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalToolChoiceObjectType other && Equals(other); + + public bool Equals(InternalToolChoiceObjectType 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/InternalToolChoiceObjectWebSearch.Serialization.cs b/src/Generated/Models/InternalToolChoiceObjectWebSearch.Serialization.cs new file mode 100644 index 000000000..b0f53915a --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectWebSearch.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectWebSearch : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectWebSearch)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalToolChoiceObjectWebSearch IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalToolChoiceObjectWebSearch)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObjectWebSearch)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObjectWebSearch(document.RootElement, options); + } + + internal static InternalToolChoiceObjectWebSearch DeserializeInternalToolChoiceObjectWebSearch(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolChoiceObjectType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolChoiceObjectType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalToolChoiceObjectWebSearch(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObjectWebSearch)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObjectWebSearch IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalToolChoiceObjectWebSearch)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObjectWebSearch(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObjectWebSearch)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalToolChoiceObjectWebSearch.cs b/src/Generated/Models/InternalToolChoiceObjectWebSearch.cs new file mode 100644 index 000000000..32b79eac0 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceObjectWebSearch.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalToolChoiceObjectWebSearch : InternalToolChoiceObject + { + public InternalToolChoiceObjectWebSearch() : this(InternalToolChoiceObjectType.WebSearch, null) + { + } + + internal InternalToolChoiceObjectWebSearch(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalToolChoiceOptions.cs b/src/Generated/Models/InternalToolChoiceOptions.cs new file mode 100644 index 000000000..3205887a4 --- /dev/null +++ b/src/Generated/Models/InternalToolChoiceOptions.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalToolChoiceOptions : IEquatable + { + private readonly string _value; + private const string NoneValue = "none"; + private const string AutoValue = "auto"; + private const string RequiredValue = "required"; + + public InternalToolChoiceOptions(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalToolChoiceOptions None { get; } = new InternalToolChoiceOptions(NoneValue); + + internal static InternalToolChoiceOptions Auto { get; } = new InternalToolChoiceOptions(AutoValue); + + internal static InternalToolChoiceOptions Required { get; } = new InternalToolChoiceOptions(RequiredValue); + + public static bool operator ==(InternalToolChoiceOptions left, InternalToolChoiceOptions right) => left.Equals(right); + + public static bool operator !=(InternalToolChoiceOptions left, InternalToolChoiceOptions right) => !left.Equals(right); + + public static implicit operator InternalToolChoiceOptions(string value) => new InternalToolChoiceOptions(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalToolChoiceOptions other && Equals(other); + + public bool Equals(InternalToolChoiceOptions 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/InternalToolResourcesFileSearchIdsOnly.Serialization.cs b/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.Serialization.cs index 7108c197e..84d2d2c7b 100644 --- a/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.Serialization.cs +++ b/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -42,6 +43,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -65,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalToolResourcesFileSearchIdsOnly IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalToolResourcesFileSearchIdsOnly JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static InternalToolResourcesFileSearchIdsOnly DeserializeInternalToolRe vectorStoreIds = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalToolResourcesFileSearchIdsOnly(vectorStoreIds ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static InternalToolResourcesFileSearchIdsOnly DeserializeInternalToolRe BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalToolResourcesFileSearchIdsOnly)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalToolResourcesFileSearchIdsOnly IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalToolResourcesFileSearchIdsOnly PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual InternalToolResourcesFileSearchIdsOnly PersistableModelCreateC } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalToolResourcesFileSearchIdsOnly internalToolResourcesFileSearchIdsOnly) - { - if (internalToolResourcesFileSearchIdsOnly == null) - { - return null; - } - return BinaryContent.Create(internalToolResourcesFileSearchIdsOnly, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalToolResourcesFileSearchIdsOnly(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalToolResourcesFileSearchIdsOnly(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.cs b/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.cs index fe7066d59..28511d5d4 100644 --- a/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.cs +++ b/src/Generated/Models/InternalToolResourcesFileSearchIdsOnly.cs @@ -12,14 +12,14 @@ internal partial class InternalToolResourcesFileSearchIdsOnly { private protected IDictionary _additionalBinaryDataProperties; - public InternalToolResourcesFileSearchIdsOnly() + public InternalToolResourcesFileSearchIdsOnly() : this(null, null) { - VectorStoreIds = new ChangeTrackingList(); } internal InternalToolResourcesFileSearchIdsOnly(IList vectorStoreIds, IDictionary additionalBinaryDataProperties) { - VectorStoreIds = vectorStoreIds; + // Plugin customization: ensure initialization of collections + VectorStoreIds = vectorStoreIds ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/InternalToolType.cs b/src/Generated/Models/InternalToolType.cs new file mode 100644 index 000000000..b413b7c51 --- /dev/null +++ b/src/Generated/Models/InternalToolType.cs @@ -0,0 +1,62 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalToolType : IEquatable + { + private readonly string _value; + private const string FileSearchValue = "file_search"; + private const string FunctionValue = "function"; + private const string ComputerUsePreviewValue = "computer_use_preview"; + private const string WebSearchPreviewValue = "web_search_preview"; + private const string McpValue = "mcp"; + private const string CodeInterpreterValue = "code_interpreter"; + private const string ImageGenerationValue = "image_generation"; + private const string LocalShellValue = "local_shell"; + + public InternalToolType(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalToolType FileSearch { get; } = new InternalToolType(FileSearchValue); + + internal static InternalToolType Function { get; } = new InternalToolType(FunctionValue); + + internal static InternalToolType ComputerUsePreview { get; } = new InternalToolType(ComputerUsePreviewValue); + + internal static InternalToolType WebSearchPreview { get; } = new InternalToolType(WebSearchPreviewValue); + + internal static InternalToolType Mcp { get; } = new InternalToolType(McpValue); + + internal static InternalToolType CodeInterpreter { get; } = new InternalToolType(CodeInterpreterValue); + + internal static InternalToolType ImageGeneration { get; } = new InternalToolType(ImageGenerationValue); + + internal static InternalToolType LocalShell { get; } = new InternalToolType(LocalShellValue); + + public static bool operator ==(InternalToolType left, InternalToolType right) => left.Equals(right); + + public static bool operator !=(InternalToolType left, InternalToolType right) => !left.Equals(right); + + public static implicit operator InternalToolType(string value) => new InternalToolType(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalToolType other && Equals(other); + + public bool Equals(InternalToolType 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/InternalTopLogProb.Serialization.cs b/src/Generated/Models/InternalTopLogProb.Serialization.cs new file mode 100644 index 000000000..b25571dcc --- /dev/null +++ b/src/Generated/Models/InternalTopLogProb.Serialization.cs @@ -0,0 +1,164 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalTopLogProb : IJsonModel + { + internal InternalTopLogProb() : this(null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalTopLogProb)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("token") != true) + { + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); + } + if (_additionalBinaryDataProperties?.ContainsKey("logprob") != true) + { + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(Logprob); + } + if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (int item in Bytes) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalTopLogProb IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalTopLogProb JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalTopLogProb)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalTopLogProb(document.RootElement, options); + } + + internal static InternalTopLogProb DeserializeInternalTopLogProb(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string token = default; + float logprob = default; + IList bytes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("token"u8)) + { + token = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprob"u8)) + { + logprob = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetInt32()); + } + bytes = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalTopLogProb(token, logprob, bytes, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalTopLogProb)} does not support writing '{options.Format}' format."); + } + } + + InternalTopLogProb IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalTopLogProb PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalTopLogProb(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalTopLogProb)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalTopLogProb.cs b/src/Generated/Models/InternalTopLogProb.cs new file mode 100644 index 000000000..311366c81 --- /dev/null +++ b/src/Generated/Models/InternalTopLogProb.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalTopLogProb + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalTopLogProb(string token, float logprob, IEnumerable bytes) + { + Argument.AssertNotNull(token, nameof(token)); + Argument.AssertNotNull(bytes, nameof(bytes)); + + Token = token; + Logprob = logprob; + Bytes = bytes.ToList(); + } + + internal InternalTopLogProb(string token, float logprob, IList bytes, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Token = token; + Logprob = logprob; + Bytes = bytes ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Token { get; set; } + + public float Logprob { get; set; } + + public IList Bytes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalTranscriptTextDeltaEventLogprob.Serialization.cs b/src/Generated/Models/InternalTranscriptTextDeltaEventLogprob.Serialization.cs new file mode 100644 index 000000000..d1e48d6aa --- /dev/null +++ b/src/Generated/Models/InternalTranscriptTextDeltaEventLogprob.Serialization.cs @@ -0,0 +1,168 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalTranscriptTextDeltaEventLogprob : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalTranscriptTextDeltaEventLogprob)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Token) && _additionalBinaryDataProperties?.ContainsKey("token") != true) + { + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); + } + if (Optional.IsDefined(Logprob) && _additionalBinaryDataProperties?.ContainsKey("logprob") != true) + { + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(Logprob.Value); + } + if (Optional.IsCollectionDefined(Bytes) && _additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (int item in Bytes) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalTranscriptTextDeltaEventLogprob IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalTranscriptTextDeltaEventLogprob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalTranscriptTextDeltaEventLogprob)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalTranscriptTextDeltaEventLogprob(document.RootElement, options); + } + + internal static InternalTranscriptTextDeltaEventLogprob DeserializeInternalTranscriptTextDeltaEventLogprob(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string token = default; + float? logprob = default; + IList bytes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("token"u8)) + { + token = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprob"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + logprob = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetInt32()); + } + bytes = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalTranscriptTextDeltaEventLogprob(token, logprob, bytes ?? new ChangeTrackingList(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalTranscriptTextDeltaEventLogprob)} does not support writing '{options.Format}' format."); + } + } + + InternalTranscriptTextDeltaEventLogprob IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalTranscriptTextDeltaEventLogprob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalTranscriptTextDeltaEventLogprob(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalTranscriptTextDeltaEventLogprob)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalTranscriptTextDeltaEventLogprob.cs b/src/Generated/Models/InternalTranscriptTextDeltaEventLogprob.cs new file mode 100644 index 000000000..856007ce3 --- /dev/null +++ b/src/Generated/Models/InternalTranscriptTextDeltaEventLogprob.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalTranscriptTextDeltaEventLogprob + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalTranscriptTextDeltaEventLogprob() : this(null, default, null, null) + { + } + + internal InternalTranscriptTextDeltaEventLogprob(string token, float? logprob, IList bytes, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Token = token; + Logprob = logprob; + Bytes = bytes ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Token { get; } + + public float? Logprob { get; } + + public IList Bytes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalTranscriptTextDoneEventLogprob.Serialization.cs b/src/Generated/Models/InternalTranscriptTextDoneEventLogprob.Serialization.cs new file mode 100644 index 000000000..b472c00b9 --- /dev/null +++ b/src/Generated/Models/InternalTranscriptTextDoneEventLogprob.Serialization.cs @@ -0,0 +1,168 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalTranscriptTextDoneEventLogprob : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalTranscriptTextDoneEventLogprob)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Token) && _additionalBinaryDataProperties?.ContainsKey("token") != true) + { + writer.WritePropertyName("token"u8); + writer.WriteStringValue(Token); + } + if (Optional.IsDefined(Logprob) && _additionalBinaryDataProperties?.ContainsKey("logprob") != true) + { + writer.WritePropertyName("logprob"u8); + writer.WriteNumberValue(Logprob.Value); + } + if (Optional.IsCollectionDefined(Bytes) && _additionalBinaryDataProperties?.ContainsKey("bytes") != true) + { + writer.WritePropertyName("bytes"u8); + writer.WriteStartArray(); + foreach (int item in Bytes) + { + writer.WriteNumberValue(item); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalTranscriptTextDoneEventLogprob IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalTranscriptTextDoneEventLogprob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalTranscriptTextDoneEventLogprob)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalTranscriptTextDoneEventLogprob(document.RootElement, options); + } + + internal static InternalTranscriptTextDoneEventLogprob DeserializeInternalTranscriptTextDoneEventLogprob(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string token = default; + float? logprob = default; + IList bytes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("token"u8)) + { + token = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprob"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + logprob = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("bytes"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(item.GetInt32()); + } + bytes = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalTranscriptTextDoneEventLogprob(token, logprob, bytes ?? new ChangeTrackingList(), additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalTranscriptTextDoneEventLogprob)} does not support writing '{options.Format}' format."); + } + } + + InternalTranscriptTextDoneEventLogprob IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalTranscriptTextDoneEventLogprob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalTranscriptTextDoneEventLogprob(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalTranscriptTextDoneEventLogprob)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalTranscriptTextDoneEventLogprob.cs b/src/Generated/Models/InternalTranscriptTextDoneEventLogprob.cs new file mode 100644 index 000000000..003ea1201 --- /dev/null +++ b/src/Generated/Models/InternalTranscriptTextDoneEventLogprob.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalTranscriptTextDoneEventLogprob + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalTranscriptTextDoneEventLogprob() : this(null, default, null, null) + { + } + + internal InternalTranscriptTextDoneEventLogprob(string token, float? logprob, IList bytes, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Token = token; + Logprob = logprob; + Bytes = bytes ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Token { get; } + + public float? Logprob { get; } + + public IList Bytes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalTranscriptionInclude.cs b/src/Generated/Models/InternalTranscriptionInclude.cs new file mode 100644 index 000000000..15cbe8562 --- /dev/null +++ b/src/Generated/Models/InternalTranscriptionInclude.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Audio +{ + internal readonly partial struct InternalTranscriptionInclude : IEquatable + { + private readonly string _value; + private const string LogprobsValue = "logprobs"; + + public InternalTranscriptionInclude(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalTranscriptionInclude Logprobs { get; } = new InternalTranscriptionInclude(LogprobsValue); + + public static bool operator ==(InternalTranscriptionInclude left, InternalTranscriptionInclude right) => left.Equals(right); + + public static bool operator !=(InternalTranscriptionInclude left, InternalTranscriptionInclude right) => !left.Equals(right); + + public static implicit operator InternalTranscriptionInclude(string value) => new InternalTranscriptionInclude(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalTranscriptionInclude other && Equals(other); + + public bool Equals(InternalTranscriptionInclude 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/InternalTruncationObjectType.cs b/src/Generated/Models/InternalTruncationObjectType.cs index 284073991..55d2371bc 100644 --- a/src/Generated/Models/InternalTruncationObjectType.cs +++ b/src/Generated/Models/InternalTruncationObjectType.cs @@ -21,9 +21,9 @@ public InternalTruncationObjectType(string value) _value = value; } - public static InternalTruncationObjectType Auto { get; } = new InternalTruncationObjectType(AutoValue); + internal static InternalTruncationObjectType Auto { get; } = new InternalTruncationObjectType(AutoValue); - public static InternalTruncationObjectType LastMessages { get; } = new InternalTruncationObjectType(LastMessagesValue); + internal static InternalTruncationObjectType LastMessages { get; } = new InternalTruncationObjectType(LastMessagesValue); public static bool operator ==(InternalTruncationObjectType left, InternalTruncationObjectType right) => left.Equals(right); diff --git a/src/Generated/Models/InternalUnknownAnnotation.Serialization.cs b/src/Generated/Models/InternalUnknownAnnotation.Serialization.cs new file mode 100644 index 000000000..44544ab7c --- /dev/null +++ b/src/Generated/Models/InternalUnknownAnnotation.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownAnnotation : IJsonModel + { + internal InternalUnknownAnnotation() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseMessageAnnotation)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ResponseMessageAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseMessageAnnotation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseMessageAnnotation(document.RootElement, options); + } + + internal static InternalUnknownAnnotation DeserializeInternalUnknownAnnotation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ResponseMessageAnnotationKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToResponseMessageAnnotationKind(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownAnnotation(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ResponseMessageAnnotation)} does not support writing '{options.Format}' format."); + } + } + + ResponseMessageAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseMessageAnnotation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseMessageAnnotation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownAnnotation.cs b/src/Generated/Models/InternalUnknownAnnotation.cs new file mode 100644 index 000000000..2adf08eac --- /dev/null +++ b/src/Generated/Models/InternalUnknownAnnotation.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownAnnotation : ResponseMessageAnnotation + { + internal InternalUnknownAnnotation(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownAssistantResponseFormat.Serialization.cs b/src/Generated/Models/InternalUnknownAssistantResponseFormat.Serialization.cs deleted file mode 100644 index 3aba74623..000000000 --- a/src/Generated/Models/InternalUnknownAssistantResponseFormat.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Assistants -{ - internal partial class InternalUnknownAssistantResponseFormat : IJsonModel - { - internal InternalUnknownAssistantResponseFormat() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - AssistantResponseFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeAssistantResponseFormat(document.RootElement, options); - } - - internal static InternalUnknownAssistantResponseFormat DeserializeInternalUnknownAssistantResponseFormat(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "unknown"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownAssistantResponseFormat(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support writing '{options.Format}' format."); - } - } - - AssistantResponseFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeAssistantResponseFormat(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownAssistantResponseFormat.cs b/src/Generated/Models/InternalUnknownAssistantResponseFormat.cs deleted file mode 100644 index ba9acc69d..000000000 --- a/src/Generated/Models/InternalUnknownAssistantResponseFormat.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Assistants -{ - internal partial class InternalUnknownAssistantResponseFormat : AssistantResponseFormat - { - internal InternalUnknownAssistantResponseFormat(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownChatCompletionRequestMessageContentPart.Serialization.cs b/src/Generated/Models/InternalUnknownChatCompletionRequestMessageContentPart.Serialization.cs new file mode 100644 index 000000000..d4ae88a7f --- /dev/null +++ b/src/Generated/Models/InternalUnknownChatCompletionRequestMessageContentPart.Serialization.cs @@ -0,0 +1,102 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Chat +{ + internal partial class InternalUnknownChatCompletionRequestMessageContentPart : IJsonModel + { + internal InternalUnknownChatCompletionRequestMessageContentPart() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ChatMessageContentPart)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ChatMessageContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ChatMessageContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ChatMessageContentPart)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeChatMessageContentPart(document.RootElement, options); + } + + internal static InternalUnknownChatCompletionRequestMessageContentPart DeserializeInternalUnknownChatCompletionRequestMessageContentPart(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownChatCompletionRequestMessageContentPart(additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ChatMessageContentPart)} does not support writing '{options.Format}' format."); + } + } + + ChatMessageContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ChatMessageContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeChatMessageContentPart(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ChatMessageContentPart)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownChatCompletionRequestMessageContentPart.cs b/src/Generated/Models/InternalUnknownChatCompletionRequestMessageContentPart.cs new file mode 100644 index 000000000..0f4d5813f --- /dev/null +++ b/src/Generated/Models/InternalUnknownChatCompletionRequestMessageContentPart.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Chat +{ + internal partial class InternalUnknownChatCompletionRequestMessageContentPart : ChatMessageContentPart + { + internal InternalUnknownChatCompletionRequestMessageContentPart(IDictionary additionalBinaryDataProperties) : base(additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownChatMessage.Serialization.cs b/src/Generated/Models/InternalUnknownChatMessage.Serialization.cs index aeb26e5fa..44db58467 100644 --- a/src/Generated/Models/InternalUnknownChatMessage.Serialization.cs +++ b/src/Generated/Models/InternalUnknownChatMessage.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,10 +13,11 @@ namespace OpenAI.Chat { internal partial class InternalUnknownChatMessage : IJsonModel { - internal InternalUnknownChatMessage() + internal InternalUnknownChatMessage() : this(null, default, null) { } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -28,6 +30,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ChatMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -60,6 +63,7 @@ internal static InternalUnknownChatMessage DeserializeInternalUnknownChatMessage role = prop.Value.GetString().ToChatMessageRole(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUnknownChatMessage(content, role, additionalBinaryDataProperties); @@ -67,13 +71,14 @@ internal static InternalUnknownChatMessage DeserializeInternalUnknownChatMessage BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatMessage)} does not support writing '{options.Format}' format."); } @@ -81,6 +86,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/InternalUnknownChatOutputPrediction.Serialization.cs b/src/Generated/Models/InternalUnknownChatOutputPrediction.Serialization.cs index b33db7cbe..ae3f9138b 100644 --- a/src/Generated/Models/InternalUnknownChatOutputPrediction.Serialization.cs +++ b/src/Generated/Models/InternalUnknownChatOutputPrediction.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Chat { internal partial class InternalUnknownChatOutputPrediction : IJsonModel { - internal InternalUnknownChatOutputPrediction() + internal InternalUnknownChatOutputPrediction() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ChatOutputPrediction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatOutputPrediction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static InternalUnknownChatOutputPrediction DeserializeInternalUnknownCh { return null; } - InternalChatOutputPredictionKind @type = default; + InternalChatOutputPredictionKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalChatOutputPredictionKind(prop.Value.GetString()); + kind = new InternalChatOutputPredictionKind(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalUnknownChatOutputPrediction(@type, additionalBinaryDataProperties); + return new InternalUnknownChatOutputPrediction(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatOutputPrediction)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatOutputPrediction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatOutputPrediction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/InternalUnknownChatOutputPrediction.cs b/src/Generated/Models/InternalUnknownChatOutputPrediction.cs index 6de1ab5c2..fcfdc2b70 100644 --- a/src/Generated/Models/InternalUnknownChatOutputPrediction.cs +++ b/src/Generated/Models/InternalUnknownChatOutputPrediction.cs @@ -9,7 +9,7 @@ namespace OpenAI.Chat { internal partial class InternalUnknownChatOutputPrediction : ChatOutputPrediction { - internal InternalUnknownChatOutputPrediction(InternalChatOutputPredictionKind @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) + internal InternalUnknownChatOutputPrediction(InternalChatOutputPredictionKind kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalUnknownChatResponseFormat.Serialization.cs b/src/Generated/Models/InternalUnknownChatResponseFormat.Serialization.cs index 57202ba22..644abe420 100644 --- a/src/Generated/Models/InternalUnknownChatResponseFormat.Serialization.cs +++ b/src/Generated/Models/InternalUnknownChatResponseFormat.Serialization.cs @@ -5,17 +5,27 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; +using OpenAI.Internal; namespace OpenAI.Chat { internal partial class InternalUnknownChatResponseFormat : IJsonModel { - internal InternalUnknownChatResponseFormat() + internal InternalUnknownChatResponseFormat() : this(default, null) { } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -28,6 +38,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ChatResponseFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -45,29 +56,31 @@ internal static InternalUnknownChatResponseFormat DeserializeInternalUnknownChat { return null; } - string @type = "unknown"; + InternalResponseFormatType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalResponseFormatType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalUnknownChatResponseFormat(@type, additionalBinaryDataProperties); + return new InternalUnknownChatResponseFormat(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ChatResponseFormat)} does not support writing '{options.Format}' format."); } @@ -75,6 +88,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ChatResponseFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/InternalUnknownChatResponseFormat.cs b/src/Generated/Models/InternalUnknownChatResponseFormat.cs index 3a8c419f3..6e0f94bab 100644 --- a/src/Generated/Models/InternalUnknownChatResponseFormat.cs +++ b/src/Generated/Models/InternalUnknownChatResponseFormat.cs @@ -4,12 +4,13 @@ using System; using System.Collections.Generic; +using OpenAI.Internal; namespace OpenAI.Chat { internal partial class InternalUnknownChatResponseFormat : ChatResponseFormat { - internal InternalUnknownChatResponseFormat(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal InternalUnknownChatResponseFormat(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs b/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs deleted file mode 100644 index abbd9adb0..000000000 --- a/src/Generated/Models/InternalUnknownChunkingStrategy.Serialization.cs +++ /dev/null @@ -1,115 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal partial class InternalUnknownChunkingStrategy : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalUnknownChunkingStrategy)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalUnknownChunkingStrategy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalUnknownChunkingStrategy)JsonModelCreateCore(ref reader, options); - - protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalUnknownChunkingStrategy)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalUnknownChunkingStrategy(document.RootElement, options); - } - - internal static InternalUnknownChunkingStrategy DeserializeInternalUnknownChunkingStrategy(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "other"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownChunkingStrategy(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalUnknownChunkingStrategy)} does not support writing '{options.Format}' format."); - } - } - - InternalUnknownChunkingStrategy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalUnknownChunkingStrategy)PersistableModelCreateCore(data, options); - - protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalUnknownChunkingStrategy(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalUnknownChunkingStrategy)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalUnknownChunkingStrategy internalUnknownChunkingStrategy) - { - if (internalUnknownChunkingStrategy == null) - { - return null; - } - return BinaryContent.Create(internalUnknownChunkingStrategy, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalUnknownChunkingStrategy(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalUnknownChunkingStrategy(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalUnknownChunkingStrategy.cs b/src/Generated/Models/InternalUnknownChunkingStrategy.cs deleted file mode 100644 index 0a1dd5f45..000000000 --- a/src/Generated/Models/InternalUnknownChunkingStrategy.cs +++ /dev/null @@ -1,20 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.VectorStores -{ - internal partial class InternalUnknownChunkingStrategy : FileChunkingStrategy - { - public InternalUnknownChunkingStrategy() : base("other") - { - } - - internal InternalUnknownChunkingStrategy(string @type, IDictionary additionalBinaryDataProperties) : base(@type, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownChunkingStrategyRequestParamProxy.Serialization.cs b/src/Generated/Models/InternalUnknownChunkingStrategyRequestParamProxy.Serialization.cs new file mode 100644 index 000000000..21855b5ff --- /dev/null +++ b/src/Generated/Models/InternalUnknownChunkingStrategyRequestParamProxy.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalUnknownChunkingStrategyRequestParamProxy : IJsonModel + { + internal InternalUnknownChunkingStrategyRequestParamProxy() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChunkingStrategyRequestParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalChunkingStrategyRequestParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyRequestParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChunkingStrategyRequestParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChunkingStrategyRequestParam(document.RootElement, options); + } + + internal static InternalUnknownChunkingStrategyRequestParamProxy DeserializeInternalUnknownChunkingStrategyRequestParamProxy(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalChunkingStrategyRequestParamType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalChunkingStrategyRequestParamType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownChunkingStrategyRequestParamProxy(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalChunkingStrategyRequestParam)} does not support writing '{options.Format}' format."); + } + } + + InternalChunkingStrategyRequestParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyRequestParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChunkingStrategyRequestParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChunkingStrategyRequestParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownChunkingStrategyRequestParamProxy.cs b/src/Generated/Models/InternalUnknownChunkingStrategyRequestParamProxy.cs new file mode 100644 index 000000000..72f47042e --- /dev/null +++ b/src/Generated/Models/InternalUnknownChunkingStrategyRequestParamProxy.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalUnknownChunkingStrategyRequestParamProxy : InternalChunkingStrategyRequestParam + { + internal InternalUnknownChunkingStrategyRequestParamProxy(InternalChunkingStrategyRequestParamType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownChunkingStrategyResponseParam.Serialization.cs b/src/Generated/Models/InternalUnknownChunkingStrategyResponseParam.Serialization.cs new file mode 100644 index 000000000..348f4e180 --- /dev/null +++ b/src/Generated/Models/InternalUnknownChunkingStrategyResponseParam.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalUnknownChunkingStrategyResponseParam : IJsonModel + { + internal InternalUnknownChunkingStrategyResponseParam() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChunkingStrategyResponseParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalChunkingStrategyResponseParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyResponseParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalChunkingStrategyResponseParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalChunkingStrategyResponseParam(document.RootElement, options); + } + + internal static InternalUnknownChunkingStrategyResponseParam DeserializeInternalUnknownChunkingStrategyResponseParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalChunkingStrategyResponseParamType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalChunkingStrategyResponseParamType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownChunkingStrategyResponseParam(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalChunkingStrategyResponseParam)} does not support writing '{options.Format}' format."); + } + } + + InternalChunkingStrategyResponseParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalChunkingStrategyResponseParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalChunkingStrategyResponseParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalChunkingStrategyResponseParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownChunkingStrategyResponseParam.cs b/src/Generated/Models/InternalUnknownChunkingStrategyResponseParam.cs new file mode 100644 index 000000000..07aa6fac1 --- /dev/null +++ b/src/Generated/Models/InternalUnknownChunkingStrategyResponseParam.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalUnknownChunkingStrategyResponseParam : InternalChunkingStrategyResponseParam + { + internal InternalUnknownChunkingStrategyResponseParam(InternalChunkingStrategyResponseParamType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownComparisonFilter.Serialization.cs b/src/Generated/Models/InternalUnknownComparisonFilter.Serialization.cs index 252bd0719..f1bce0cea 100644 --- a/src/Generated/Models/InternalUnknownComparisonFilter.Serialization.cs +++ b/src/Generated/Models/InternalUnknownComparisonFilter.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalUnknownComparisonFilter : IJsonModel { - internal InternalUnknownComparisonFilter() + internal InternalUnknownComparisonFilter() : this(default, null, null, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalComparisonFilter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,7 +55,7 @@ internal static InternalUnknownComparisonFilter DeserializeInternalUnknownCompar { return null; } - InternalComparisonFilterType @type = default; + InternalComparisonFilterType kind = default; string key = default; BinaryData value = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -60,7 +63,7 @@ internal static InternalUnknownComparisonFilter DeserializeInternalUnknownCompar { if (prop.NameEquals("type"u8)) { - @type = new InternalComparisonFilterType(prop.Value.GetString()); + kind = new InternalComparisonFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("key"u8)) @@ -73,20 +76,22 @@ internal static InternalUnknownComparisonFilter DeserializeInternalUnknownCompar value = BinaryData.FromString(prop.Value.GetRawText()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalUnknownComparisonFilter(@type, key, value, additionalBinaryDataProperties); + return new InternalUnknownComparisonFilter(kind, key, value, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalComparisonFilter)} does not support writing '{options.Format}' format."); } @@ -94,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalComparisonFilter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalComparisonFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/InternalUnknownComparisonFilter.cs b/src/Generated/Models/InternalUnknownComparisonFilter.cs index c5a1174da..8d1f74875 100644 --- a/src/Generated/Models/InternalUnknownComparisonFilter.cs +++ b/src/Generated/Models/InternalUnknownComparisonFilter.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { internal partial class InternalUnknownComparisonFilter : InternalComparisonFilter { - internal InternalUnknownComparisonFilter(InternalComparisonFilterType @type, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", key, value, additionalBinaryDataProperties) + internal InternalUnknownComparisonFilter(InternalComparisonFilterType kind, string key, BinaryData value, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", key, value, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalUnknownCompoundFilter.Serialization.cs b/src/Generated/Models/InternalUnknownCompoundFilter.Serialization.cs index 8f718057b..3118d89d8 100644 --- a/src/Generated/Models/InternalUnknownCompoundFilter.Serialization.cs +++ b/src/Generated/Models/InternalUnknownCompoundFilter.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Responses { internal partial class InternalUnknownCompoundFilter : IJsonModel { - internal InternalUnknownCompoundFilter() + internal InternalUnknownCompoundFilter() : this(default, null, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalCompoundFilter IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalCompoundFilter JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,14 +55,14 @@ internal static InternalUnknownCompoundFilter DeserializeInternalUnknownCompound { return null; } - InternalCompoundFilterType @type = default; + InternalCompoundFilterType kind = default; IList filters = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalCompoundFilterType(prop.Value.GetString()); + kind = new InternalCompoundFilterType(prop.Value.GetString()); continue; } if (prop.NameEquals("filters"u8)) @@ -79,20 +82,22 @@ internal static InternalUnknownCompoundFilter DeserializeInternalUnknownCompound filters = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new InternalUnknownCompoundFilter(@type, filters, additionalBinaryDataProperties); + return new InternalUnknownCompoundFilter(kind, filters, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalCompoundFilter)} does not support writing '{options.Format}' format."); } @@ -100,6 +105,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalCompoundFilter IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalCompoundFilter PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/InternalUnknownCompoundFilter.cs b/src/Generated/Models/InternalUnknownCompoundFilter.cs index 5089c6ca0..ba9a863af 100644 --- a/src/Generated/Models/InternalUnknownCompoundFilter.cs +++ b/src/Generated/Models/InternalUnknownCompoundFilter.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { internal partial class InternalUnknownCompoundFilter : InternalCompoundFilter { - internal InternalUnknownCompoundFilter(InternalCompoundFilterType @type, IList filters, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", filters, additionalBinaryDataProperties) + internal InternalUnknownCompoundFilter(InternalCompoundFilterType kind, IList filters, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", filters, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/InternalUnknownComputerAction.Serialization.cs b/src/Generated/Models/InternalUnknownComputerAction.Serialization.cs new file mode 100644 index 000000000..f9ef4de22 --- /dev/null +++ b/src/Generated/Models/InternalUnknownComputerAction.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownComputerAction : IJsonModel + { + internal InternalUnknownComputerAction() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ComputerCallAction)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ComputerCallAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ComputerCallAction)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeComputerCallAction(document.RootElement, options); + } + + internal static InternalUnknownComputerAction DeserializeInternalUnknownComputerAction(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + ComputerCallActionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToComputerCallActionKind(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownComputerAction(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ComputerCallAction)} does not support writing '{options.Format}' format."); + } + } + + ComputerCallAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeComputerCallAction(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ComputerCallAction)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownComputerAction.cs b/src/Generated/Models/InternalUnknownComputerAction.cs new file mode 100644 index 000000000..4466b0323 --- /dev/null +++ b/src/Generated/Models/InternalUnknownComputerAction.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownComputerAction : ComputerCallAction + { + internal InternalUnknownComputerAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownComputerToolCallOutputItemOutput.Serialization.cs b/src/Generated/Models/InternalUnknownComputerToolCallOutputItemOutput.Serialization.cs new file mode 100644 index 000000000..15ab11647 --- /dev/null +++ b/src/Generated/Models/InternalUnknownComputerToolCallOutputItemOutput.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownComputerToolCallOutputItemOutput : IJsonModel + { + internal InternalUnknownComputerToolCallOutputItemOutput() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ComputerOutput)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ComputerOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ComputerOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ComputerOutput)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeComputerOutput(document.RootElement, options); + } + + internal static InternalUnknownComputerToolCallOutputItemOutput DeserializeInternalUnknownComputerToolCallOutputItemOutput(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalComputerUsePreviewToolCallOutputOutputType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalComputerUsePreviewToolCallOutputOutputType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownComputerToolCallOutputItemOutput(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ComputerOutput)} does not support writing '{options.Format}' format."); + } + } + + ComputerOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ComputerOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeComputerOutput(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ComputerOutput)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownComputerToolCallOutputItemOutput.cs b/src/Generated/Models/InternalUnknownComputerToolCallOutputItemOutput.cs new file mode 100644 index 000000000..45d6a02d9 --- /dev/null +++ b/src/Generated/Models/InternalUnknownComputerToolCallOutputItemOutput.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownComputerToolCallOutputItemOutput : ComputerOutput + { + internal InternalUnknownComputerToolCallOutputItemOutput(InternalComputerUsePreviewToolCallOutputOutputType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownCreateTranscriptionResponseStreamEvent.Serialization.cs b/src/Generated/Models/InternalUnknownCreateTranscriptionResponseStreamEvent.Serialization.cs new file mode 100644 index 000000000..6e8a84eb5 --- /dev/null +++ b/src/Generated/Models/InternalUnknownCreateTranscriptionResponseStreamEvent.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Audio +{ + internal partial class InternalUnknownCreateTranscriptionResponseStreamEvent : IJsonModel + { + internal InternalUnknownCreateTranscriptionResponseStreamEvent() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + StreamingAudioTranscriptionUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeStreamingAudioTranscriptionUpdate(document.RootElement, options); + } + + internal static InternalUnknownCreateTranscriptionResponseStreamEvent DeserializeInternalUnknownCreateTranscriptionResponseStreamEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingAudioTranscriptionUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingAudioTranscriptionUpdateKind(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownCreateTranscriptionResponseStreamEvent(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(StreamingAudioTranscriptionUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingAudioTranscriptionUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeStreamingAudioTranscriptionUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownCreateTranscriptionResponseStreamEvent.cs b/src/Generated/Models/InternalUnknownCreateTranscriptionResponseStreamEvent.cs new file mode 100644 index 000000000..ea5aead8b --- /dev/null +++ b/src/Generated/Models/InternalUnknownCreateTranscriptionResponseStreamEvent.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Audio +{ + internal partial class InternalUnknownCreateTranscriptionResponseStreamEvent : StreamingAudioTranscriptionUpdate + { + internal InternalUnknownCreateTranscriptionResponseStreamEvent(StreamingAudioTranscriptionUpdateKind kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownDotNetAssistantResponseFormat.Serialization.cs b/src/Generated/Models/InternalUnknownDotNetAssistantResponseFormat.Serialization.cs new file mode 100644 index 000000000..af4021a6d --- /dev/null +++ b/src/Generated/Models/InternalUnknownDotNetAssistantResponseFormat.Serialization.cs @@ -0,0 +1,109 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Internal; + +namespace OpenAI.Assistants +{ + internal partial class InternalUnknownDotNetAssistantResponseFormat : IJsonModel + { + internal InternalUnknownDotNetAssistantResponseFormat() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + AssistantResponseFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override AssistantResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeAssistantResponseFormat(document.RootElement, options); + } + + internal static InternalUnknownDotNetAssistantResponseFormat DeserializeInternalUnknownDotNetAssistantResponseFormat(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseFormatType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseFormatType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownDotNetAssistantResponseFormat(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(AssistantResponseFormat)} does not support writing '{options.Format}' format."); + } + } + + AssistantResponseFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override AssistantResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeAssistantResponseFormat(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(AssistantResponseFormat)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownDotNetAssistantResponseFormat.cs b/src/Generated/Models/InternalUnknownDotNetAssistantResponseFormat.cs new file mode 100644 index 000000000..3bf5b091b --- /dev/null +++ b/src/Generated/Models/InternalUnknownDotNetAssistantResponseFormat.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Internal; + +namespace OpenAI.Assistants +{ + internal partial class InternalUnknownDotNetAssistantResponseFormat : AssistantResponseFormat + { + internal InternalUnknownDotNetAssistantResponseFormat(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownDotNetCombinedChunkingStrategyParam.Serialization.cs b/src/Generated/Models/InternalUnknownDotNetCombinedChunkingStrategyParam.Serialization.cs new file mode 100644 index 000000000..3e8d02f24 --- /dev/null +++ b/src/Generated/Models/InternalUnknownDotNetCombinedChunkingStrategyParam.Serialization.cs @@ -0,0 +1,109 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Responses; + +namespace OpenAI.VectorStores +{ + internal partial class InternalUnknownDotNetCombinedChunkingStrategyParam : IJsonModel + { + internal InternalUnknownDotNetCombinedChunkingStrategyParam() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FileChunkingStrategy)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + FileChunkingStrategy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(FileChunkingStrategy)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeFileChunkingStrategy(document.RootElement, options); + } + + internal static InternalUnknownDotNetCombinedChunkingStrategyParam DeserializeInternalUnknownDotNetCombinedChunkingStrategyParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalDotNetCombinedChunkingStrategyParamType2 kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalDotNetCombinedChunkingStrategyParamType2(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownDotNetCombinedChunkingStrategyParam(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(FileChunkingStrategy)} does not support writing '{options.Format}' format."); + } + } + + FileChunkingStrategy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeFileChunkingStrategy(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(FileChunkingStrategy)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownDotNetCombinedChunkingStrategyParam.cs b/src/Generated/Models/InternalUnknownDotNetCombinedChunkingStrategyParam.cs new file mode 100644 index 000000000..e2cafe5c3 --- /dev/null +++ b/src/Generated/Models/InternalUnknownDotNetCombinedChunkingStrategyParam.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Responses; + +namespace OpenAI.VectorStores +{ + internal partial class InternalUnknownDotNetCombinedChunkingStrategyParam : FileChunkingStrategy + { + internal InternalUnknownDotNetCombinedChunkingStrategyParam(InternalDotNetCombinedChunkingStrategyParamType2 kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownDotnetResponseWebSearchLocation.Serialization.cs b/src/Generated/Models/InternalUnknownDotnetResponseWebSearchLocation.Serialization.cs new file mode 100644 index 000000000..d463e0c0b --- /dev/null +++ b/src/Generated/Models/InternalUnknownDotnetResponseWebSearchLocation.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownDotnetResponseWebSearchLocation : IJsonModel + { + internal InternalUnknownDotnetResponseWebSearchLocation() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(WebSearchUserLocation)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + WebSearchUserLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override WebSearchUserLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(WebSearchUserLocation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeWebSearchUserLocation(document.RootElement, options); + } + + internal static InternalUnknownDotnetResponseWebSearchLocation DeserializeInternalUnknownDotnetResponseWebSearchLocation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalWebSearchUserLocationKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalWebSearchUserLocationKind(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownDotnetResponseWebSearchLocation(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(WebSearchUserLocation)} does not support writing '{options.Format}' format."); + } + } + + WebSearchUserLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override WebSearchUserLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeWebSearchUserLocation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(WebSearchUserLocation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownDotnetResponseWebSearchLocation.cs b/src/Generated/Models/InternalUnknownDotnetResponseWebSearchLocation.cs new file mode 100644 index 000000000..61acbe415 --- /dev/null +++ b/src/Generated/Models/InternalUnknownDotnetResponseWebSearchLocation.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownDotnetResponseWebSearchLocation : WebSearchUserLocation + { + internal InternalUnknownDotnetResponseWebSearchLocation(InternalWebSearchUserLocationKind kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownEvalDataSourceConfigParams.Serialization.cs b/src/Generated/Models/InternalUnknownEvalDataSourceConfigParams.Serialization.cs new file mode 100644 index 000000000..e45d0eb29 --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalDataSourceConfigParams.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalDataSourceConfigParams : IJsonModel + { + internal InternalUnknownEvalDataSourceConfigParams() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalEvalDataSourceConfigParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalDataSourceConfigParams(document.RootElement, options); + } + + internal static InternalUnknownEvalDataSourceConfigParams DeserializeInternalUnknownEvalDataSourceConfigParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalDataSourceConfigType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalDataSourceConfigType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownEvalDataSourceConfigParams(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalDataSourceConfigParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalDataSourceConfigParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalDataSourceConfigParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownEvalDataSourceConfigParams.cs b/src/Generated/Models/InternalUnknownEvalDataSourceConfigParams.cs new file mode 100644 index 000000000..749bec50d --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalDataSourceConfigParams.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalDataSourceConfigParams : InternalEvalDataSourceConfigParams + { + internal InternalUnknownEvalDataSourceConfigParams(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownEvalDataSourceConfigResource.Serialization.cs b/src/Generated/Models/InternalUnknownEvalDataSourceConfigResource.Serialization.cs new file mode 100644 index 000000000..a600e0067 --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalDataSourceConfigResource.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalDataSourceConfigResource : IJsonModel + { + internal InternalUnknownEvalDataSourceConfigResource() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalEvalDataSourceConfigResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalDataSourceConfigResource(document.RootElement, options); + } + + internal static InternalUnknownEvalDataSourceConfigResource DeserializeInternalUnknownEvalDataSourceConfigResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalDataSourceConfigType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalDataSourceConfigType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownEvalDataSourceConfigResource(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalDataSourceConfigResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalDataSourceConfigResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalDataSourceConfigResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalDataSourceConfigResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalDataSourceConfigResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownEvalDataSourceConfigResource.cs b/src/Generated/Models/InternalUnknownEvalDataSourceConfigResource.cs new file mode 100644 index 000000000..790960263 --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalDataSourceConfigResource.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalDataSourceConfigResource : InternalEvalDataSourceConfigResource + { + internal InternalUnknownEvalDataSourceConfigResource(InternalEvalDataSourceConfigType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownEvalGraderParams.Serialization.cs b/src/Generated/Models/InternalUnknownEvalGraderParams.Serialization.cs new file mode 100644 index 000000000..79b5b0672 --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalGraderParams.Serialization.cs @@ -0,0 +1,109 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalGraderParams : IJsonModel + { + internal InternalUnknownEvalGraderParams() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalEvalGraderParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderParams(document.RootElement, options); + } + + internal static InternalUnknownEvalGraderParams DeserializeInternalUnknownEvalGraderParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownEvalGraderParams(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownEvalGraderParams.cs b/src/Generated/Models/InternalUnknownEvalGraderParams.cs new file mode 100644 index 000000000..71bb4347f --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalGraderParams.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalGraderParams : InternalEvalGraderParams + { + internal InternalUnknownEvalGraderParams(InternalGraderType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownEvalGraderResource.Serialization.cs b/src/Generated/Models/InternalUnknownEvalGraderResource.Serialization.cs new file mode 100644 index 000000000..7c3ad1259 --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalGraderResource.Serialization.cs @@ -0,0 +1,109 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalGraderResource : IJsonModel + { + internal InternalUnknownEvalGraderResource() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderResource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalEvalGraderResource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalGraderResource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalGraderResource(document.RootElement, options); + } + + internal static InternalUnknownEvalGraderResource DeserializeInternalUnknownEvalGraderResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownEvalGraderResource(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalGraderResource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalGraderResource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalGraderResource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalGraderResource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalGraderResource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownEvalGraderResource.cs b/src/Generated/Models/InternalUnknownEvalGraderResource.cs new file mode 100644 index 000000000..a0d6169dd --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalGraderResource.cs @@ -0,0 +1,17 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI.Graders; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalGraderResource : InternalEvalGraderResource + { + internal InternalUnknownEvalGraderResource(InternalGraderType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownEvalItemContent.Serialization.cs b/src/Generated/Models/InternalUnknownEvalItemContent.Serialization.cs new file mode 100644 index 000000000..34f280ea7 --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalItemContent.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalItemContent : IJsonModel + { + internal InternalUnknownEvalItemContent() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItemContent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalEvalItemContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalItemContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalItemContent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalItemContent(document.RootElement, options); + } + + internal static InternalUnknownEvalItemContent DeserializeInternalUnknownEvalItemContent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalItemContentType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalItemContentType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownEvalItemContent(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalItemContent)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalItemContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalItemContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalItemContent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalItemContent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownEvalItemContent.cs b/src/Generated/Models/InternalUnknownEvalItemContent.cs new file mode 100644 index 000000000..e26406a8a --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalItemContent.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalItemContent : InternalEvalItemContent + { + internal InternalUnknownEvalItemContent(InternalEvalItemContentType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownEvalRunDataContentSource.Serialization.cs b/src/Generated/Models/InternalUnknownEvalRunDataContentSource.Serialization.cs new file mode 100644 index 000000000..c005495ac --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalRunDataContentSource.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalRunDataContentSource : IJsonModel + { + internal InternalUnknownEvalRunDataContentSource() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataContentSource)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalEvalRunDataContentSource IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataContentSource)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunDataContentSource(document.RootElement, options); + } + + internal static InternalUnknownEvalRunDataContentSource DeserializeInternalUnknownEvalRunDataContentSource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataContentSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataContentSourceType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownEvalRunDataContentSource(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunDataContentSource)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunDataContentSource IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataContentSource PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunDataContentSource(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunDataContentSource)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownEvalRunDataContentSource.cs b/src/Generated/Models/InternalUnknownEvalRunDataContentSource.cs new file mode 100644 index 000000000..86a0d0dbb --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalRunDataContentSource.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalRunDataContentSource : InternalEvalRunDataContentSource + { + internal InternalUnknownEvalRunDataContentSource(InternalEvalRunDataContentSourceType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownEvalRunDataSourceParams.Serialization.cs b/src/Generated/Models/InternalUnknownEvalRunDataSourceParams.Serialization.cs new file mode 100644 index 000000000..688b96996 --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalRunDataSourceParams.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalRunDataSourceParams : IJsonModel + { + internal InternalUnknownEvalRunDataSourceParams() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceParams)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalEvalRunDataSourceParams IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataSourceParams JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceParams)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalEvalRunDataSourceParams(document.RootElement, options); + } + + internal static InternalUnknownEvalRunDataSourceParams DeserializeInternalUnknownEvalRunDataSourceParams(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalEvalRunDataSourceType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalEvalRunDataSourceType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownEvalRunDataSourceParams(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalEvalRunDataSourceParams)} does not support writing '{options.Format}' format."); + } + } + + InternalEvalRunDataSourceParams IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalEvalRunDataSourceParams PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalEvalRunDataSourceParams(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalEvalRunDataSourceParams)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownEvalRunDataSourceParams.cs b/src/Generated/Models/InternalUnknownEvalRunDataSourceParams.cs new file mode 100644 index 000000000..8167279aa --- /dev/null +++ b/src/Generated/Models/InternalUnknownEvalRunDataSourceParams.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalUnknownEvalRunDataSourceParams : InternalEvalRunDataSourceParams + { + internal InternalUnknownEvalRunDataSourceParams(InternalEvalRunDataSourceType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs b/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs deleted file mode 100644 index 8370f3d78..000000000 --- a/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal partial class InternalUnknownFileChunkingStrategyRequestParamProxy : IJsonModel - { - internal InternalUnknownFileChunkingStrategyRequestParamProxy() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFileChunkingStrategyRequestParam)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalFileChunkingStrategyRequestParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override InternalFileChunkingStrategyRequestParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalFileChunkingStrategyRequestParam)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalFileChunkingStrategyRequestParam(document.RootElement, options); - } - - internal static InternalUnknownFileChunkingStrategyRequestParamProxy DeserializeInternalUnknownFileChunkingStrategyRequestParamProxy(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "unknown"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownFileChunkingStrategyRequestParamProxy(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalFileChunkingStrategyRequestParam)} does not support writing '{options.Format}' format."); - } - } - - InternalFileChunkingStrategyRequestParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override InternalFileChunkingStrategyRequestParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalFileChunkingStrategyRequestParam(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalFileChunkingStrategyRequestParam)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.cs b/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.cs deleted file mode 100644 index e2067aeef..000000000 --- a/src/Generated/Models/InternalUnknownFileChunkingStrategyRequestParamProxy.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.VectorStores -{ - internal partial class InternalUnknownFileChunkingStrategyRequestParamProxy : InternalFileChunkingStrategyRequestParam - { - internal InternalUnknownFileChunkingStrategyRequestParamProxy(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs b/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs deleted file mode 100644 index 8c9e3c87a..000000000 --- a/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal partial class InternalUnknownFileChunkingStrategyResponseParamProxy : IJsonModel - { - internal InternalUnknownFileChunkingStrategyResponseParamProxy() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FileChunkingStrategy)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - FileChunkingStrategy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(FileChunkingStrategy)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeFileChunkingStrategy(document.RootElement, options); - } - - internal static InternalUnknownFileChunkingStrategyResponseParamProxy DeserializeInternalUnknownFileChunkingStrategyResponseParamProxy(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "unknown"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownFileChunkingStrategyResponseParamProxy(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(FileChunkingStrategy)} does not support writing '{options.Format}' format."); - } - } - - FileChunkingStrategy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeFileChunkingStrategy(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(FileChunkingStrategy)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.cs b/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.cs deleted file mode 100644 index 46c4b12c8..000000000 --- a/src/Generated/Models/InternalUnknownFileChunkingStrategyResponseParamProxy.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.VectorStores -{ - internal partial class InternalUnknownFileChunkingStrategyResponseParamProxy : FileChunkingStrategy - { - internal InternalUnknownFileChunkingStrategyResponseParamProxy(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownGrader.Serialization.cs b/src/Generated/Models/InternalUnknownGrader.Serialization.cs new file mode 100644 index 000000000..096e3bc0c --- /dev/null +++ b/src/Generated/Models/InternalUnknownGrader.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalUnknownGrader : IJsonModel + { + internal InternalUnknownGrader() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGrader)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalGrader IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalGrader JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalGrader)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalGrader(document.RootElement, options); + } + + internal static InternalUnknownGrader DeserializeInternalUnknownGrader(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalGraderType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalGraderType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownGrader(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalGrader)} does not support writing '{options.Format}' format."); + } + } + + InternalGrader IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalGrader PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalGrader(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalGrader)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownGrader.cs b/src/Generated/Models/InternalUnknownGrader.cs new file mode 100644 index 000000000..b6ee0c889 --- /dev/null +++ b/src/Generated/Models/InternalUnknownGrader.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Graders +{ + internal partial class InternalUnknownGrader : InternalGrader + { + internal InternalUnknownGrader(InternalGraderType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownItemContent.Serialization.cs b/src/Generated/Models/InternalUnknownItemContent.Serialization.cs new file mode 100644 index 000000000..3c9f8fa97 --- /dev/null +++ b/src/Generated/Models/InternalUnknownItemContent.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownItemContent : IJsonModel + { + internal InternalUnknownItemContent() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseContentPart)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ResponseContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseContentPart)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseContentPart(document.RootElement, options); + } + + internal static InternalUnknownItemContent DeserializeInternalUnknownItemContent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemContentType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalItemContentType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownItemContent(internalType, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ResponseContentPart)} does not support writing '{options.Format}' format."); + } + } + + ResponseContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseContentPart(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseContentPart)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownItemContent.cs b/src/Generated/Models/InternalUnknownItemContent.cs new file mode 100644 index 000000000..48e5c52f1 --- /dev/null +++ b/src/Generated/Models/InternalUnknownItemContent.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownItemContent : ResponseContentPart + { + internal InternalUnknownItemContent(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties) : base(internalType != default ? internalType : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownItemParam.Serialization.cs b/src/Generated/Models/InternalUnknownItemParam.Serialization.cs new file mode 100644 index 000000000..374b59719 --- /dev/null +++ b/src/Generated/Models/InternalUnknownItemParam.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownItemParam : IJsonModel + { + internal InternalUnknownItemParam() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalItemParam(document.RootElement, options); + } + + internal static InternalUnknownItemParam DeserializeInternalUnknownItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownItemParam(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownItemParam.cs b/src/Generated/Models/InternalUnknownItemParam.cs new file mode 100644 index 000000000..6296f8186 --- /dev/null +++ b/src/Generated/Models/InternalUnknownItemParam.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownItemParam : InternalItemParam + { + internal InternalUnknownItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownItemResource.Serialization.cs b/src/Generated/Models/InternalUnknownItemResource.Serialization.cs new file mode 100644 index 000000000..621079333 --- /dev/null +++ b/src/Generated/Models/InternalUnknownItemResource.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownItemResource : IJsonModel + { + internal InternalUnknownItemResource() : this(default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseItem)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseItem(document.RootElement, options); + } + + internal static InternalUnknownItemResource DeserializeInternalUnknownItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownItemResource(kind, id, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ResponseItem)} does not support writing '{options.Format}' format."); + } + } + + ResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseItem)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownItemResource.cs b/src/Generated/Models/InternalUnknownItemResource.cs new file mode 100644 index 000000000..9bba12995 --- /dev/null +++ b/src/Generated/Models/InternalUnknownItemResource.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownItemResource : ResponseItem + { + internal InternalUnknownItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", id, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownLocation.Serialization.cs b/src/Generated/Models/InternalUnknownLocation.Serialization.cs new file mode 100644 index 000000000..da078a37a --- /dev/null +++ b/src/Generated/Models/InternalUnknownLocation.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownLocation : IJsonModel + { + internal InternalUnknownLocation() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocation)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalLocation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalLocation(document.RootElement, options); + } + + internal static InternalUnknownLocation DeserializeInternalUnknownLocation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalWebSearchUserLocationKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalWebSearchUserLocationKind(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownLocation(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalLocation)} does not support writing '{options.Format}' format."); + } + } + + InternalLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalLocation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalLocation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownLocation.cs b/src/Generated/Models/InternalUnknownLocation.cs new file mode 100644 index 000000000..d444298cb --- /dev/null +++ b/src/Generated/Models/InternalUnknownLocation.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownLocation : InternalLocation + { + internal InternalUnknownLocation(InternalWebSearchUserLocationKind kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownMessageContent.Serialization.cs b/src/Generated/Models/InternalUnknownMessageContent.Serialization.cs new file mode 100644 index 000000000..9ce355c0b --- /dev/null +++ b/src/Generated/Models/InternalUnknownMessageContent.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Assistants +{ + internal partial class InternalUnknownMessageContent : IJsonModel + { + internal InternalUnknownMessageContent() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(MessageContent)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + MessageContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(MessageContent)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeMessageContent(document.RootElement, options); + } + + internal static InternalUnknownMessageContent DeserializeInternalUnknownMessageContent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalMessageContentType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalMessageContentType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownMessageContent(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(MessageContent)} does not support writing '{options.Format}' format."); + } + } + + MessageContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeMessageContent(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(MessageContent)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownMessageContent.cs b/src/Generated/Models/InternalUnknownMessageContent.cs new file mode 100644 index 000000000..3cd96d16e --- /dev/null +++ b/src/Generated/Models/InternalUnknownMessageContent.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Assistants +{ + internal partial class InternalUnknownMessageContent : MessageContent + { + internal InternalUnknownMessageContent(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.Serialization.cs b/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.Serialization.cs deleted file mode 100644 index ebfe5bb1b..000000000 --- a/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Internal -{ - internal partial class InternalUnknownOmniTypedResponseFormat : IJsonModel - { - internal InternalUnknownOmniTypedResponseFormat() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalOmniTypedResponseFormat)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalOmniTypedResponseFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override InternalOmniTypedResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalOmniTypedResponseFormat)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalOmniTypedResponseFormat(document.RootElement, options); - } - - internal static InternalUnknownOmniTypedResponseFormat DeserializeInternalUnknownOmniTypedResponseFormat(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "unknown"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownOmniTypedResponseFormat(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalOmniTypedResponseFormat)} does not support writing '{options.Format}' format."); - } - } - - InternalOmniTypedResponseFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override InternalOmniTypedResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalOmniTypedResponseFormat(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalOmniTypedResponseFormat)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.cs b/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.cs deleted file mode 100644 index 071536a4b..000000000 --- a/src/Generated/Models/InternalUnknownOmniTypedResponseFormat.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Internal -{ - internal partial class InternalUnknownOmniTypedResponseFormat : InternalOmniTypedResponseFormat - { - internal InternalUnknownOmniTypedResponseFormat(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownRealtimeAudioNoiseReduction.Serialization.cs b/src/Generated/Models/InternalUnknownRealtimeAudioNoiseReduction.Serialization.cs new file mode 100644 index 000000000..51fbe16dc --- /dev/null +++ b/src/Generated/Models/InternalUnknownRealtimeAudioNoiseReduction.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalUnknownRealtimeAudioNoiseReduction : IJsonModel + { + internal InternalUnknownRealtimeAudioNoiseReduction() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputNoiseReductionOptions)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InputNoiseReductionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InputNoiseReductionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InputNoiseReductionOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInputNoiseReductionOptions(document.RootElement, options); + } + + internal static InternalUnknownRealtimeAudioNoiseReduction DeserializeInternalUnknownRealtimeAudioNoiseReduction(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InputNoiseReductionKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToInputNoiseReductionKind(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownRealtimeAudioNoiseReduction(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InputNoiseReductionOptions)} does not support writing '{options.Format}' format."); + } + } + + InputNoiseReductionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InputNoiseReductionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInputNoiseReductionOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InputNoiseReductionOptions)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownRealtimeAudioNoiseReduction.cs b/src/Generated/Models/InternalUnknownRealtimeAudioNoiseReduction.cs new file mode 100644 index 000000000..3bd6447c1 --- /dev/null +++ b/src/Generated/Models/InternalUnknownRealtimeAudioNoiseReduction.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalUnknownRealtimeAudioNoiseReduction : InputNoiseReductionOptions + { + internal InternalUnknownRealtimeAudioNoiseReduction(InputNoiseReductionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownReasoningItemSummaryPart.Serialization.cs b/src/Generated/Models/InternalUnknownReasoningItemSummaryPart.Serialization.cs new file mode 100644 index 000000000..1f14483aa --- /dev/null +++ b/src/Generated/Models/InternalUnknownReasoningItemSummaryPart.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownReasoningItemSummaryPart : IJsonModel + { + internal InternalUnknownReasoningItemSummaryPart() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ReasoningSummaryPart)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ReasoningSummaryPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ReasoningSummaryPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ReasoningSummaryPart)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeReasoningSummaryPart(document.RootElement, options); + } + + internal static InternalUnknownReasoningItemSummaryPart DeserializeInternalUnknownReasoningItemSummaryPart(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalReasoningItemSummaryPartType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalReasoningItemSummaryPartType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownReasoningItemSummaryPart(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ReasoningSummaryPart)} does not support writing '{options.Format}' format."); + } + } + + ReasoningSummaryPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ReasoningSummaryPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeReasoningSummaryPart(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ReasoningSummaryPart)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownReasoningItemSummaryPart.cs b/src/Generated/Models/InternalUnknownReasoningItemSummaryPart.cs new file mode 100644 index 000000000..9fc5b0da4 --- /dev/null +++ b/src/Generated/Models/InternalUnknownReasoningItemSummaryPart.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownReasoningItemSummaryPart : ReasoningSummaryPart + { + internal InternalUnknownReasoningItemSummaryPart(InternalReasoningItemSummaryPartType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownResponseFormat.Serialization.cs b/src/Generated/Models/InternalUnknownResponseFormat.Serialization.cs new file mode 100644 index 000000000..512140d25 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponseFormat.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Internal +{ + internal partial class InternalUnknownResponseFormat : IJsonModel + { + internal InternalUnknownResponseFormat() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseFormat)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponseFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalResponseFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponseFormat)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponseFormat(document.RootElement, options); + } + + internal static InternalUnknownResponseFormat DeserializeInternalUnknownResponseFormat(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseFormatType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseFormatType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownResponseFormat(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponseFormat)} does not support writing '{options.Format}' format."); + } + } + + InternalResponseFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalResponseFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponseFormat(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponseFormat)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownResponseFormat.cs b/src/Generated/Models/InternalUnknownResponseFormat.cs new file mode 100644 index 000000000..a9c808ea1 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponseFormat.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Internal +{ + internal partial class InternalUnknownResponseFormat : InternalResponseFormat + { + internal InternalUnknownResponseFormat(InternalResponseFormatType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownResponseTextFormatConfiguration.Serialization.cs b/src/Generated/Models/InternalUnknownResponseTextFormatConfiguration.Serialization.cs new file mode 100644 index 000000000..797b176b7 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponseTextFormatConfiguration.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownResponseTextFormatConfiguration : IJsonModel + { + internal InternalUnknownResponseTextFormatConfiguration() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseTextFormat)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ResponseTextFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTextFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseTextFormat)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseTextFormat(document.RootElement, options); + } + + internal static InternalUnknownResponseTextFormatConfiguration DeserializeInternalUnknownResponseTextFormatConfiguration(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponsesTextFormatType internalType = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + internalType = new InternalResponsesTextFormatType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownResponseTextFormatConfiguration(internalType, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ResponseTextFormat)} does not support writing '{options.Format}' format."); + } + } + + ResponseTextFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTextFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseTextFormat(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseTextFormat)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownResponseTextFormatConfiguration.cs b/src/Generated/Models/InternalUnknownResponseTextFormatConfiguration.cs new file mode 100644 index 000000000..793c14232 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponseTextFormatConfiguration.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownResponseTextFormatConfiguration : ResponseTextFormat + { + internal InternalUnknownResponseTextFormatConfiguration(InternalResponsesTextFormatType internalType, IDictionary additionalBinaryDataProperties) : base(internalType != default ? internalType : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownResponsesContent.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesContent.Serialization.cs deleted file mode 100644 index 4cd6c1165..000000000 --- a/src/Generated/Models/InternalUnknownResponsesContent.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesContent : IJsonModel - { - internal InternalUnknownResponsesContent() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseContentPart)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - ResponseContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseContentPart)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeResponseContentPart(document.RootElement, options); - } - - internal static InternalUnknownResponsesContent DeserializeInternalUnknownResponsesContent(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesContentType internalType = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - internalType = new InternalResponsesContentType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesContent(internalType, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ResponseContentPart)} does not support writing '{options.Format}' format."); - } - } - - ResponseContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeResponseContentPart(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ResponseContentPart)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesContent.cs b/src/Generated/Models/InternalUnknownResponsesContent.cs deleted file mode 100644 index 0d4a4e594..000000000 --- a/src/Generated/Models/InternalUnknownResponsesContent.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesContent : ResponseContentPart - { - internal InternalUnknownResponsesContent(InternalResponsesContentType internalType, IDictionary additionalBinaryDataProperties) : base(internalType != default ? internalType : "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesItem.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesItem.Serialization.cs deleted file mode 100644 index 18a303a07..000000000 --- a/src/Generated/Models/InternalUnknownResponsesItem.Serialization.cs +++ /dev/null @@ -1,108 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesItem : IJsonModel - { - internal InternalUnknownResponsesItem() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseItem)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - ResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseItem)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeResponseItem(document.RootElement, options); - } - - internal static InternalUnknownResponsesItem DeserializeInternalUnknownResponsesItem(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesItemType @type = default; - string id = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesItemType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("id"u8)) - { - id = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesItem(@type, id, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ResponseItem)} does not support writing '{options.Format}' format."); - } - } - - ResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeResponseItem(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ResponseItem)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesItem.cs b/src/Generated/Models/InternalUnknownResponsesItem.cs deleted file mode 100644 index 61edc1f89..000000000 --- a/src/Generated/Models/InternalUnknownResponsesItem.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesItem : ResponseItem - { - internal InternalUnknownResponsesItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", id, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesMessage.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesMessage.Serialization.cs deleted file mode 100644 index 461cc35c1..000000000 --- a/src/Generated/Models/InternalUnknownResponsesMessage.Serialization.cs +++ /dev/null @@ -1,124 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesMessage : IJsonModel - { - internal InternalUnknownResponsesMessage() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(MessageResponseItem)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - MessageResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalUnknownResponsesMessage)JsonModelCreateCore(ref reader, options); - - protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(MessageResponseItem)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeMessageResponseItem(document.RootElement, options); - } - - internal static InternalUnknownResponsesMessage DeserializeInternalUnknownResponsesMessage(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesItemType @type = default; - string id = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - MessageStatus? status = default; - InternalResponsesMessageRole internalRole = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesItemType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("id"u8)) - { - id = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("status"u8)) - { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - status = prop.Value.GetString().ToMessageStatus(); - continue; - } - if (prop.NameEquals("role"u8)) - { - internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesMessage(@type, id, additionalBinaryDataProperties, status, internalRole); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(MessageResponseItem)} does not support writing '{options.Format}' format."); - } - } - - MessageResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalUnknownResponsesMessage)PersistableModelCreateCore(data, options); - - protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeMessageResponseItem(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(MessageResponseItem)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesMessage.cs b/src/Generated/Models/InternalUnknownResponsesMessage.cs deleted file mode 100644 index 91f03ca20..000000000 --- a/src/Generated/Models/InternalUnknownResponsesMessage.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesMessage : MessageResponseItem - { - internal InternalUnknownResponsesMessage(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, InternalResponsesMessageRole internalRole) : base(@type != default ? @type : "unknown", id, additionalBinaryDataProperties, status, internalRole != default ? internalRole : "unknown") - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesMessageItemResource.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesMessageItemResource.Serialization.cs new file mode 100644 index 000000000..40a023f59 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesMessageItemResource.Serialization.cs @@ -0,0 +1,126 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownResponsesMessageItemResource : IJsonModel + { + internal InternalUnknownResponsesMessageItemResource() : this(default, null, null, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(MessageResponseItem)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + MessageResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalUnknownResponsesMessageItemResource)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(MessageResponseItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeMessageResponseItem(document.RootElement, options); + } + + internal static InternalUnknownResponsesMessageItemResource DeserializeInternalUnknownResponsesMessageItemResource(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + string id = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalResponsesMessageRole internalRole = default; + MessageStatus? status = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("id"u8)) + { + id = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("role"u8)) + { + internalRole = new InternalResponsesMessageRole(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("status"u8)) + { + status = prop.Value.GetString().ToMessageStatus(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownResponsesMessageItemResource(kind, id, additionalBinaryDataProperties, internalRole, status); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(MessageResponseItem)} does not support writing '{options.Format}' format."); + } + } + + MessageResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalUnknownResponsesMessageItemResource)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeMessageResponseItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(MessageResponseItem)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownResponsesMessageItemResource.cs b/src/Generated/Models/InternalUnknownResponsesMessageItemResource.cs new file mode 100644 index 000000000..73941f3bb --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesMessageItemResource.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownResponsesMessageItemResource : MessageResponseItem + { + internal InternalUnknownResponsesMessageItemResource(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole internalRole, MessageStatus? status) : base(kind != default ? kind : "unknown", id, additionalBinaryDataProperties, internalRole != default ? internalRole : "unknown", status) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownResponsesMessageItemResourceItemParam.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesMessageItemResourceItemParam.Serialization.cs new file mode 100644 index 000000000..b7dd20807 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesMessageItemResourceItemParam.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownResponsesMessageItemResourceItemParam : IJsonModel + { + internal InternalUnknownResponsesMessageItemResourceItemParam() : this(default, null, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesMessageItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalResponsesMessageItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalUnknownResponsesMessageItemResourceItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalResponsesMessageItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalResponsesMessageItemParam(document.RootElement, options); + } + + internal static InternalUnknownResponsesMessageItemResourceItemParam DeserializeInternalUnknownResponsesMessageItemResourceItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalResponsesMessageRole role = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("role"u8)) + { + role = new InternalResponsesMessageRole(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownResponsesMessageItemResourceItemParam(kind, additionalBinaryDataProperties, role); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalResponsesMessageItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalResponsesMessageItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalUnknownResponsesMessageItemResourceItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalResponsesMessageItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalResponsesMessageItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownResponsesMessageItemResourceItemParam.cs b/src/Generated/Models/InternalUnknownResponsesMessageItemResourceItemParam.cs new file mode 100644 index 000000000..adacf2a96 --- /dev/null +++ b/src/Generated/Models/InternalUnknownResponsesMessageItemResourceItemParam.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownResponsesMessageItemResourceItemParam : InternalResponsesMessageItemParam + { + internal InternalUnknownResponsesMessageItemResourceItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole role) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties, role != default ? role : "unknown") + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownResponsesOutputTextAnnotation.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesOutputTextAnnotation.Serialization.cs deleted file mode 100644 index ae6216e55..000000000 --- a/src/Generated/Models/InternalUnknownResponsesOutputTextAnnotation.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesOutputTextAnnotation : IJsonModel - { - internal InternalUnknownResponsesOutputTextAnnotation() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseMessageAnnotation)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - ResponseMessageAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseMessageAnnotation)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeResponseMessageAnnotation(document.RootElement, options); - } - - internal static InternalUnknownResponsesOutputTextAnnotation DeserializeInternalUnknownResponsesOutputTextAnnotation(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ResponseMessageAnnotationKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToResponseMessageAnnotationKind(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesOutputTextAnnotation(kind, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ResponseMessageAnnotation)} does not support writing '{options.Format}' format."); - } - } - - ResponseMessageAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeResponseMessageAnnotation(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ResponseMessageAnnotation)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesOutputTextAnnotation.cs b/src/Generated/Models/InternalUnknownResponsesOutputTextAnnotation.cs deleted file mode 100644 index 25aa8759f..000000000 --- a/src/Generated/Models/InternalUnknownResponsesOutputTextAnnotation.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesOutputTextAnnotation : ResponseMessageAnnotation - { - internal InternalUnknownResponsesOutputTextAnnotation(ResponseMessageAnnotationKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesReasoningItemSummaryElement.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesReasoningItemSummaryElement.Serialization.cs deleted file mode 100644 index 7217d1140..000000000 --- a/src/Generated/Models/InternalUnknownResponsesReasoningItemSummaryElement.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesReasoningItemSummaryElement : IJsonModel - { - internal InternalUnknownResponsesReasoningItemSummaryElement() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElement)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalResponsesReasoningItemSummaryElement IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override InternalResponsesReasoningItemSummaryElement JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElement)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesReasoningItemSummaryElement(document.RootElement, options); - } - - internal static InternalUnknownResponsesReasoningItemSummaryElement DeserializeInternalUnknownResponsesReasoningItemSummaryElement(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesReasoningItemSummaryType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesReasoningItemSummaryType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesReasoningItemSummaryElement(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElement)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesReasoningItemSummaryElement IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override InternalResponsesReasoningItemSummaryElement PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesReasoningItemSummaryElement(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesReasoningItemSummaryElement)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesReasoningItemSummaryElement.cs b/src/Generated/Models/InternalUnknownResponsesReasoningItemSummaryElement.cs deleted file mode 100644 index 89ebaabec..000000000 --- a/src/Generated/Models/InternalUnknownResponsesReasoningItemSummaryElement.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesReasoningItemSummaryElement : InternalResponsesReasoningItemSummaryElement - { - internal InternalUnknownResponsesReasoningItemSummaryElement(InternalResponsesReasoningItemSummaryType @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesTextFormat.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesTextFormat.Serialization.cs deleted file mode 100644 index 3b697ebfe..000000000 --- a/src/Generated/Models/InternalUnknownResponsesTextFormat.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesTextFormat : IJsonModel - { - internal InternalUnknownResponsesTextFormat() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseTextFormat)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - ResponseTextFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override ResponseTextFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseTextFormat)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeResponseTextFormat(document.RootElement, options); - } - - internal static InternalUnknownResponsesTextFormat DeserializeInternalUnknownResponsesTextFormat(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesTextFormatType internalType = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - internalType = new InternalResponsesTextFormatType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesTextFormat(internalType, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ResponseTextFormat)} does not support writing '{options.Format}' format."); - } - } - - ResponseTextFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override ResponseTextFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeResponseTextFormat(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ResponseTextFormat)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesTextFormat.cs b/src/Generated/Models/InternalUnknownResponsesTextFormat.cs deleted file mode 100644 index ca2dd3a28..000000000 --- a/src/Generated/Models/InternalUnknownResponsesTextFormat.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesTextFormat : ResponseTextFormat - { - internal InternalUnknownResponsesTextFormat(InternalResponsesTextFormatType internalType, IDictionary additionalBinaryDataProperties) : base(internalType != default ? internalType : "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesTool.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesTool.Serialization.cs deleted file mode 100644 index 101f6a5b6..000000000 --- a/src/Generated/Models/InternalUnknownResponsesTool.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesTool : IJsonModel - { - internal InternalUnknownResponsesTool() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseTool)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - ResponseTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ResponseTool)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeResponseTool(document.RootElement, options); - } - - internal static InternalUnknownResponsesTool DeserializeInternalUnknownResponsesTool(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesTool(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ResponseTool)} does not support writing '{options.Format}' format."); - } - } - - ResponseTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeResponseTool(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ResponseTool)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesTool.cs b/src/Generated/Models/InternalUnknownResponsesTool.cs deleted file mode 100644 index 96869dcb3..000000000 --- a/src/Generated/Models/InternalUnknownResponsesTool.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesTool : ResponseTool - { - internal InternalUnknownResponsesTool(InternalResponsesToolType @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesToolChoiceObject.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesToolChoiceObject.Serialization.cs deleted file mode 100644 index c701297c9..000000000 --- a/src/Generated/Models/InternalUnknownResponsesToolChoiceObject.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesToolChoiceObject : IJsonModel - { - internal InternalUnknownResponsesToolChoiceObject() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObject)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - InternalResponsesToolChoiceObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override InternalResponsesToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObject)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalResponsesToolChoiceObject(document.RootElement, options); - } - - internal static InternalUnknownResponsesToolChoiceObject DeserializeInternalUnknownResponsesToolChoiceObject(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesToolChoiceObjectType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesToolChoiceObjectType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesToolChoiceObject(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObject)} does not support writing '{options.Format}' format."); - } - } - - InternalResponsesToolChoiceObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override InternalResponsesToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalResponsesToolChoiceObject(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalResponsesToolChoiceObject)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesToolChoiceObject.cs b/src/Generated/Models/InternalUnknownResponsesToolChoiceObject.cs deleted file mode 100644 index 6d6b4dac8..000000000 --- a/src/Generated/Models/InternalUnknownResponsesToolChoiceObject.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesToolChoiceObject : InternalResponsesToolChoiceObject - { - internal InternalUnknownResponsesToolChoiceObject(InternalResponsesToolChoiceObjectType @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesWebSearchLocation.Serialization.cs b/src/Generated/Models/InternalUnknownResponsesWebSearchLocation.Serialization.cs deleted file mode 100644 index dc166cec2..000000000 --- a/src/Generated/Models/InternalUnknownResponsesWebSearchLocation.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesWebSearchLocation : IJsonModel - { - internal InternalUnknownResponsesWebSearchLocation() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(WebSearchToolLocation)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - WebSearchToolLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override WebSearchToolLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(WebSearchToolLocation)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeWebSearchToolLocation(document.RootElement, options); - } - - internal static InternalUnknownResponsesWebSearchLocation DeserializeInternalUnknownResponsesWebSearchLocation(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - string @type = "unknown"; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = prop.Value.GetString(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalUnknownResponsesWebSearchLocation(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(WebSearchToolLocation)} does not support writing '{options.Format}' format."); - } - } - - WebSearchToolLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override WebSearchToolLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeWebSearchToolLocation(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(WebSearchToolLocation)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/InternalUnknownResponsesWebSearchLocation.cs b/src/Generated/Models/InternalUnknownResponsesWebSearchLocation.cs deleted file mode 100644 index d6481ce12..000000000 --- a/src/Generated/Models/InternalUnknownResponsesWebSearchLocation.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class InternalUnknownResponsesWebSearchLocation : WebSearchToolLocation - { - internal InternalUnknownResponsesWebSearchLocation(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/InternalUnknownTool.Serialization.cs b/src/Generated/Models/InternalUnknownTool.Serialization.cs new file mode 100644 index 000000000..8fcb440e8 --- /dev/null +++ b/src/Generated/Models/InternalUnknownTool.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownTool : IJsonModel + { + internal InternalUnknownTool() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + ResponseTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseTool(document.RootElement, options); + } + + internal static InternalUnknownTool DeserializeInternalUnknownTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownTool(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ResponseTool)} does not support writing '{options.Format}' format."); + } + } + + ResponseTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownTool.cs b/src/Generated/Models/InternalUnknownTool.cs new file mode 100644 index 000000000..d2eeb9a83 --- /dev/null +++ b/src/Generated/Models/InternalUnknownTool.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownTool : ResponseTool + { + internal InternalUnknownTool(InternalToolType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUnknownToolChoiceObject.Serialization.cs b/src/Generated/Models/InternalUnknownToolChoiceObject.Serialization.cs new file mode 100644 index 000000000..3fc83bfb0 --- /dev/null +++ b/src/Generated/Models/InternalUnknownToolChoiceObject.Serialization.cs @@ -0,0 +1,108 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownToolChoiceObject : IJsonModel + { + internal InternalUnknownToolChoiceObject() : this(default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObject)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalToolChoiceObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalToolChoiceObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalToolChoiceObject(document.RootElement, options); + } + + internal static InternalUnknownToolChoiceObject DeserializeInternalUnknownToolChoiceObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolChoiceObjectType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolChoiceObjectType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUnknownToolChoiceObject(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalToolChoiceObject)} does not support writing '{options.Format}' format."); + } + } + + InternalToolChoiceObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalToolChoiceObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalToolChoiceObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUnknownToolChoiceObject.cs b/src/Generated/Models/InternalUnknownToolChoiceObject.cs new file mode 100644 index 000000000..7722674b6 --- /dev/null +++ b/src/Generated/Models/InternalUnknownToolChoiceObject.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalUnknownToolChoiceObject : InternalToolChoiceObject + { + internal InternalUnknownToolChoiceObject(InternalToolChoiceObjectType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalUpdateEvalRequest.Serialization.cs b/src/Generated/Models/InternalUpdateEvalRequest.Serialization.cs new file mode 100644 index 000000000..f728b3e96 --- /dev/null +++ b/src/Generated/Models/InternalUpdateEvalRequest.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Evals +{ + internal partial class InternalUpdateEvalRequest : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalUpdateEvalRequest)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Name) && _additionalBinaryDataProperties?.ContainsKey("name") != true) + { + writer.WritePropertyName("name"u8); + writer.WriteStringValue(Name); + } + if (Optional.IsDefined(Metadata) && _additionalBinaryDataProperties?.ContainsKey("metadata") != true) + { + writer.WritePropertyName("metadata"u8); + writer.WriteObjectValue(Metadata, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalUpdateEvalRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalUpdateEvalRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalUpdateEvalRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalUpdateEvalRequest(document.RootElement, options); + } + + internal static InternalUpdateEvalRequest DeserializeInternalUpdateEvalRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string name = default; + InternalMetadataPropertyForRequest metadata = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("name"u8)) + { + name = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("metadata"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + metadata = InternalMetadataPropertyForRequest.DeserializeInternalMetadataPropertyForRequest(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUpdateEvalRequest(name, metadata, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalUpdateEvalRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalUpdateEvalRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalUpdateEvalRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalUpdateEvalRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalUpdateEvalRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUpdateEvalRequest.cs b/src/Generated/Models/InternalUpdateEvalRequest.cs new file mode 100644 index 000000000..075b49129 --- /dev/null +++ b/src/Generated/Models/InternalUpdateEvalRequest.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Evals +{ + internal partial class InternalUpdateEvalRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalUpdateEvalRequest() + { + } + + internal InternalUpdateEvalRequest(string name, InternalMetadataPropertyForRequest metadata, IDictionary additionalBinaryDataProperties) + { + Name = name; + Metadata = metadata; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Name { get; set; } + + internal InternalMetadataPropertyForRequest Metadata { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalUpdateVectorStoreFileAttributesRequest.Serialization.cs b/src/Generated/Models/InternalUpdateVectorStoreFileAttributesRequest.Serialization.cs new file mode 100644 index 000000000..b01ed6e67 --- /dev/null +++ b/src/Generated/Models/InternalUpdateVectorStoreFileAttributesRequest.Serialization.cs @@ -0,0 +1,174 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalUpdateVectorStoreFileAttributesRequest : IJsonModel + { + internal InternalUpdateVectorStoreFileAttributesRequest() : this(null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalUpdateVectorStoreFileAttributesRequest)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("attributes") != true) + { + if (Optional.IsCollectionDefined(Attributes)) + { + writer.WritePropertyName("attributes"u8); + writer.WriteStartObject(); + foreach (var item in Attributes) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("attributes"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalUpdateVectorStoreFileAttributesRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalUpdateVectorStoreFileAttributesRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalUpdateVectorStoreFileAttributesRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalUpdateVectorStoreFileAttributesRequest(document.RootElement, options); + } + + internal static InternalUpdateVectorStoreFileAttributesRequest DeserializeInternalUpdateVectorStoreFileAttributesRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + IDictionary attributes = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("attributes"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + attributes = new ChangeTrackingDictionary(); + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + attributes = dictionary; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalUpdateVectorStoreFileAttributesRequest(attributes, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalUpdateVectorStoreFileAttributesRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalUpdateVectorStoreFileAttributesRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalUpdateVectorStoreFileAttributesRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalUpdateVectorStoreFileAttributesRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalUpdateVectorStoreFileAttributesRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalUpdateVectorStoreFileAttributesRequest.cs b/src/Generated/Models/InternalUpdateVectorStoreFileAttributesRequest.cs new file mode 100644 index 000000000..b7f6ee57f --- /dev/null +++ b/src/Generated/Models/InternalUpdateVectorStoreFileAttributesRequest.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalUpdateVectorStoreFileAttributesRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalUpdateVectorStoreFileAttributesRequest(IDictionary attributes) + { + // Plugin customization: ensure initialization of collections + Attributes = attributes ?? new ChangeTrackingDictionary(); + } + + internal InternalUpdateVectorStoreFileAttributesRequest(IDictionary attributes, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Attributes = attributes ?? new ChangeTrackingDictionary(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public IDictionary Attributes { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalUpload.Serialization.cs b/src/Generated/Models/InternalUpload.Serialization.cs index 7fbe9eaa9..93f1711fd 100644 --- a/src/Generated/Models/InternalUpload.Serialization.cs +++ b/src/Generated/Models/InternalUpload.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -69,13 +70,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(Object) && _additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.Value.ToString()); + writer.WriteStringValue(Object); } if (Optional.IsDefined(File) && _additionalBinaryDataProperties?.ContainsKey("file") != true) { writer.WritePropertyName("file"u8); writer.WriteObjectValue(File, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -99,6 +101,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalUpload IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalUpload JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -123,7 +126,7 @@ internal static InternalUpload DeserializeInternalUpload(JsonElement element, Mo string purpose = default; InternalUploadStatus status = default; DateTimeOffset expiresAt = default; - InternalUploadObject? @object = default; + string @object = default; OpenAIFile @file = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -165,11 +168,7 @@ internal static InternalUpload DeserializeInternalUpload(JsonElement element, Mo } if (prop.NameEquals("object"u8)) { - if (prop.Value.ValueKind == JsonValueKind.Null) - { - continue; - } - @object = new InternalUploadObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("file"u8)) @@ -182,6 +181,7 @@ internal static InternalUpload DeserializeInternalUpload(JsonElement element, Mo @file = OpenAIFile.DeserializeOpenAIFile(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUpload( @@ -199,13 +199,14 @@ internal static InternalUpload DeserializeInternalUpload(JsonElement element, Mo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalUpload)} does not support writing '{options.Format}' format."); } @@ -213,6 +214,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalUpload IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalUpload PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -229,21 +231,5 @@ protected virtual InternalUpload PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalUpload internalUpload) - { - if (internalUpload == null) - { - return null; - } - return BinaryContent.Create(internalUpload, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalUpload(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalUpload(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalUpload.cs b/src/Generated/Models/InternalUpload.cs index 43d97a848..846d003db 100644 --- a/src/Generated/Models/InternalUpload.cs +++ b/src/Generated/Models/InternalUpload.cs @@ -22,7 +22,7 @@ internal InternalUpload(string id, DateTimeOffset createdAt, string filename, in ExpiresAt = expiresAt; } - internal InternalUpload(string id, DateTimeOffset createdAt, string filename, int bytes, string purpose, InternalUploadStatus status, DateTimeOffset expiresAt, InternalUploadObject? @object, OpenAIFile @file, IDictionary additionalBinaryDataProperties) + internal InternalUpload(string id, DateTimeOffset createdAt, string filename, int bytes, string purpose, InternalUploadStatus status, DateTimeOffset expiresAt, string @object, OpenAIFile @file, IDictionary additionalBinaryDataProperties) { Id = id; CreatedAt = createdAt; @@ -46,11 +46,11 @@ internal InternalUpload(string id, DateTimeOffset createdAt, string filename, in public string Purpose { get; } - public InternalUploadStatus Status { get; } + internal InternalUploadStatus Status { get; } public DateTimeOffset ExpiresAt { get; } - public InternalUploadObject? Object { get; } + public string Object { get; } public OpenAIFile File { get; } diff --git a/src/Generated/Models/InternalUploadObject.cs b/src/Generated/Models/InternalUploadObject.cs deleted file mode 100644 index db22cc690..000000000 --- a/src/Generated/Models/InternalUploadObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Files -{ - internal readonly partial struct InternalUploadObject : IEquatable - { - private readonly string _value; - private const string UploadValue = "upload"; - - public InternalUploadObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalUploadObject Upload { get; } = new InternalUploadObject(UploadValue); - - public static bool operator ==(InternalUploadObject left, InternalUploadObject right) => left.Equals(right); - - public static bool operator !=(InternalUploadObject left, InternalUploadObject right) => !left.Equals(right); - - public static implicit operator InternalUploadObject(string value) => new InternalUploadObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalUploadObject other && Equals(other); - - public bool Equals(InternalUploadObject 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/InternalUploadPart.Serialization.cs b/src/Generated/Models/InternalUploadPart.Serialization.cs index efbbd709e..8bfbc4ebe 100644 --- a/src/Generated/Models/InternalUploadPart.Serialization.cs +++ b/src/Generated/Models/InternalUploadPart.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -49,8 +50,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalUploadPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalUploadPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -94,7 +97,7 @@ internal static InternalUploadPart DeserializeInternalUploadPart(JsonElement ele string id = default; DateTimeOffset createdAt = default; string uploadId = default; - InternalUploadPartObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -115,9 +118,10 @@ internal static InternalUploadPart DeserializeInternalUploadPart(JsonElement ele } if (prop.NameEquals("object"u8)) { - @object = new InternalUploadPartObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalUploadPart(id, createdAt, uploadId, @object, additionalBinaryDataProperties); @@ -125,13 +129,14 @@ internal static InternalUploadPart DeserializeInternalUploadPart(JsonElement ele BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalUploadPart)} does not support writing '{options.Format}' format."); } @@ -139,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalUploadPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalUploadPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +161,5 @@ protected virtual InternalUploadPart PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalUploadPart internalUploadPart) - { - if (internalUploadPart == null) - { - return null; - } - return BinaryContent.Create(internalUploadPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalUploadPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalUploadPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalUploadPart.cs b/src/Generated/Models/InternalUploadPart.cs index 691aa0696..5acefce59 100644 --- a/src/Generated/Models/InternalUploadPart.cs +++ b/src/Generated/Models/InternalUploadPart.cs @@ -18,7 +18,7 @@ internal InternalUploadPart(string id, DateTimeOffset createdAt, string uploadId UploadId = uploadId; } - internal InternalUploadPart(string id, DateTimeOffset createdAt, string uploadId, InternalUploadPartObject @object, IDictionary additionalBinaryDataProperties) + internal InternalUploadPart(string id, DateTimeOffset createdAt, string uploadId, string @object, IDictionary additionalBinaryDataProperties) { Id = id; CreatedAt = createdAt; @@ -33,7 +33,7 @@ internal InternalUploadPart(string id, DateTimeOffset createdAt, string uploadId public string UploadId { get; } - public InternalUploadPartObject Object { get; } = "upload.part"; + public string Object { get; } = "upload.part"; internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/InternalUploadPartObject.cs b/src/Generated/Models/InternalUploadPartObject.cs deleted file mode 100644 index e452ba598..000000000 --- a/src/Generated/Models/InternalUploadPartObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Files -{ - internal readonly partial struct InternalUploadPartObject : IEquatable - { - private readonly string _value; - private const string UploadPartValue = "upload.part"; - - public InternalUploadPartObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalUploadPartObject UploadPart { get; } = new InternalUploadPartObject(UploadPartValue); - - public static bool operator ==(InternalUploadPartObject left, InternalUploadPartObject right) => left.Equals(right); - - public static bool operator !=(InternalUploadPartObject left, InternalUploadPartObject right) => !left.Equals(right); - - public static implicit operator InternalUploadPartObject(string value) => new InternalUploadPartObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalUploadPartObject other && Equals(other); - - public bool Equals(InternalUploadPartObject 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/InternalUploadStatus.cs b/src/Generated/Models/InternalUploadStatus.cs index 41cf69b1a..a34dc58cc 100644 --- a/src/Generated/Models/InternalUploadStatus.cs +++ b/src/Generated/Models/InternalUploadStatus.cs @@ -23,13 +23,13 @@ public InternalUploadStatus(string value) _value = value; } - public static InternalUploadStatus Pending { get; } = new InternalUploadStatus(PendingValue); + internal static InternalUploadStatus Pending { get; } = new InternalUploadStatus(PendingValue); - public static InternalUploadStatus Completed { get; } = new InternalUploadStatus(CompletedValue); + internal static InternalUploadStatus Completed { get; } = new InternalUploadStatus(CompletedValue); - public static InternalUploadStatus Cancelled { get; } = new InternalUploadStatus(CancelledValue); + internal static InternalUploadStatus Cancelled { get; } = new InternalUploadStatus(CancelledValue); - public static InternalUploadStatus Expired { get; } = new InternalUploadStatus(ExpiredValue); + internal static InternalUploadStatus Expired { get; } = new InternalUploadStatus(ExpiredValue); public static bool operator ==(InternalUploadStatus left, InternalUploadStatus right) => left.Equals(right); diff --git a/src/Generated/Models/InternalVadConfig.Serialization.cs b/src/Generated/Models/InternalVadConfig.Serialization.cs new file mode 100644 index 000000000..bf2eec1af --- /dev/null +++ b/src/Generated/Models/InternalVadConfig.Serialization.cs @@ -0,0 +1,173 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + internal partial class InternalVadConfig : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVadConfig)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (Optional.IsDefined(PrefixPaddingMs) && _additionalBinaryDataProperties?.ContainsKey("prefix_padding_ms") != true) + { + writer.WritePropertyName("prefix_padding_ms"u8); + writer.WriteNumberValue(PrefixPaddingMs.Value); + } + if (Optional.IsDefined(SilenceDurationMs) && _additionalBinaryDataProperties?.ContainsKey("silence_duration_ms") != true) + { + writer.WritePropertyName("silence_duration_ms"u8); + writer.WriteNumberValue(SilenceDurationMs.Value); + } + if (Optional.IsDefined(Threshold) && _additionalBinaryDataProperties?.ContainsKey("threshold") != true) + { + writer.WritePropertyName("threshold"u8); + writer.WriteNumberValue(Threshold.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalVadConfig IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalVadConfig JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVadConfig)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalVadConfig(document.RootElement, options); + } + + internal static InternalVadConfig DeserializeInternalVadConfig(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + int? prefixPaddingMs = default; + int? silenceDurationMs = default; + float? threshold = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("prefix_padding_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + prefixPaddingMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("silence_duration_ms"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + silenceDurationMs = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + threshold = prop.Value.GetSingle(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalVadConfig(kind, prefixPaddingMs, silenceDurationMs, threshold, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalVadConfig)} does not support writing '{options.Format}' format."); + } + } + + InternalVadConfig IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalVadConfig PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalVadConfig(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalVadConfig)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalVadConfig.cs b/src/Generated/Models/InternalVadConfig.cs new file mode 100644 index 000000000..07eeea743 --- /dev/null +++ b/src/Generated/Models/InternalVadConfig.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + internal partial class InternalVadConfig + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalVadConfig() + { + } + + internal InternalVadConfig(string kind, int? prefixPaddingMs, int? silenceDurationMs, float? threshold, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + PrefixPaddingMs = prefixPaddingMs; + SilenceDurationMs = silenceDurationMs; + Threshold = threshold; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "server_vad"; + + public int? PrefixPaddingMs { get; set; } + + public int? SilenceDurationMs { get; set; } + + public float? Threshold { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalValidateGraderRequest.Serialization.cs b/src/Generated/Models/InternalValidateGraderRequest.Serialization.cs new file mode 100644 index 000000000..a5c80440a --- /dev/null +++ b/src/Generated/Models/InternalValidateGraderRequest.Serialization.cs @@ -0,0 +1,139 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalValidateGraderRequest : IJsonModel + { + internal InternalValidateGraderRequest() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalValidateGraderRequest)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("grader") != true) + { + writer.WritePropertyName("grader"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Grader); +#else + using (JsonDocument document = JsonDocument.Parse(Grader)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalValidateGraderRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalValidateGraderRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalValidateGraderRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalValidateGraderRequest(document.RootElement, options); + } + + internal static InternalValidateGraderRequest DeserializeInternalValidateGraderRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData grader = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("grader"u8)) + { + grader = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalValidateGraderRequest(grader, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalValidateGraderRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalValidateGraderRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalValidateGraderRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalValidateGraderRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalValidateGraderRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalValidateGraderRequest.cs b/src/Generated/Models/InternalValidateGraderRequest.cs new file mode 100644 index 000000000..6f6e665c0 --- /dev/null +++ b/src/Generated/Models/InternalValidateGraderRequest.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalValidateGraderRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalValidateGraderRequest(BinaryData grader) + { + Argument.AssertNotNull(grader, nameof(grader)); + + Grader = grader; + } + + internal InternalValidateGraderRequest(BinaryData grader, IDictionary additionalBinaryDataProperties) + { + Grader = grader; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public BinaryData Grader { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalValidateGraderResponse.Serialization.cs b/src/Generated/Models/InternalValidateGraderResponse.Serialization.cs new file mode 100644 index 000000000..ea3a7c8de --- /dev/null +++ b/src/Generated/Models/InternalValidateGraderResponse.Serialization.cs @@ -0,0 +1,139 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Graders +{ + internal partial class InternalValidateGraderResponse : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalValidateGraderResponse)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Grader) && _additionalBinaryDataProperties?.ContainsKey("grader") != true) + { + writer.WritePropertyName("grader"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Grader); +#else + using (JsonDocument document = JsonDocument.Parse(Grader)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalValidateGraderResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalValidateGraderResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalValidateGraderResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalValidateGraderResponse(document.RootElement, options); + } + + internal static InternalValidateGraderResponse DeserializeInternalValidateGraderResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData grader = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("grader"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + grader = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalValidateGraderResponse(grader, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalValidateGraderResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalValidateGraderResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalValidateGraderResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalValidateGraderResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalValidateGraderResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalValidateGraderResponse.cs b/src/Generated/Models/InternalValidateGraderResponse.cs new file mode 100644 index 000000000..36b263e6a --- /dev/null +++ b/src/Generated/Models/InternalValidateGraderResponse.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Graders +{ + internal partial class InternalValidateGraderResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalValidateGraderResponse() + { + } + + internal InternalValidateGraderResponse(BinaryData grader, IDictionary additionalBinaryDataProperties) + { + Grader = grader; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public BinaryData Grader { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalVectorStoreFileAttributes.Serialization.cs b/src/Generated/Models/InternalVectorStoreFileAttributes.Serialization.cs deleted file mode 100644 index 10bda7a96..000000000 --- a/src/Generated/Models/InternalVectorStoreFileAttributes.Serialization.cs +++ /dev/null @@ -1,120 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal partial class InternalVectorStoreFileAttributes : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalVectorStoreFileAttributes)} does not support writing '{format}' format."); - } - foreach (var item in AdditionalProperties) - { - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - - InternalVectorStoreFileAttributes IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual InternalVectorStoreFileAttributes JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(InternalVectorStoreFileAttributes)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalVectorStoreFileAttributes(document.RootElement, options); - } - - internal static InternalVectorStoreFileAttributes DeserializeInternalVectorStoreFileAttributes(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - IDictionary additionalProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - additionalProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new InternalVectorStoreFileAttributes(additionalProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(InternalVectorStoreFileAttributes)} does not support writing '{options.Format}' format."); - } - } - - InternalVectorStoreFileAttributes IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual InternalVectorStoreFileAttributes PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeInternalVectorStoreFileAttributes(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(InternalVectorStoreFileAttributes)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalVectorStoreFileAttributes internalVectorStoreFileAttributes) - { - if (internalVectorStoreFileAttributes == null) - { - return null; - } - return BinaryContent.Create(internalVectorStoreFileAttributes, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalVectorStoreFileAttributes(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalVectorStoreFileAttributes(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/InternalVectorStoreFileAttributes.cs b/src/Generated/Models/InternalVectorStoreFileAttributes.cs deleted file mode 100644 index cccb5c3f8..000000000 --- a/src/Generated/Models/InternalVectorStoreFileAttributes.cs +++ /dev/null @@ -1,33 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal partial class InternalVectorStoreFileAttributes - { - private protected IDictionary _additionalBinaryDataProperties; - - public InternalVectorStoreFileAttributes() - { - _additionalBinaryDataProperties = new ChangeTrackingDictionary(); - } - - internal InternalVectorStoreFileAttributes(IDictionary additionalProperties) - { - _additionalBinaryDataProperties = additionalProperties; - } - - public IDictionary AdditionalProperties => _additionalBinaryDataProperties; - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs b/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs index 79438c517..294220705 100644 --- a/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs +++ b/src/Generated/Models/InternalVectorStoreFileBatchObjectFileCounts.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total"u8); writer.WriteNumberValue(Total); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -79,6 +81,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalVectorStoreFileBatchObjectFileCounts IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalVectorStoreFileBatchObjectFileCounts JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,6 +132,7 @@ internal static InternalVectorStoreFileBatchObjectFileCounts DeserializeInternal total = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalVectorStoreFileBatchObjectFileCounts( @@ -142,13 +146,14 @@ internal static InternalVectorStoreFileBatchObjectFileCounts DeserializeInternal BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalVectorStoreFileBatchObjectFileCounts)} does not support writing '{options.Format}' format."); } @@ -156,6 +161,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalVectorStoreFileBatchObjectFileCounts IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalVectorStoreFileBatchObjectFileCounts PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -172,21 +178,5 @@ protected virtual InternalVectorStoreFileBatchObjectFileCounts PersistableModelC } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalVectorStoreFileBatchObjectFileCounts internalVectorStoreFileBatchObjectFileCounts) - { - if (internalVectorStoreFileBatchObjectFileCounts == null) - { - return null; - } - return BinaryContent.Create(internalVectorStoreFileBatchObjectFileCounts, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalVectorStoreFileBatchObjectFileCounts(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalVectorStoreFileBatchObjectFileCounts(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalVectorStoreFileBatchObjectObject.cs b/src/Generated/Models/InternalVectorStoreFileBatchObjectObject.cs deleted file mode 100644 index 9e5e701c6..000000000 --- a/src/Generated/Models/InternalVectorStoreFileBatchObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal readonly partial struct InternalVectorStoreFileBatchObjectObject : IEquatable - { - private readonly string _value; - private const string VectorStoreFilesBatchValue = "vector_store.files_batch"; - - public InternalVectorStoreFileBatchObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalVectorStoreFileBatchObjectObject VectorStoreFilesBatch { get; } = new InternalVectorStoreFileBatchObjectObject(VectorStoreFilesBatchValue); - - public static bool operator ==(InternalVectorStoreFileBatchObjectObject left, InternalVectorStoreFileBatchObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalVectorStoreFileBatchObjectObject left, InternalVectorStoreFileBatchObjectObject right) => !left.Equals(right); - - public static implicit operator InternalVectorStoreFileBatchObjectObject(string value) => new InternalVectorStoreFileBatchObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalVectorStoreFileBatchObjectObject other && Equals(other); - - public bool Equals(InternalVectorStoreFileBatchObjectObject 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/InternalVectorStoreFileContentResponse.Serialization.cs b/src/Generated/Models/InternalVectorStoreFileContentResponse.Serialization.cs new file mode 100644 index 000000000..745bea7d4 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreFileContentResponse.Serialization.cs @@ -0,0 +1,187 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreFileContentResponse : IJsonModel + { + internal InternalVectorStoreFileContentResponse() : this(null, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreFileContentResponse)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalVectorStoreFileContentResponseDatum item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (_additionalBinaryDataProperties?.ContainsKey("next_page") != true) + { + if (Optional.IsDefined(NextPage)) + { + writer.WritePropertyName("next_page"u8); + writer.WriteStringValue(NextPage); + } + else + { + writer.WriteNull("next_page"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalVectorStoreFileContentResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreFileContentResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreFileContentResponse)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalVectorStoreFileContentResponse(document.RootElement, options); + } + + internal static InternalVectorStoreFileContentResponse DeserializeInternalVectorStoreFileContentResponse(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList data = default; + bool hasMore = default; + string nextPage = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalVectorStoreFileContentResponseDatum.DeserializeInternalVectorStoreFileContentResponseDatum(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("next_page"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + nextPage = null; + continue; + } + nextPage = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalVectorStoreFileContentResponse(@object, data, hasMore, nextPage, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalVectorStoreFileContentResponse)} does not support writing '{options.Format}' format."); + } + } + + InternalVectorStoreFileContentResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreFileContentResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalVectorStoreFileContentResponse(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalVectorStoreFileContentResponse)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalVectorStoreFileContentResponse.cs b/src/Generated/Models/InternalVectorStoreFileContentResponse.cs new file mode 100644 index 000000000..d4fedff0a --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreFileContentResponse.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreFileContentResponse + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalVectorStoreFileContentResponse(IEnumerable data, bool hasMore, string nextPage) + { + Data = data.ToList(); + HasMore = hasMore; + NextPage = nextPage; + } + + internal InternalVectorStoreFileContentResponse(string @object, IList data, bool hasMore, string nextPage, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + Data = data ?? new ChangeTrackingList(); + HasMore = hasMore; + NextPage = nextPage; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "vector_store.file_content.page"; + + internal IList Data { get; } + + public bool HasMore { get; } + + public string NextPage { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalVectorStoreFileContentResponseDatum.Serialization.cs b/src/Generated/Models/InternalVectorStoreFileContentResponseDatum.Serialization.cs new file mode 100644 index 000000000..1467fd0cc --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreFileContentResponseDatum.Serialization.cs @@ -0,0 +1,139 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreFileContentResponseDatum : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreFileContentResponseDatum)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Kind) && _additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (Optional.IsDefined(Text) && _additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalVectorStoreFileContentResponseDatum IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreFileContentResponseDatum JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreFileContentResponseDatum)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalVectorStoreFileContentResponseDatum(document.RootElement, options); + } + + internal static InternalVectorStoreFileContentResponseDatum DeserializeInternalVectorStoreFileContentResponseDatum(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + string text = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalVectorStoreFileContentResponseDatum(kind, text, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalVectorStoreFileContentResponseDatum)} does not support writing '{options.Format}' format."); + } + } + + InternalVectorStoreFileContentResponseDatum IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreFileContentResponseDatum PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalVectorStoreFileContentResponseDatum(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalVectorStoreFileContentResponseDatum)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalVectorStoreFileContentResponseDatum.cs b/src/Generated/Models/InternalVectorStoreFileContentResponseDatum.cs new file mode 100644 index 000000000..0c316ccab --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreFileContentResponseDatum.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreFileContentResponseDatum + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalVectorStoreFileContentResponseDatum() + { + } + + internal InternalVectorStoreFileContentResponseDatum(string kind, string text, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Text = text; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } + + public string Text { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalVectorStoreFileObjectObject.cs b/src/Generated/Models/InternalVectorStoreFileObjectObject.cs deleted file mode 100644 index 306b13005..000000000 --- a/src/Generated/Models/InternalVectorStoreFileObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal readonly partial struct InternalVectorStoreFileObjectObject : IEquatable - { - private readonly string _value; - private const string VectorStoreFileValue = "vector_store.file"; - - public InternalVectorStoreFileObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalVectorStoreFileObjectObject VectorStoreFile { get; } = new InternalVectorStoreFileObjectObject(VectorStoreFileValue); - - public static bool operator ==(InternalVectorStoreFileObjectObject left, InternalVectorStoreFileObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalVectorStoreFileObjectObject left, InternalVectorStoreFileObjectObject right) => !left.Equals(right); - - public static implicit operator InternalVectorStoreFileObjectObject(string value) => new InternalVectorStoreFileObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalVectorStoreFileObjectObject other && Equals(other); - - public bool Equals(InternalVectorStoreFileObjectObject 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/InternalVectorStoreObjectObject.cs b/src/Generated/Models/InternalVectorStoreObjectObject.cs deleted file mode 100644 index 6ba2fcd08..000000000 --- a/src/Generated/Models/InternalVectorStoreObjectObject.cs +++ /dev/null @@ -1,41 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.VectorStores -{ - internal readonly partial struct InternalVectorStoreObjectObject : IEquatable - { - private readonly string _value; - private const string VectorStoreValue = "vector_store"; - - public InternalVectorStoreObjectObject(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static InternalVectorStoreObjectObject VectorStore { get; } = new InternalVectorStoreObjectObject(VectorStoreValue); - - public static bool operator ==(InternalVectorStoreObjectObject left, InternalVectorStoreObjectObject right) => left.Equals(right); - - public static bool operator !=(InternalVectorStoreObjectObject left, InternalVectorStoreObjectObject right) => !left.Equals(right); - - public static implicit operator InternalVectorStoreObjectObject(string value) => new InternalVectorStoreObjectObject(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is InternalVectorStoreObjectObject other && Equals(other); - - public bool Equals(InternalVectorStoreObjectObject 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/InternalVectorStoreSearchRequest.Serialization.cs b/src/Generated/Models/InternalVectorStoreSearchRequest.Serialization.cs new file mode 100644 index 000000000..a5ae3a7c2 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchRequest.Serialization.cs @@ -0,0 +1,212 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchRequest : IJsonModel + { + internal InternalVectorStoreSearchRequest() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchRequest)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("query") != true) + { + writer.WritePropertyName("query"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Query); +#else + using (JsonDocument document = JsonDocument.Parse(Query)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(RewriteQuery) && _additionalBinaryDataProperties?.ContainsKey("rewrite_query") != true) + { + writer.WritePropertyName("rewrite_query"u8); + writer.WriteBooleanValue(RewriteQuery.Value); + } + if (Optional.IsDefined(MaxNumResults) && _additionalBinaryDataProperties?.ContainsKey("max_num_results") != true) + { + writer.WritePropertyName("max_num_results"u8); + writer.WriteNumberValue(MaxNumResults.Value); + } + if (Optional.IsDefined(Filters) && _additionalBinaryDataProperties?.ContainsKey("filters") != true) + { + writer.WritePropertyName("filters"u8); +#if NET6_0_OR_GREATER + writer.WriteRawValue(Filters); +#else + using (JsonDocument document = JsonDocument.Parse(Filters)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + if (Optional.IsDefined(RankingOptions) && _additionalBinaryDataProperties?.ContainsKey("ranking_options") != true) + { + writer.WritePropertyName("ranking_options"u8); + writer.WriteObjectValue(RankingOptions, options); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalVectorStoreSearchRequest IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchRequest JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchRequest)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalVectorStoreSearchRequest(document.RootElement, options); + } + + internal static InternalVectorStoreSearchRequest DeserializeInternalVectorStoreSearchRequest(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + BinaryData query = default; + bool? rewriteQuery = default; + int? maxNumResults = default; + BinaryData filters = default; + InternalVectorStoreSearchRequestRankingOptions rankingOptions = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("query"u8)) + { + query = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("rewrite_query"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + rewriteQuery = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("max_num_results"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + maxNumResults = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("filters"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + filters = BinaryData.FromString(prop.Value.GetRawText()); + continue; + } + if (prop.NameEquals("ranking_options"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + rankingOptions = InternalVectorStoreSearchRequestRankingOptions.DeserializeInternalVectorStoreSearchRequestRankingOptions(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalVectorStoreSearchRequest( + query, + rewriteQuery, + maxNumResults, + filters, + rankingOptions, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalVectorStoreSearchRequest)} does not support writing '{options.Format}' format."); + } + } + + InternalVectorStoreSearchRequest IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchRequest PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalVectorStoreSearchRequest(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalVectorStoreSearchRequest)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchRequest.cs b/src/Generated/Models/InternalVectorStoreSearchRequest.cs new file mode 100644 index 000000000..12b9b4bb1 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchRequest.cs @@ -0,0 +1,45 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchRequest + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalVectorStoreSearchRequest(BinaryData query) + { + Query = query; + } + + internal InternalVectorStoreSearchRequest(BinaryData query, bool? rewriteQuery, int? maxNumResults, BinaryData filters, InternalVectorStoreSearchRequestRankingOptions rankingOptions, IDictionary additionalBinaryDataProperties) + { + Query = query; + RewriteQuery = rewriteQuery; + MaxNumResults = maxNumResults; + Filters = filters; + RankingOptions = rankingOptions; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public BinaryData Query { get; } + + public bool? RewriteQuery { get; } + + public int? MaxNumResults { get; } + + public BinaryData Filters { get; } + + internal InternalVectorStoreSearchRequestRankingOptions RankingOptions { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptions.Serialization.cs b/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptions.Serialization.cs new file mode 100644 index 000000000..329fc9917 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptions.Serialization.cs @@ -0,0 +1,147 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchRequestRankingOptions : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchRequestRankingOptions)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(Ranker) && _additionalBinaryDataProperties?.ContainsKey("ranker") != true) + { + writer.WritePropertyName("ranker"u8); + writer.WriteStringValue(Ranker.Value.ToString()); + } + if (Optional.IsDefined(ScoreThreshold) && _additionalBinaryDataProperties?.ContainsKey("score_threshold") != true) + { + writer.WritePropertyName("score_threshold"u8); + writer.WriteNumberValue(ScoreThreshold.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalVectorStoreSearchRequestRankingOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchRequestRankingOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchRequestRankingOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalVectorStoreSearchRequestRankingOptions(document.RootElement, options); + } + + internal static InternalVectorStoreSearchRequestRankingOptions DeserializeInternalVectorStoreSearchRequestRankingOptions(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalVectorStoreSearchRequestRankingOptionsRanker? ranker = default; + float? scoreThreshold = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("ranker"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + ranker = new InternalVectorStoreSearchRequestRankingOptionsRanker(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("score_threshold"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + scoreThreshold = prop.Value.GetSingle(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalVectorStoreSearchRequestRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalVectorStoreSearchRequestRankingOptions)} does not support writing '{options.Format}' format."); + } + } + + InternalVectorStoreSearchRequestRankingOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchRequestRankingOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalVectorStoreSearchRequestRankingOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalVectorStoreSearchRequestRankingOptions)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptions.cs b/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptions.cs new file mode 100644 index 000000000..dc2ba3e55 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptions.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchRequestRankingOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + public InternalVectorStoreSearchRequestRankingOptions() + { + } + + internal InternalVectorStoreSearchRequestRankingOptions(InternalVectorStoreSearchRequestRankingOptionsRanker? ranker, float? scoreThreshold, IDictionary additionalBinaryDataProperties) + { + Ranker = ranker; + ScoreThreshold = scoreThreshold; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalVectorStoreSearchRequestRankingOptionsRanker? Ranker { get; set; } + + public float? ScoreThreshold { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptionsRanker.cs b/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptionsRanker.cs new file mode 100644 index 000000000..631d10865 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchRequestRankingOptionsRanker.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal readonly partial struct InternalVectorStoreSearchRequestRankingOptionsRanker : IEquatable + { + private readonly string _value; + private const string AutoValue = "auto"; + private const string Default20241115Value = "default-2024-11-15"; + + public InternalVectorStoreSearchRequestRankingOptionsRanker(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalVectorStoreSearchRequestRankingOptionsRanker Auto { get; } = new InternalVectorStoreSearchRequestRankingOptionsRanker(AutoValue); + + internal static InternalVectorStoreSearchRequestRankingOptionsRanker Default20241115 { get; } = new InternalVectorStoreSearchRequestRankingOptionsRanker(Default20241115Value); + + public static bool operator ==(InternalVectorStoreSearchRequestRankingOptionsRanker left, InternalVectorStoreSearchRequestRankingOptionsRanker right) => left.Equals(right); + + public static bool operator !=(InternalVectorStoreSearchRequestRankingOptionsRanker left, InternalVectorStoreSearchRequestRankingOptionsRanker right) => !left.Equals(right); + + public static implicit operator InternalVectorStoreSearchRequestRankingOptionsRanker(string value) => new InternalVectorStoreSearchRequestRankingOptionsRanker(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalVectorStoreSearchRequestRankingOptionsRanker other && Equals(other); + + public bool Equals(InternalVectorStoreSearchRequestRankingOptionsRanker 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/InternalVectorStoreSearchResultContentObject.Serialization.cs b/src/Generated/Models/InternalVectorStoreSearchResultContentObject.Serialization.cs new file mode 100644 index 000000000..00a3e33c1 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchResultContentObject.Serialization.cs @@ -0,0 +1,143 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchResultContentObject : IJsonModel + { + internal InternalVectorStoreSearchResultContentObject() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultContentObject)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind); + } + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalVectorStoreSearchResultContentObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchResultContentObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultContentObject)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalVectorStoreSearchResultContentObject(document.RootElement, options); + } + + internal static InternalVectorStoreSearchResultContentObject DeserializeInternalVectorStoreSearchResultContentObject(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string kind = default; + string text = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalVectorStoreSearchResultContentObject(kind, text, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalVectorStoreSearchResultContentObject)} does not support writing '{options.Format}' format."); + } + } + + InternalVectorStoreSearchResultContentObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchResultContentObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalVectorStoreSearchResultContentObject(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultContentObject)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchResultContentObject.cs b/src/Generated/Models/InternalVectorStoreSearchResultContentObject.cs new file mode 100644 index 000000000..acce20d28 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchResultContentObject.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchResultContentObject + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalVectorStoreSearchResultContentObject(string text) + { + Text = text; + } + + internal InternalVectorStoreSearchResultContentObject(string kind, string text, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Text = text; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Kind { get; } = "text"; + + public string Text { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchResultItem.Serialization.cs b/src/Generated/Models/InternalVectorStoreSearchResultItem.Serialization.cs new file mode 100644 index 000000000..ca77266f2 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchResultItem.Serialization.cs @@ -0,0 +1,234 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchResultItem : IJsonModel + { + internal InternalVectorStoreSearchResultItem() : this(null, null, default, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultItem)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("file_id") != true) + { + writer.WritePropertyName("file_id"u8); + writer.WriteStringValue(FileId); + } + if (_additionalBinaryDataProperties?.ContainsKey("filename") != true) + { + writer.WritePropertyName("filename"u8); + writer.WriteStringValue(Filename); + } + if (_additionalBinaryDataProperties?.ContainsKey("score") != true) + { + writer.WritePropertyName("score"u8); + writer.WriteNumberValue(Score); + } + if (_additionalBinaryDataProperties?.ContainsKey("attributes") != true) + { + if (Optional.IsCollectionDefined(Attributes)) + { + writer.WritePropertyName("attributes"u8); + writer.WriteStartObject(); + foreach (var item in Attributes) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + writer.WriteEndObject(); + } + else + { + writer.WriteNull("attributes"u8); + } + } + if (_additionalBinaryDataProperties?.ContainsKey("content") != true) + { + writer.WritePropertyName("content"u8); + writer.WriteStartArray(); + foreach (InternalVectorStoreSearchResultContentObject item in Content) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalVectorStoreSearchResultItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchResultItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalVectorStoreSearchResultItem(document.RootElement, options); + } + + internal static InternalVectorStoreSearchResultItem DeserializeInternalVectorStoreSearchResultItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string fileId = default; + string filename = default; + float score = default; + IDictionary attributes = default; + IList content = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("file_id"u8)) + { + fileId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("filename"u8)) + { + filename = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("score"u8)) + { + score = prop.Value.GetSingle(); + continue; + } + if (prop.NameEquals("attributes"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + attributes = new ChangeTrackingDictionary(); + continue; + } + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, BinaryData.FromString(prop0.Value.GetRawText())); + } + } + attributes = dictionary; + continue; + } + if (prop.NameEquals("content"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalVectorStoreSearchResultContentObject.DeserializeInternalVectorStoreSearchResultContentObject(item, options)); + } + content = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalVectorStoreSearchResultItem( + fileId, + filename, + score, + attributes, + content, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalVectorStoreSearchResultItem)} does not support writing '{options.Format}' format."); + } + } + + InternalVectorStoreSearchResultItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchResultItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalVectorStoreSearchResultItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultItem)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchResultItem.cs b/src/Generated/Models/InternalVectorStoreSearchResultItem.cs new file mode 100644 index 000000000..4b07ed68b --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchResultItem.cs @@ -0,0 +1,53 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchResultItem + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalVectorStoreSearchResultItem(string fileId, string filename, float score, IDictionary attributes, IEnumerable content) + { + // Plugin customization: ensure initialization of collections + FileId = fileId; + Filename = filename; + Score = score; + Attributes = attributes ?? new ChangeTrackingDictionary(); + Content = content.ToList(); + } + + internal InternalVectorStoreSearchResultItem(string fileId, string filename, float score, IDictionary attributes, IList content, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + FileId = fileId; + Filename = filename; + Score = score; + Attributes = attributes ?? new ChangeTrackingDictionary(); + Content = content ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string FileId { get; } + + public string Filename { get; } + + public float Score { get; } + + public IDictionary Attributes { get; } + + internal IList Content { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchResultsPage.Serialization.cs b/src/Generated/Models/InternalVectorStoreSearchResultsPage.Serialization.cs new file mode 100644 index 000000000..7ed2dbcda --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchResultsPage.Serialization.cs @@ -0,0 +1,226 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchResultsPage : IJsonModel + { + internal InternalVectorStoreSearchResultsPage() : this(null, null, null, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultsPage)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + if (_additionalBinaryDataProperties?.ContainsKey("search_query") != true) + { + writer.WritePropertyName("search_query"u8); + writer.WriteStartArray(); + foreach (string item in SearchQuery) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("data") != true) + { + writer.WritePropertyName("data"u8); + writer.WriteStartArray(); + foreach (InternalVectorStoreSearchResultItem item in Data) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + if (_additionalBinaryDataProperties?.ContainsKey("has_more") != true) + { + writer.WritePropertyName("has_more"u8); + writer.WriteBooleanValue(HasMore); + } + if (_additionalBinaryDataProperties?.ContainsKey("next_page") != true) + { + if (Optional.IsDefined(NextPage)) + { + writer.WritePropertyName("next_page"u8); + writer.WriteStringValue(NextPage); + } + else + { + writer.WriteNull("next_page"u8); + } + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + InternalVectorStoreSearchResultsPage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchResultsPage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultsPage)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalVectorStoreSearchResultsPage(document.RootElement, options); + } + + internal static InternalVectorStoreSearchResultsPage DeserializeInternalVectorStoreSearchResultsPage(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + string @object = default; + IList searchQuery = default; + IList data = default; + bool hasMore = default; + string nextPage = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("search_query"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + searchQuery = array; + continue; + } + if (prop.NameEquals("data"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(InternalVectorStoreSearchResultItem.DeserializeInternalVectorStoreSearchResultItem(item, options)); + } + data = array; + continue; + } + if (prop.NameEquals("has_more"u8)) + { + hasMore = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("next_page"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + nextPage = null; + continue; + } + nextPage = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalVectorStoreSearchResultsPage( + @object, + searchQuery, + data, + hasMore, + nextPage, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalVectorStoreSearchResultsPage)} does not support writing '{options.Format}' format."); + } + } + + InternalVectorStoreSearchResultsPage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual InternalVectorStoreSearchResultsPage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalVectorStoreSearchResultsPage(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalVectorStoreSearchResultsPage)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalVectorStoreSearchResultsPage.cs b/src/Generated/Models/InternalVectorStoreSearchResultsPage.cs new file mode 100644 index 000000000..f45ebcc84 --- /dev/null +++ b/src/Generated/Models/InternalVectorStoreSearchResultsPage.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.VectorStores +{ + internal partial class InternalVectorStoreSearchResultsPage + { + private protected IDictionary _additionalBinaryDataProperties; + + internal InternalVectorStoreSearchResultsPage(IEnumerable searchQuery, IEnumerable data, bool hasMore, string nextPage) + { + SearchQuery = searchQuery.ToList(); + Data = data.ToList(); + HasMore = hasMore; + NextPage = nextPage; + } + + internal InternalVectorStoreSearchResultsPage(string @object, IList searchQuery, IList data, bool hasMore, string nextPage, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Object = @object; + SearchQuery = searchQuery ?? new ChangeTrackingList(); + Data = data ?? new ChangeTrackingList(); + HasMore = hasMore; + NextPage = nextPage; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public string Object { get; } = "vector_store.search_results.page"; + + public IList SearchQuery { get; } + + internal IList Data { get; } + + public bool HasMore { get; } + + public string NextPage { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/InternalVoiceIdsShared.cs b/src/Generated/Models/InternalVoiceIdsShared.cs new file mode 100644 index 000000000..dcc690c27 --- /dev/null +++ b/src/Generated/Models/InternalVoiceIdsShared.cs @@ -0,0 +1,71 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Internal +{ + internal readonly partial struct InternalVoiceIdsShared : IEquatable + { + private readonly string _value; + private const string AlloyValue = "alloy"; + private const string AshValue = "ash"; + private const string BalladValue = "ballad"; + private const string CoralValue = "coral"; + private const string EchoValue = "echo"; + private const string FableValue = "fable"; + private const string OnyxValue = "onyx"; + private const string NovaValue = "nova"; + private const string SageValue = "sage"; + private const string ShimmerValue = "shimmer"; + private const string VerseValue = "verse"; + + public InternalVoiceIdsShared(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalVoiceIdsShared Alloy { get; } = new InternalVoiceIdsShared(AlloyValue); + + internal static InternalVoiceIdsShared Ash { get; } = new InternalVoiceIdsShared(AshValue); + + internal static InternalVoiceIdsShared Ballad { get; } = new InternalVoiceIdsShared(BalladValue); + + internal static InternalVoiceIdsShared Coral { get; } = new InternalVoiceIdsShared(CoralValue); + + internal static InternalVoiceIdsShared Echo { get; } = new InternalVoiceIdsShared(EchoValue); + + internal static InternalVoiceIdsShared Fable { get; } = new InternalVoiceIdsShared(FableValue); + + internal static InternalVoiceIdsShared Onyx { get; } = new InternalVoiceIdsShared(OnyxValue); + + internal static InternalVoiceIdsShared Nova { get; } = new InternalVoiceIdsShared(NovaValue); + + internal static InternalVoiceIdsShared Sage { get; } = new InternalVoiceIdsShared(SageValue); + + internal static InternalVoiceIdsShared Shimmer { get; } = new InternalVoiceIdsShared(ShimmerValue); + + internal static InternalVoiceIdsShared Verse { get; } = new InternalVoiceIdsShared(VerseValue); + + public static bool operator ==(InternalVoiceIdsShared left, InternalVoiceIdsShared right) => left.Equals(right); + + public static bool operator !=(InternalVoiceIdsShared left, InternalVoiceIdsShared right) => !left.Equals(right); + + public static implicit operator InternalVoiceIdsShared(string value) => new InternalVoiceIdsShared(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalVoiceIdsShared other && Equals(other); + + public bool Equals(InternalVoiceIdsShared 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/InternalWebSearchContextSize.cs b/src/Generated/Models/InternalWebSearchContextSize.cs index 199fa5b1f..b56b31fdd 100644 --- a/src/Generated/Models/InternalWebSearchContextSize.cs +++ b/src/Generated/Models/InternalWebSearchContextSize.cs @@ -22,11 +22,11 @@ public InternalWebSearchContextSize(string value) _value = value; } - public static InternalWebSearchContextSize Low { get; } = new InternalWebSearchContextSize(LowValue); + internal static InternalWebSearchContextSize Low { get; } = new InternalWebSearchContextSize(LowValue); - public static InternalWebSearchContextSize Medium { get; } = new InternalWebSearchContextSize(MediumValue); + internal static InternalWebSearchContextSize Medium { get; } = new InternalWebSearchContextSize(MediumValue); - public static InternalWebSearchContextSize High { get; } = new InternalWebSearchContextSize(HighValue); + internal static InternalWebSearchContextSize High { get; } = new InternalWebSearchContextSize(HighValue); public static bool operator ==(InternalWebSearchContextSize left, InternalWebSearchContextSize right) => left.Equals(right); diff --git a/src/Generated/Models/InternalWebSearchLocation.Serialization.cs b/src/Generated/Models/InternalWebSearchLocation.Serialization.cs index 26667440e..99aeb38ac 100644 --- a/src/Generated/Models/InternalWebSearchLocation.Serialization.cs +++ b/src/Generated/Models/InternalWebSearchLocation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -47,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("timezone"u8); writer.WriteStringValue(Timezone); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -70,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit InternalWebSearchLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual InternalWebSearchLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -114,6 +117,7 @@ internal static InternalWebSearchLocation DeserializeInternalWebSearchLocation(J timezone = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new InternalWebSearchLocation(country, region, city, timezone, additionalBinaryDataProperties); @@ -121,13 +125,14 @@ internal static InternalWebSearchLocation DeserializeInternalWebSearchLocation(J BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalWebSearchLocation)} does not support writing '{options.Format}' format."); } @@ -135,6 +140,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalWebSearchLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual InternalWebSearchLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -151,21 +157,5 @@ protected virtual InternalWebSearchLocation PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(InternalWebSearchLocation internalWebSearchLocation) - { - if (internalWebSearchLocation == null) - { - return null; - } - return BinaryContent.Create(internalWebSearchLocation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator InternalWebSearchLocation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeInternalWebSearchLocation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/InternalWebSearchPreviewToolSearchContextSize.cs b/src/Generated/Models/InternalWebSearchPreviewToolSearchContextSize.cs new file mode 100644 index 000000000..d44b08995 --- /dev/null +++ b/src/Generated/Models/InternalWebSearchPreviewToolSearchContextSize.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalWebSearchPreviewToolSearchContextSize : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + + public InternalWebSearchPreviewToolSearchContextSize(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalWebSearchPreviewToolSearchContextSize Low { get; } = new InternalWebSearchPreviewToolSearchContextSize(LowValue); + + internal static InternalWebSearchPreviewToolSearchContextSize Medium { get; } = new InternalWebSearchPreviewToolSearchContextSize(MediumValue); + + internal static InternalWebSearchPreviewToolSearchContextSize High { get; } = new InternalWebSearchPreviewToolSearchContextSize(HighValue); + + public static bool operator ==(InternalWebSearchPreviewToolSearchContextSize left, InternalWebSearchPreviewToolSearchContextSize right) => left.Equals(right); + + public static bool operator !=(InternalWebSearchPreviewToolSearchContextSize left, InternalWebSearchPreviewToolSearchContextSize right) => !left.Equals(right); + + public static implicit operator InternalWebSearchPreviewToolSearchContextSize(string value) => new InternalWebSearchPreviewToolSearchContextSize(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalWebSearchPreviewToolSearchContextSize other && Equals(other); + + public bool Equals(InternalWebSearchPreviewToolSearchContextSize 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/InternalWebSearchTool.Serialization.cs b/src/Generated/Models/InternalWebSearchTool.Serialization.cs new file mode 100644 index 000000000..5854676d9 --- /dev/null +++ b/src/Generated/Models/InternalWebSearchTool.Serialization.cs @@ -0,0 +1,135 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalWebSearchTool : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalWebSearchTool)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (Optional.IsDefined(UserLocation) && _additionalBinaryDataProperties?.ContainsKey("user_location") != true) + { + writer.WritePropertyName("user_location"u8); + writer.WriteObjectValue(UserLocation, options); + } + if (Optional.IsDefined(SearchContextSize) && _additionalBinaryDataProperties?.ContainsKey("search_context_size") != true) + { + writer.WritePropertyName("search_context_size"u8); + writer.WriteStringValue(SearchContextSize.Value.ToString()); + } + } + + InternalWebSearchTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalWebSearchTool)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalWebSearchTool)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalWebSearchTool(document.RootElement, options); + } + + internal static InternalWebSearchTool DeserializeInternalWebSearchTool(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalToolType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + WebSearchUserLocation userLocation = default; + WebSearchContextSize? searchContextSize = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalToolType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("user_location"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + userLocation = null; + continue; + } + userLocation = WebSearchUserLocation.DeserializeWebSearchUserLocation(prop.Value, options); + continue; + } + if (prop.NameEquals("search_context_size"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + searchContextSize = new WebSearchContextSize(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalWebSearchTool(kind, additionalBinaryDataProperties, userLocation, searchContextSize); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalWebSearchTool)} does not support writing '{options.Format}' format."); + } + } + + InternalWebSearchTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalWebSearchTool)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalWebSearchTool(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalWebSearchTool)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalWebSearchTool.cs b/src/Generated/Models/InternalWebSearchTool.cs new file mode 100644 index 000000000..425121189 --- /dev/null +++ b/src/Generated/Models/InternalWebSearchTool.cs @@ -0,0 +1,22 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalWebSearchTool : ResponseTool + { + public InternalWebSearchTool() : this(InternalToolType.WebSearchPreview, null, null, default) + { + } + + internal InternalWebSearchTool(InternalToolType kind, IDictionary additionalBinaryDataProperties, WebSearchUserLocation userLocation, WebSearchContextSize? searchContextSize) : base(kind, additionalBinaryDataProperties) + { + UserLocation = userLocation; + SearchContextSize = searchContextSize; + } + } +} diff --git a/src/Generated/Models/InternalWebSearchToolCallItemParam.Serialization.cs b/src/Generated/Models/InternalWebSearchToolCallItemParam.Serialization.cs new file mode 100644 index 000000000..abad7fb53 --- /dev/null +++ b/src/Generated/Models/InternalWebSearchToolCallItemParam.Serialization.cs @@ -0,0 +1,104 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class InternalWebSearchToolCallItemParam : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalWebSearchToolCallItemParam)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + InternalWebSearchToolCallItemParam IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (InternalWebSearchToolCallItemParam)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(InternalWebSearchToolCallItemParam)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeInternalWebSearchToolCallItemParam(document.RootElement, options); + } + + internal static InternalWebSearchToolCallItemParam DeserializeInternalWebSearchToolCallItemParam(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalItemType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalItemType(prop.Value.GetString()); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new InternalWebSearchToolCallItemParam(kind, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(InternalWebSearchToolCallItemParam)} does not support writing '{options.Format}' format."); + } + } + + InternalWebSearchToolCallItemParam IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (InternalWebSearchToolCallItemParam)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override InternalItemParam PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeInternalWebSearchToolCallItemParam(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(InternalWebSearchToolCallItemParam)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/InternalWebSearchToolCallItemParam.cs b/src/Generated/Models/InternalWebSearchToolCallItemParam.cs new file mode 100644 index 000000000..cee766cc1 --- /dev/null +++ b/src/Generated/Models/InternalWebSearchToolCallItemParam.cs @@ -0,0 +1,20 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class InternalWebSearchToolCallItemParam : InternalItemParam + { + public InternalWebSearchToolCallItemParam() : this(InternalItemType.WebSearchCall, null) + { + } + + internal InternalWebSearchToolCallItemParam(InternalItemType kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/InternalWebSearchUserLocationKind.cs b/src/Generated/Models/InternalWebSearchUserLocationKind.cs new file mode 100644 index 000000000..7fe88c3ec --- /dev/null +++ b/src/Generated/Models/InternalWebSearchUserLocationKind.cs @@ -0,0 +1,41 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + internal readonly partial struct InternalWebSearchUserLocationKind : IEquatable + { + private readonly string _value; + private const string ApproximateValue = "approximate"; + + public InternalWebSearchUserLocationKind(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + internal static InternalWebSearchUserLocationKind Approximate { get; } = new InternalWebSearchUserLocationKind(ApproximateValue); + + public static bool operator ==(InternalWebSearchUserLocationKind left, InternalWebSearchUserLocationKind right) => left.Equals(right); + + public static bool operator !=(InternalWebSearchUserLocationKind left, InternalWebSearchUserLocationKind right) => !left.Equals(right); + + public static implicit operator InternalWebSearchUserLocationKind(string value) => new InternalWebSearchUserLocationKind(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is InternalWebSearchUserLocationKind other && Equals(other); + + public bool Equals(InternalWebSearchUserLocationKind 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/ItemCreatedUpdate.Serialization.cs b/src/Generated/Models/ItemCreatedUpdate.Serialization.cs new file mode 100644 index 000000000..42e7e9964 --- /dev/null +++ b/src/Generated/Models/ItemCreatedUpdate.Serialization.cs @@ -0,0 +1,136 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class ItemCreatedUpdate : IJsonModel + { + internal ItemCreatedUpdate() : this(RealtimeUpdateKind.ItemCreated, null, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ItemCreatedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("previous_item_id") != true) + { + writer.WritePropertyName("previous_item_id"u8); + writer.WriteStringValue(PreviousItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("item") != true) + { + writer.WritePropertyName("item"u8); + writer.WriteObjectValue(_internalItem, options); + } + } + + ItemCreatedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ItemCreatedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ItemCreatedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeItemCreatedUpdate(document.RootElement, options); + } + + internal static ItemCreatedUpdate DeserializeItemCreatedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string previousItemId = default; + InternalRealtimeResponseItem internalItem = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("previous_item_id"u8)) + { + previousItemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item"u8)) + { + internalItem = InternalRealtimeResponseItem.DeserializeInternalRealtimeResponseItem(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ItemCreatedUpdate(kind, eventId, additionalBinaryDataProperties, previousItemId, internalItem); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ItemCreatedUpdate)} does not support writing '{options.Format}' format."); + } + } + + ItemCreatedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ItemCreatedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeItemCreatedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ItemCreatedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ItemCreatedUpdate.cs b/src/Generated/Models/ItemCreatedUpdate.cs new file mode 100644 index 000000000..2cd351179 --- /dev/null +++ b/src/Generated/Models/ItemCreatedUpdate.cs @@ -0,0 +1,26 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class ItemCreatedUpdate : RealtimeUpdate + { + internal ItemCreatedUpdate(string previousItemId, InternalRealtimeResponseItem internalItem) : base(RealtimeUpdateKind.ItemCreated) + { + PreviousItemId = previousItemId; + _internalItem = internalItem; + } + + internal ItemCreatedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string previousItemId, InternalRealtimeResponseItem internalItem) : base(kind, eventId, additionalBinaryDataProperties) + { + PreviousItemId = previousItemId; + _internalItem = internalItem; + } + + public string PreviousItemId { get; } + } +} diff --git a/src/Generated/Models/ItemDeletedUpdate.Serialization.cs b/src/Generated/Models/ItemDeletedUpdate.Serialization.cs new file mode 100644 index 000000000..9c0051b47 --- /dev/null +++ b/src/Generated/Models/ItemDeletedUpdate.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class ItemDeletedUpdate : IJsonModel + { + internal ItemDeletedUpdate() : this(RealtimeUpdateKind.ItemDeleted, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ItemDeletedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + } + + ItemDeletedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ItemDeletedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ItemDeletedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeItemDeletedUpdate(document.RootElement, options); + } + + internal static ItemDeletedUpdate DeserializeItemDeletedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ItemDeletedUpdate(kind, eventId, additionalBinaryDataProperties, itemId); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ItemDeletedUpdate)} does not support writing '{options.Format}' format."); + } + } + + ItemDeletedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ItemDeletedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeItemDeletedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ItemDeletedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ItemDeletedUpdate.cs b/src/Generated/Models/ItemDeletedUpdate.cs new file mode 100644 index 000000000..617faba25 --- /dev/null +++ b/src/Generated/Models/ItemDeletedUpdate.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class ItemDeletedUpdate : RealtimeUpdate + { + internal ItemDeletedUpdate(string itemId) : base(RealtimeUpdateKind.ItemDeleted) + { + ItemId = itemId; + } + + internal ItemDeletedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string itemId) : base(kind, eventId, additionalBinaryDataProperties) + { + ItemId = itemId; + } + + public string ItemId { get; } + } +} diff --git a/src/Generated/Models/ItemRetrievedUpdate.Serialization.cs b/src/Generated/Models/ItemRetrievedUpdate.Serialization.cs new file mode 100644 index 000000000..c43859daa --- /dev/null +++ b/src/Generated/Models/ItemRetrievedUpdate.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class ItemRetrievedUpdate : IJsonModel + { + internal ItemRetrievedUpdate() : this(RealtimeUpdateKind.ItemRetrieved, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ItemRetrievedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item") != true) + { + writer.WritePropertyName("item"u8); + writer.WriteObjectValue(Item, options); + } + } + + ItemRetrievedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ItemRetrievedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ItemRetrievedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeItemRetrievedUpdate(document.RootElement, options); + } + + internal static ItemRetrievedUpdate DeserializeItemRetrievedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + RealtimeItem item = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item"u8)) + { + item = RealtimeItem.DeserializeRealtimeItem(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ItemRetrievedUpdate(kind, eventId, additionalBinaryDataProperties, item); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ItemRetrievedUpdate)} does not support writing '{options.Format}' format."); + } + } + + ItemRetrievedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ItemRetrievedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeItemRetrievedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ItemRetrievedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ItemRetrievedUpdate.cs b/src/Generated/Models/ItemRetrievedUpdate.cs new file mode 100644 index 000000000..69b0430a4 --- /dev/null +++ b/src/Generated/Models/ItemRetrievedUpdate.cs @@ -0,0 +1,22 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class ItemRetrievedUpdate : RealtimeUpdate + { + internal ItemRetrievedUpdate(RealtimeItem item) : base(RealtimeUpdateKind.ItemRetrieved) + { + Item = item; + } + + internal ItemRetrievedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, RealtimeItem item) : base(kind, eventId, additionalBinaryDataProperties) + { + Item = item; + } + } +} diff --git a/src/Generated/Models/ItemTruncatedUpdate.Serialization.cs b/src/Generated/Models/ItemTruncatedUpdate.Serialization.cs new file mode 100644 index 000000000..b43c6a133 --- /dev/null +++ b/src/Generated/Models/ItemTruncatedUpdate.Serialization.cs @@ -0,0 +1,153 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class ItemTruncatedUpdate : IJsonModel + { + internal ItemTruncatedUpdate() : this(RealtimeUpdateKind.ItemTruncated, null, null, null, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ItemTruncatedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("audio_end_ms") != true) + { + writer.WritePropertyName("audio_end_ms"u8); + writer.WriteNumberValue(AudioEndMs); + } + } + + ItemTruncatedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ItemTruncatedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ItemTruncatedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeItemTruncatedUpdate(document.RootElement, options); + } + + internal static ItemTruncatedUpdate DeserializeItemTruncatedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string itemId = default; + int contentIndex = default; + int audioEndMs = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + contentIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("audio_end_ms"u8)) + { + audioEndMs = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ItemTruncatedUpdate( + kind, + eventId, + additionalBinaryDataProperties, + itemId, + contentIndex, + audioEndMs); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ItemTruncatedUpdate)} does not support writing '{options.Format}' format."); + } + } + + ItemTruncatedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ItemTruncatedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeItemTruncatedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ItemTruncatedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ItemTruncatedUpdate.cs b/src/Generated/Models/ItemTruncatedUpdate.cs new file mode 100644 index 000000000..32285185a --- /dev/null +++ b/src/Generated/Models/ItemTruncatedUpdate.cs @@ -0,0 +1,32 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class ItemTruncatedUpdate : RealtimeUpdate + { + internal ItemTruncatedUpdate(string itemId, int contentIndex, int audioEndMs) : base(RealtimeUpdateKind.ItemTruncated) + { + ItemId = itemId; + ContentIndex = contentIndex; + AudioEndMs = audioEndMs; + } + + internal ItemTruncatedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string itemId, int contentIndex, int audioEndMs) : base(kind, eventId, additionalBinaryDataProperties) + { + ItemId = itemId; + ContentIndex = contentIndex; + AudioEndMs = audioEndMs; + } + + public string ItemId { get; } + + public int ContentIndex { get; } + + public int AudioEndMs { get; } + } +} diff --git a/src/Generated/Models/MessageContent.Serialization.cs b/src/Generated/Models/MessageContent.Serialization.cs index 114ed886a..4726db279 100644 --- a/src/Generated/Models/MessageContent.Serialization.cs +++ b/src/Generated/Models/MessageContent.Serialization.cs @@ -3,15 +3,28 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Assistants { + [PersistableModelProxy(typeof(InternalUnknownMessageContent))] public abstract partial class MessageContent : IJsonModel { + internal MessageContent() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -19,6 +32,12 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(MessageContent)} does not support writing '{format}' format."); } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -42,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit MessageContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -55,13 +75,14 @@ protected virtual MessageContent JsonModelCreateCore(ref Utf8JsonReader reader, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(MessageContent)} does not support writing '{options.Format}' format."); } @@ -69,6 +90,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions MessageContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual MessageContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,21 +107,5 @@ protected virtual MessageContent PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(MessageContent messageContent) - { - if (messageContent == null) - { - return null; - } - return BinaryContent.Create(messageContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator MessageContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeMessageContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/MessageContent.cs b/src/Generated/Models/MessageContent.cs index 28ad462fb..8ee9a6a38 100644 --- a/src/Generated/Models/MessageContent.cs +++ b/src/Generated/Models/MessageContent.cs @@ -11,11 +11,19 @@ public abstract partial class MessageContent { private protected IDictionary _additionalBinaryDataProperties; - internal MessageContent(IDictionary additionalBinaryDataProperties) + private protected MessageContent(InternalMessageContentType kind) { + Kind = kind; + } + + internal MessageContent(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } + internal InternalMessageContentType Kind { get; set; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/MessageCreationAttachment.Serialization.cs b/src/Generated/Models/MessageCreationAttachment.Serialization.cs index 96cad2c3c..356a76b01 100644 --- a/src/Generated/Models/MessageCreationAttachment.Serialization.cs +++ b/src/Generated/Models/MessageCreationAttachment.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { public partial class MessageCreationAttachment : IJsonModel { - internal MessageCreationAttachment() + internal MessageCreationAttachment() : this(null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("tools"u8); SerializeTools(writer, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit MessageCreationAttachment IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual MessageCreationAttachment JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static MessageCreationAttachment DeserializeMessageCreationAttachment(J DeserializeTools(prop, ref tools); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageCreationAttachment(fileId, tools, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static MessageCreationAttachment DeserializeMessageCreationAttachment(J BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(MessageCreationAttachment)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions MessageCreationAttachment IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual MessageCreationAttachment PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual MessageCreationAttachment PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(MessageCreationAttachment messageCreationAttachment) - { - if (messageCreationAttachment == null) - { - return null; - } - return BinaryContent.Create(messageCreationAttachment, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator MessageCreationAttachment(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeMessageCreationAttachment(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/MessageCreationAttachment.cs b/src/Generated/Models/MessageCreationAttachment.cs index 7c9a2606c..a55b32607 100644 --- a/src/Generated/Models/MessageCreationAttachment.cs +++ b/src/Generated/Models/MessageCreationAttachment.cs @@ -24,8 +24,9 @@ public MessageCreationAttachment(string fileId, IEnumerable tool internal MessageCreationAttachment(string fileId, IReadOnlyList tools, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections FileId = fileId; - Tools = tools; + Tools = tools ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/MessageCreationOptions.Serialization.cs b/src/Generated/Models/MessageCreationOptions.Serialization.cs index 42916a88d..b57648f9c 100644 --- a/src/Generated/Models/MessageCreationOptions.Serialization.cs +++ b/src/Generated/Models/MessageCreationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Assistants { public partial class MessageCreationOptions : IJsonModel { + public MessageCreationOptions() : this(null, null, default, null, null) + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,6 +68,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("content"u8); SerializeContent(writer, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -86,6 +92,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit MessageCreationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual MessageCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -160,6 +167,7 @@ internal static MessageCreationOptions DeserializeMessageCreationOptions(JsonEle content = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageCreationOptions(attachments ?? new ChangeTrackingList(), metadata ?? new ChangeTrackingDictionary(), role, content, additionalBinaryDataProperties); @@ -167,13 +175,14 @@ internal static MessageCreationOptions DeserializeMessageCreationOptions(JsonEle BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(MessageCreationOptions)} does not support writing '{options.Format}' format."); } @@ -181,6 +190,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions MessageCreationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual MessageCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -197,21 +207,5 @@ protected virtual MessageCreationOptions PersistableModelCreateCore(BinaryData d } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(MessageCreationOptions messageCreationOptions) - { - if (messageCreationOptions == null) - { - return null; - } - return BinaryContent.Create(messageCreationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator MessageCreationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeMessageCreationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/MessageCreationOptions.cs b/src/Generated/Models/MessageCreationOptions.cs index 387548cdc..bddddceb8 100644 --- a/src/Generated/Models/MessageCreationOptions.cs +++ b/src/Generated/Models/MessageCreationOptions.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; namespace OpenAI.Assistants { @@ -13,10 +14,11 @@ public partial class MessageCreationOptions internal MessageCreationOptions(IList attachments, IDictionary metadata, MessageRole role, IList content, IDictionary additionalBinaryDataProperties) { - Attachments = attachments; - Metadata = metadata; + // Plugin customization: ensure initialization of collections + Attachments = attachments ?? new ChangeTrackingList(); + Metadata = metadata ?? new ChangeTrackingDictionary(); Role = role; - Content = content; + Content = content ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/MessageDeletionResult.Serialization.cs b/src/Generated/Models/MessageDeletionResult.Serialization.cs index badafc0bf..e6260c3c9 100644 --- a/src/Generated/Models/MessageDeletionResult.Serialization.cs +++ b/src/Generated/Models/MessageDeletionResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,8 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit MessageDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual MessageDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,7 +91,7 @@ internal static MessageDeletionResult DeserializeMessageDeletionResult(JsonEleme } bool deleted = default; string messageId = default; - InternalDeleteMessageResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -104,9 +107,10 @@ internal static MessageDeletionResult DeserializeMessageDeletionResult(JsonEleme } if (prop.NameEquals("object"u8)) { - @object = new InternalDeleteMessageResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageDeletionResult(deleted, messageId, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static MessageDeletionResult DeserializeMessageDeletionResult(JsonEleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(MessageDeletionResult)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions MessageDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual MessageDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual MessageDeletionResult PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(MessageDeletionResult messageDeletionResult) - { - if (messageDeletionResult == null) - { - return null; - } - return BinaryContent.Create(messageDeletionResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator MessageDeletionResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeMessageDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/MessageDeletionResult.cs b/src/Generated/Models/MessageDeletionResult.cs index d0d24f34d..02520dd5c 100644 --- a/src/Generated/Models/MessageDeletionResult.cs +++ b/src/Generated/Models/MessageDeletionResult.cs @@ -17,7 +17,7 @@ internal MessageDeletionResult(bool deleted, string messageId) MessageId = messageId; } - internal MessageDeletionResult(bool deleted, string messageId, InternalDeleteMessageResponseObject @object, IDictionary additionalBinaryDataProperties) + internal MessageDeletionResult(bool deleted, string messageId, string @object, IDictionary additionalBinaryDataProperties) { Deleted = deleted; MessageId = messageId; diff --git a/src/Generated/Models/MessageFailureDetails.Serialization.cs b/src/Generated/Models/MessageFailureDetails.Serialization.cs index c9c493388..427f89997 100644 --- a/src/Generated/Models/MessageFailureDetails.Serialization.cs +++ b/src/Generated/Models/MessageFailureDetails.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reason"u8); writer.WriteStringValue(Reason.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit MessageFailureDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual MessageFailureDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static MessageFailureDetails DeserializeMessageFailureDetails(JsonEleme reason = new MessageFailureReason(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageFailureDetails(reason, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static MessageFailureDetails DeserializeMessageFailureDetails(JsonEleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(MessageFailureDetails)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions MessageFailureDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual MessageFailureDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual MessageFailureDetails PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(MessageFailureDetails messageFailureDetails) - { - if (messageFailureDetails == null) - { - return null; - } - return BinaryContent.Create(messageFailureDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator MessageFailureDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeMessageFailureDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/MessageModificationOptions.Serialization.cs b/src/Generated/Models/MessageModificationOptions.Serialization.cs index 407856c36..2d01c099a 100644 --- a/src/Generated/Models/MessageModificationOptions.Serialization.cs +++ b/src/Generated/Models/MessageModificationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -43,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -66,6 +68,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit MessageModificationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual MessageModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -108,6 +111,7 @@ internal static MessageModificationOptions DeserializeMessageModificationOptions metadata = dictionary; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new MessageModificationOptions(metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); @@ -115,13 +119,14 @@ internal static MessageModificationOptions DeserializeMessageModificationOptions BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(MessageModificationOptions)} does not support writing '{options.Format}' format."); } @@ -129,6 +134,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions MessageModificationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual MessageModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -145,21 +151,5 @@ protected virtual MessageModificationOptions PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(MessageModificationOptions messageModificationOptions) - { - if (messageModificationOptions == null) - { - return null; - } - return BinaryContent.Create(messageModificationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator MessageModificationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeMessageModificationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/MessageModificationOptions.cs b/src/Generated/Models/MessageModificationOptions.cs index 128b930b5..8528181c9 100644 --- a/src/Generated/Models/MessageModificationOptions.cs +++ b/src/Generated/Models/MessageModificationOptions.cs @@ -12,14 +12,14 @@ public partial class MessageModificationOptions { private protected IDictionary _additionalBinaryDataProperties; - public MessageModificationOptions() + public MessageModificationOptions() : this(null, null) { - Metadata = new ChangeTrackingDictionary(); } internal MessageModificationOptions(IDictionary metadata, IDictionary additionalBinaryDataProperties) { - Metadata = metadata; + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/MessageResponseItem.Serialization.cs b/src/Generated/Models/MessageResponseItem.Serialization.cs index 15b31bdbf..43f4021e2 100644 --- a/src/Generated/Models/MessageResponseItem.Serialization.cs +++ b/src/Generated/Models/MessageResponseItem.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +12,7 @@ namespace OpenAI.Responses { public partial class MessageResponseItem : IJsonModel { - internal MessageResponseItem() + internal MessageResponseItem() : this(InternalItemType.Message, null, null, default, default) { } @@ -23,6 +23,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -31,20 +32,22 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(MessageResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) - { - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.Value.ToSerialString()); - } if (_additionalBinaryDataProperties?.ContainsKey("role") != true) { writer.WritePropertyName("role"u8); writer.WriteStringValue(InternalRole.ToString()); } + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup + if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) + { + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.Value.ToSerialString()); + } } MessageResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (MessageResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -76,18 +79,19 @@ internal static MessageResponseItem DeserializeMessageResponseItem(JsonElement e return InternalResponsesAssistantMessage.DeserializeInternalResponsesAssistantMessage(element, options); } } - return InternalUnknownResponsesMessage.DeserializeInternalUnknownResponsesMessage(element, options); + return InternalUnknownResponsesMessageItemResource.DeserializeInternalUnknownResponsesMessageItemResource(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(MessageResponseItem)} does not support writing '{options.Format}' format."); } @@ -95,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions MessageResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (MessageResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -111,21 +116,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(MessageResponseItem messageResponseItem) - { - if (messageResponseItem == null) - { - return null; - } - return BinaryContent.Create(messageResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator MessageResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeMessageResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/MessageResponseItem.cs b/src/Generated/Models/MessageResponseItem.cs index bfb6fbff2..e98fb0c8d 100644 --- a/src/Generated/Models/MessageResponseItem.cs +++ b/src/Generated/Models/MessageResponseItem.cs @@ -9,12 +9,16 @@ namespace OpenAI.Responses { public partial class MessageResponseItem : ResponseItem { - internal MessageResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, MessageStatus? status, InternalResponsesMessageRole internalRole) : base(@type, id, additionalBinaryDataProperties) + internal MessageResponseItem(string id, InternalResponsesMessageRole internalRole, MessageStatus? status) : base(InternalItemType.Message, id) { - Status = status; InternalRole = internalRole; + Status = status; } - public MessageStatus? Status { get; } + internal MessageResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, InternalResponsesMessageRole internalRole, MessageStatus? status) : base(kind, id, additionalBinaryDataProperties) + { + InternalRole = internalRole; + Status = status; + } } } diff --git a/src/Generated/Models/ModelDeletionResult.Serialization.cs b/src/Generated/Models/ModelDeletionResult.Serialization.cs index 64c740a58..ad1a56b6f 100644 --- a/src/Generated/Models/ModelDeletionResult.Serialization.cs +++ b/src/Generated/Models/ModelDeletionResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,8 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ModelDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ModelDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,7 +91,7 @@ internal static ModelDeletionResult DeserializeModelDeletionResult(JsonElement e } bool deleted = default; string modelId = default; - InternalDeleteModelResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -104,9 +107,10 @@ internal static ModelDeletionResult DeserializeModelDeletionResult(JsonElement e } if (prop.NameEquals("object"u8)) { - @object = new InternalDeleteModelResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ModelDeletionResult(deleted, modelId, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static ModelDeletionResult DeserializeModelDeletionResult(JsonElement e BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ModelDeletionResult)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ModelDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ModelDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual ModelDeletionResult PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ModelDeletionResult modelDeletionResult) - { - if (modelDeletionResult == null) - { - return null; - } - return BinaryContent.Create(modelDeletionResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ModelDeletionResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeModelDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ModelDeletionResult.cs b/src/Generated/Models/ModelDeletionResult.cs index 8ab658d2a..f14eebf5e 100644 --- a/src/Generated/Models/ModelDeletionResult.cs +++ b/src/Generated/Models/ModelDeletionResult.cs @@ -17,7 +17,7 @@ internal ModelDeletionResult(bool deleted, string modelId) ModelId = modelId; } - internal ModelDeletionResult(bool deleted, string modelId, InternalDeleteModelResponseObject @object, IDictionary additionalBinaryDataProperties) + internal ModelDeletionResult(bool deleted, string modelId, string @object, IDictionary additionalBinaryDataProperties) { Deleted = deleted; ModelId = modelId; diff --git a/src/Generated/Models/ModerationOptions.Serialization.cs b/src/Generated/Models/ModerationOptions.Serialization.cs index e54d35e1a..e52847192 100644 --- a/src/Generated/Models/ModerationOptions.Serialization.cs +++ b/src/Generated/Models/ModerationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,6 +45,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("model"u8); writer.WriteStringValue(Model.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -67,6 +69,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ModerationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ModerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -103,6 +106,7 @@ internal static ModerationOptions DeserializeModerationOptions(JsonElement eleme model = new InternalCreateModerationRequestModel(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ModerationOptions(input, model, additionalBinaryDataProperties); @@ -110,13 +114,14 @@ internal static ModerationOptions DeserializeModerationOptions(JsonElement eleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ModerationOptions)} does not support writing '{options.Format}' format."); } @@ -124,6 +129,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ModerationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ModerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -140,21 +146,5 @@ protected virtual ModerationOptions PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ModerationOptions moderationOptions) - { - if (moderationOptions == null) - { - return null; - } - return BinaryContent.Create(moderationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ModerationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeModerationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ModerationResult.Serialization.cs b/src/Generated/Models/ModerationResult.Serialization.cs index 8a5284264..f82e17619 100644 --- a/src/Generated/Models/ModerationResult.Serialization.cs +++ b/src/Generated/Models/ModerationResult.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,6 +12,7 @@ namespace OpenAI.Moderations { public partial class ModerationResult : IJsonModel { + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -24,6 +25,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("flagged"u8); writer.WriteBooleanValue(Flagged); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -47,6 +49,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ModerationResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ModerationResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -60,13 +63,14 @@ protected virtual ModerationResult JsonModelCreateCore(ref Utf8JsonReader reader BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ModerationResult)} does not support writing '{options.Format}' format."); } @@ -74,6 +78,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ModerationResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ModerationResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -90,21 +95,5 @@ protected virtual ModerationResult PersistableModelCreateCore(BinaryData data, M } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ModerationResult moderationResult) - { - if (moderationResult == null) - { - return null; - } - return BinaryContent.Create(moderationResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ModerationResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeModerationResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ModerationResultCollection.Serialization.cs b/src/Generated/Models/ModerationResultCollection.Serialization.cs index e2663349f..e7400eba0 100644 --- a/src/Generated/Models/ModerationResultCollection.Serialization.cs +++ b/src/Generated/Models/ModerationResultCollection.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,6 +12,7 @@ namespace OpenAI.Moderations { public partial class ModerationResultCollection : IJsonModel { + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -29,6 +30,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("model"u8); writer.WriteStringValue(Model); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -52,6 +54,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ModerationResultCollection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ModerationResultCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -65,13 +68,14 @@ protected virtual ModerationResultCollection JsonModelCreateCore(ref Utf8JsonRea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ModerationResultCollection)} does not support writing '{options.Format}' format."); } @@ -79,6 +83,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ModerationResultCollection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ModerationResultCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -95,21 +100,5 @@ protected virtual ModerationResultCollection PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ModerationResultCollection moderationResultCollection) - { - if (moderationResultCollection == null) - { - return null; - } - return BinaryContent.Create(moderationResultCollection, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ModerationResultCollection(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeModerationResultCollection(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIContext.cs b/src/Generated/Models/OpenAIContext.cs new file mode 100644 index 000000000..beacae960 --- /dev/null +++ b/src/Generated/Models/OpenAIContext.cs @@ -0,0 +1,12 @@ +// + +#nullable disable + +using System.ClientModel.Primitives; + +namespace OpenAI +{ + public partial class OpenAIContext : ModelReaderWriterContext + { + } +} diff --git a/src/Generated/Models/OpenAIEmbedding.Serialization.cs b/src/Generated/Models/OpenAIEmbedding.Serialization.cs index 10d1ebbb1..b90d2d456 100644 --- a/src/Generated/Models/OpenAIEmbedding.Serialization.cs +++ b/src/Generated/Models/OpenAIEmbedding.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,8 +52,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -76,6 +78,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIEmbedding IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIEmbedding JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -95,7 +98,7 @@ internal static OpenAIEmbedding DeserializeOpenAIEmbedding(JsonElement element, } int index = default; BinaryData embeddingProperty = default; - InternalEmbeddingObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -111,9 +114,10 @@ internal static OpenAIEmbedding DeserializeOpenAIEmbedding(JsonElement element, } if (prop.NameEquals("object"u8)) { - @object = new InternalEmbeddingObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIEmbedding(index, embeddingProperty, @object, additionalBinaryDataProperties); @@ -121,13 +125,14 @@ internal static OpenAIEmbedding DeserializeOpenAIEmbedding(JsonElement element, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIEmbedding)} does not support writing '{options.Format}' format."); } @@ -135,6 +140,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIEmbedding IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIEmbedding PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -151,21 +157,5 @@ protected virtual OpenAIEmbedding PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIEmbedding openAIEmbedding) - { - if (openAIEmbedding == null) - { - return null; - } - return BinaryContent.Create(openAIEmbedding, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIEmbedding(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIEmbedding(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIEmbeddingCollection.Serialization.cs b/src/Generated/Models/OpenAIEmbeddingCollection.Serialization.cs index 3ed48f332..5be302bef 100644 --- a/src/Generated/Models/OpenAIEmbeddingCollection.Serialization.cs +++ b/src/Generated/Models/OpenAIEmbeddingCollection.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,6 +12,7 @@ namespace OpenAI.Embeddings { public partial class OpenAIEmbeddingCollection : IJsonModel { + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,8 +33,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -57,6 +59,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIEmbeddingCollection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIEmbeddingCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -70,13 +73,14 @@ protected virtual OpenAIEmbeddingCollection JsonModelCreateCore(ref Utf8JsonRead BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIEmbeddingCollection)} does not support writing '{options.Format}' format."); } @@ -84,6 +88,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIEmbeddingCollection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIEmbeddingCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,21 +105,5 @@ protected virtual OpenAIEmbeddingCollection PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIEmbeddingCollection openAIEmbeddingCollection) - { - if (openAIEmbeddingCollection == null) - { - return null; - } - return BinaryContent.Create(openAIEmbeddingCollection, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIEmbeddingCollection(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIEmbeddingCollection(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIError.Serialization.cs b/src/Generated/Models/OpenAIError.Serialization.cs index c36c76e3d..8d5fe8a98 100644 --- a/src/Generated/Models/OpenAIError.Serialization.cs +++ b/src/Generated/Models/OpenAIError.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptio writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,8 +64,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -88,6 +90,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -108,7 +111,7 @@ internal static OpenAIError DeserializeOpenAIError(JsonElement element, ModelRea string code = default; string message = default; string @param = default; - string @type = default; + string kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -139,23 +142,25 @@ internal static OpenAIError DeserializeOpenAIError(JsonElement element, ModelRea } if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new OpenAIError(code, message, @param, @type, additionalBinaryDataProperties); + return new OpenAIError(code, message, @param, kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIError)} does not support writing '{options.Format}' format."); } @@ -163,6 +168,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -179,21 +185,5 @@ protected virtual OpenAIError PersistableModelCreateCore(BinaryData data, ModelR } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIError openAIError) - { - if (openAIError == null) - { - return null; - } - return BinaryContent.Create(openAIError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIError.cs b/src/Generated/Models/OpenAIError.cs index ac7c03ed9..f63e34a6a 100644 --- a/src/Generated/Models/OpenAIError.cs +++ b/src/Generated/Models/OpenAIError.cs @@ -11,20 +11,20 @@ internal partial class OpenAIError { private protected IDictionary _additionalBinaryDataProperties; - internal OpenAIError(string code, string message, string @param, string @type) + internal OpenAIError(string code, string message, string @param, string kind) { Code = code; Message = message; Param = @param; - Type = @type; + Kind = kind; } - internal OpenAIError(string code, string message, string @param, string @type, IDictionary additionalBinaryDataProperties) + internal OpenAIError(string code, string message, string @param, string kind, IDictionary additionalBinaryDataProperties) { Code = code; Message = message; Param = @param; - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -34,7 +34,7 @@ internal OpenAIError(string code, string message, string @param, string @type, I public string Param { get; } - public string Type { get; } + public string Kind { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/OpenAIErrorResponse.Serialization.cs b/src/Generated/Models/OpenAIErrorResponse.Serialization.cs index 0b01524fb..3f543f557 100644 --- a/src/Generated/Models/OpenAIErrorResponse.Serialization.cs +++ b/src/Generated/Models/OpenAIErrorResponse.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("error"u8); writer.WriteObjectValue(Error, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIErrorResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIErrorResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static OpenAIErrorResponse DeserializeOpenAIErrorResponse(JsonElement e error = OpenAIError.DeserializeOpenAIError(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIErrorResponse(error, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static OpenAIErrorResponse DeserializeOpenAIErrorResponse(JsonElement e BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIErrorResponse)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIErrorResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIErrorResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual OpenAIErrorResponse PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIErrorResponse openAIErrorResponse) - { - if (openAIErrorResponse == null) - { - return null; - } - return BinaryContent.Create(openAIErrorResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIErrorResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIErrorResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIErrorResponse.cs b/src/Generated/Models/OpenAIErrorResponse.cs index 46308908b..d3d8401f7 100644 --- a/src/Generated/Models/OpenAIErrorResponse.cs +++ b/src/Generated/Models/OpenAIErrorResponse.cs @@ -22,7 +22,7 @@ internal OpenAIErrorResponse(OpenAIError error, IDictionary _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public OpenAIError Error { get; } + internal OpenAIError Error { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/OpenAIFile.Serialization.cs b/src/Generated/Models/OpenAIFile.Serialization.cs index 360239452..37bbed436 100644 --- a/src/Generated/Models/OpenAIFile.Serialization.cs +++ b/src/Generated/Models/OpenAIFile.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -59,14 +60,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("bytes") != true) { - if (Optional.IsDefined(SizeInBytes)) + if (Optional.IsDefined(SizeInBytesLong)) { writer.WritePropertyName("bytes"u8); - writer.WriteNumberValue(SizeInBytes.Value); + writer.WriteNumberValue(SizeInBytesLong.Value); } else { @@ -83,6 +84,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("status_details"u8); writer.WriteStringValue(StatusDetails); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -106,6 +108,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIFile IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIFile JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -128,8 +131,8 @@ internal static OpenAIFile DeserializeOpenAIFile(JsonElement element, ModelReade DateTimeOffset? expiresAt = default; string filename = default; FilePurpose purpose = default; - InternalOpenAIFileObject @object = default; - int? sizeInBytes = default; + string @object = default; + long? sizeInBytesLong = default; FileStatus status = default; string statusDetails = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -166,17 +169,17 @@ internal static OpenAIFile DeserializeOpenAIFile(JsonElement element, ModelReade } if (prop.NameEquals("object"u8)) { - @object = new InternalOpenAIFileObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("bytes"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - sizeInBytes = null; + sizeInBytesLong = null; continue; } - sizeInBytes = prop.Value.GetInt32(); + sizeInBytesLong = prop.Value.GetInt64(); continue; } if (prop.NameEquals("status"u8)) @@ -189,6 +192,7 @@ internal static OpenAIFile DeserializeOpenAIFile(JsonElement element, ModelReade statusDetails = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIFile( @@ -198,7 +202,7 @@ internal static OpenAIFile DeserializeOpenAIFile(JsonElement element, ModelReade filename, purpose, @object, - sizeInBytes, + sizeInBytesLong, status, statusDetails, additionalBinaryDataProperties); @@ -206,13 +210,14 @@ internal static OpenAIFile DeserializeOpenAIFile(JsonElement element, ModelReade BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIFile)} does not support writing '{options.Format}' format."); } @@ -220,6 +225,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIFile IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIFile PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -236,21 +242,5 @@ protected virtual OpenAIFile PersistableModelCreateCore(BinaryData data, ModelRe } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIFile openAIFile) - { - if (openAIFile == null) - { - return null; - } - return BinaryContent.Create(openAIFile, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIFile(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIFile(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIFile.cs b/src/Generated/Models/OpenAIFile.cs index 02309d2b3..023372940 100644 --- a/src/Generated/Models/OpenAIFile.cs +++ b/src/Generated/Models/OpenAIFile.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Files { @@ -11,17 +12,17 @@ public partial class OpenAIFile { private protected IDictionary _additionalBinaryDataProperties; - internal OpenAIFile(string id, DateTimeOffset createdAt, string filename, FilePurpose purpose, int? sizeInBytes, FileStatus status) + internal OpenAIFile(string id, DateTimeOffset createdAt, string filename, FilePurpose purpose, long? sizeInBytesLong, FileStatus status) { Id = id; CreatedAt = createdAt; Filename = filename; Purpose = purpose; - SizeInBytes = sizeInBytes; + SizeInBytesLong = sizeInBytesLong; Status = status; } - internal OpenAIFile(string id, DateTimeOffset createdAt, DateTimeOffset? expiresAt, string filename, FilePurpose purpose, InternalOpenAIFileObject @object, int? sizeInBytes, FileStatus status, string statusDetails, IDictionary additionalBinaryDataProperties) + internal OpenAIFile(string id, DateTimeOffset createdAt, DateTimeOffset? expiresAt, string filename, FilePurpose purpose, string @object, long? sizeInBytesLong, FileStatus status, string statusDetails, IDictionary additionalBinaryDataProperties) { Id = id; CreatedAt = createdAt; @@ -29,7 +30,7 @@ internal OpenAIFile(string id, DateTimeOffset createdAt, DateTimeOffset? expires Filename = filename; Purpose = purpose; Object = @object; - SizeInBytes = sizeInBytes; + SizeInBytesLong = sizeInBytesLong; Status = status; StatusDetails = statusDetails; _additionalBinaryDataProperties = additionalBinaryDataProperties; @@ -39,6 +40,7 @@ internal OpenAIFile(string id, DateTimeOffset createdAt, DateTimeOffset? expires public DateTimeOffset CreatedAt { get; } + [Experimental("OPENAI001")] public DateTimeOffset? ExpiresAt { get; } public string Filename { get; } diff --git a/src/Generated/Models/OpenAIFileCollection.Serialization.cs b/src/Generated/Models/OpenAIFileCollection.Serialization.cs index 6dfd7aae1..d75a2501b 100644 --- a/src/Generated/Models/OpenAIFileCollection.Serialization.cs +++ b/src/Generated/Models/OpenAIFileCollection.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,6 +12,7 @@ namespace OpenAI.Files { public partial class OpenAIFileCollection : IJsonModel { + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -22,7 +23,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("first_id") != true) { @@ -39,6 +40,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("has_more"u8); writer.WriteBooleanValue(HasMore); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -62,6 +64,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIFileCollection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIFileCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -75,13 +78,14 @@ protected virtual OpenAIFileCollection JsonModelCreateCore(ref Utf8JsonReader re BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIFileCollection)} does not support writing '{options.Format}' format."); } @@ -89,6 +93,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIFileCollection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIFileCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -105,21 +110,5 @@ protected virtual OpenAIFileCollection PersistableModelCreateCore(BinaryData dat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIFileCollection openAIFileCollection) - { - if (openAIFileCollection == null) - { - return null; - } - return BinaryContent.Create(openAIFileCollection, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIFileCollection(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIFileCollection(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIModel.Serialization.cs b/src/Generated/Models/OpenAIModel.Serialization.cs index d2bba1ffe..4a9f61fa2 100644 --- a/src/Generated/Models/OpenAIModel.Serialization.cs +++ b/src/Generated/Models/OpenAIModel.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptio writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,13 +45,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("created") != true) { writer.WritePropertyName("created"u8); writer.WriteNumberValue(CreatedAt, "U"); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIModel IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIModel JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -93,7 +96,7 @@ internal static OpenAIModel DeserializeOpenAIModel(JsonElement element, ModelRea } string id = default; string ownedBy = default; - InternalModelObject @object = default; + string @object = default; DateTimeOffset createdAt = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -110,7 +113,7 @@ internal static OpenAIModel DeserializeOpenAIModel(JsonElement element, ModelRea } if (prop.NameEquals("object"u8)) { - @object = new InternalModelObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("created"u8)) @@ -118,6 +121,7 @@ internal static OpenAIModel DeserializeOpenAIModel(JsonElement element, ModelRea createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIModel(id, ownedBy, @object, createdAt, additionalBinaryDataProperties); @@ -125,13 +129,14 @@ internal static OpenAIModel DeserializeOpenAIModel(JsonElement element, ModelRea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIModel)} does not support writing '{options.Format}' format."); } @@ -139,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIModel IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIModel PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +161,5 @@ protected virtual OpenAIModel PersistableModelCreateCore(BinaryData data, ModelR } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIModel openAIModel) - { - if (openAIModel == null) - { - return null; - } - return BinaryContent.Create(openAIModel, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIModel(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIModel(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIModel.cs b/src/Generated/Models/OpenAIModel.cs index fbebf3360..7ac5b80c5 100644 --- a/src/Generated/Models/OpenAIModel.cs +++ b/src/Generated/Models/OpenAIModel.cs @@ -18,7 +18,7 @@ internal OpenAIModel(string id, string ownedBy, DateTimeOffset createdAt) CreatedAt = createdAt; } - internal OpenAIModel(string id, string ownedBy, InternalModelObject @object, DateTimeOffset createdAt, IDictionary additionalBinaryDataProperties) + internal OpenAIModel(string id, string ownedBy, string @object, DateTimeOffset createdAt, IDictionary additionalBinaryDataProperties) { Id = id; OwnedBy = ownedBy; diff --git a/src/Generated/Models/OpenAIModelCollection.Serialization.cs b/src/Generated/Models/OpenAIModelCollection.Serialization.cs index 87df2c7c5..effac08b8 100644 --- a/src/Generated/Models/OpenAIModelCollection.Serialization.cs +++ b/src/Generated/Models/OpenAIModelCollection.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,6 +12,7 @@ namespace OpenAI.Models { public partial class OpenAIModelCollection : IJsonModel { + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -22,8 +23,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -47,6 +49,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIModelCollection IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIModelCollection JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -60,13 +63,14 @@ protected virtual OpenAIModelCollection JsonModelCreateCore(ref Utf8JsonReader r BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIModelCollection)} does not support writing '{options.Format}' format."); } @@ -74,6 +78,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIModelCollection IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIModelCollection PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -90,21 +95,5 @@ protected virtual OpenAIModelCollection PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIModelCollection openAIModelCollection) - { - if (openAIModelCollection == null) - { - return null; - } - return BinaryContent.Create(openAIModelCollection, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIModelCollection(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIModelCollection(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIResponse.Serialization.cs b/src/Generated/Models/OpenAIResponse.Serialization.cs index 4104cf5cd..aa88c27d1 100644 --- a/src/Generated/Models/OpenAIResponse.Serialization.cs +++ b/src/Generated/Models/OpenAIResponse.Serialization.cs @@ -3,17 +3,18 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; +using OpenAI.Internal; namespace OpenAI.Responses { public partial class OpenAIResponse : IJsonModel { - internal OpenAIResponse() + internal OpenAIResponse() : this(null, default, default, default, null, default, null, null, null, default, default, null, null, null, null, default, null, default, null, null, default, null, null, null, null) { } @@ -24,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -31,68 +33,74 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(OpenAIResponse)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("id") != true) - { - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - } - if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) - { - writer.WritePropertyName("created_at"u8); - writer.WriteNumberValue(CreatedAt, "U"); - } - if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) - { - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.Value.ToSerialString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("error") != true) + if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (Optional.IsDefined(Error)) + if (Optional.IsCollectionDefined(Metadata)) { - writer.WritePropertyName("error"u8); - writer.WriteObjectValue(Error, options); + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) + { + writer.WritePropertyName(item.Key); + if (item.Value == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item.Value); + } + writer.WriteEndObject(); } else { - writer.WriteNull("error"u8); + writer.WriteNull("metadata"u8); } } - if (_additionalBinaryDataProperties?.ContainsKey("instructions") != true) + if (_additionalBinaryDataProperties?.ContainsKey("temperature") != true) { - if (Optional.IsDefined(Instructions)) + if (Optional.IsDefined(Temperature)) { - writer.WritePropertyName("instructions"u8); - writer.WriteStringValue(Instructions); + writer.WritePropertyName("temperature"u8); + writer.WriteNumberValue(Temperature.Value); } else { - writer.WriteNull("instructions"u8); + writer.WriteNull("temperature"u8); } } - if (_additionalBinaryDataProperties?.ContainsKey("model") != true) - { - writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model); - } - if (_additionalBinaryDataProperties?.ContainsKey("previous_response_id") != true) + if (_additionalBinaryDataProperties?.ContainsKey("top_p") != true) { - if (Optional.IsDefined(PreviousResponseId)) + if (Optional.IsDefined(TopP)) { - writer.WritePropertyName("previous_response_id"u8); - writer.WriteStringValue(PreviousResponseId); + writer.WritePropertyName("top_p"u8); + writer.WriteNumberValue(TopP.Value); } else { - writer.WriteNull("previous_response_id"u8); + writer.WriteNull("top_p"u8); } } - if (_additionalBinaryDataProperties?.ContainsKey("temperature") != true) + if (Optional.IsDefined(ServiceTier) && _additionalBinaryDataProperties?.ContainsKey("service_tier") != true) + { + writer.WritePropertyName("service_tier"u8); + writer.WriteStringValue(ServiceTier.Value.ToString()); + } + if (Optional.IsDefined(PreviousResponseId) && _additionalBinaryDataProperties?.ContainsKey("previous_response_id") != true) + { + writer.WritePropertyName("previous_response_id"u8); + writer.WriteStringValue(PreviousResponseId); + } + if (Optional.IsDefined(Background) && _additionalBinaryDataProperties?.ContainsKey("background") != true) + { + writer.WritePropertyName("background"u8); + writer.WriteBooleanValue(Background.Value); + } + if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) { - writer.WritePropertyName("temperature"u8); - writer.WriteNumberValue(Temperature); + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); } - if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) + if (Optional.IsCollectionDefined(Tools) && _additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); writer.WriteStartArray(); @@ -102,48 +110,49 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } - if (_additionalBinaryDataProperties?.ContainsKey("top_p") != true) + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) { - writer.WritePropertyName("top_p"u8); - writer.WriteNumberValue(TopP); + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); } - if (Optional.IsDefined(Usage) && _additionalBinaryDataProperties?.ContainsKey("usage") != true) + if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) { - writer.WritePropertyName("usage"u8); - writer.WriteObjectValue(Usage, options); + writer.WritePropertyName("status"u8); + writer.WriteStringValue(Status.Value.ToSerialString()); } - if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) + if (_additionalBinaryDataProperties?.ContainsKey("created_at") != true) { - if (Optional.IsCollectionDefined(Metadata)) + writer.WritePropertyName("created_at"u8); + writer.WriteNumberValue(CreatedAt, "U"); + } + if (_additionalBinaryDataProperties?.ContainsKey("error") != true) + { + if (Optional.IsDefined(Error)) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) - { - writer.WritePropertyName(item.Key); - if (item.Value == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item.Value); - } - writer.WriteEndObject(); + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(Error, options); } else { - writer.WriteNull("metadata"u8); + writer.WriteNull("error"u8); } } - if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + if (Optional.IsDefined(Usage) && _additionalBinaryDataProperties?.ContainsKey("usage") != true) { - writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WritePropertyName("usage"u8); + writer.WriteObjectValue(Usage, options); } - if (Optional.IsDefined(EndUserId) && _additionalBinaryDataProperties?.ContainsKey("user") != true) + if (_additionalBinaryDataProperties?.ContainsKey("user") != true) { - writer.WritePropertyName("user"u8); - writer.WriteStringValue(EndUserId); + if (Optional.IsDefined(EndUserId)) + { + writer.WritePropertyName("user"u8); + writer.WriteStringValue(EndUserId); + } + else + { + writer.WriteNull("user"u8); + } } if (Optional.IsDefined(ReasoningOptions) && _additionalBinaryDataProperties?.ContainsKey("reasoning") != true) { @@ -192,11 +201,22 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("parallel_tool_calls"u8); writer.WriteBooleanValue(ParallelToolCallsEnabled); } - if (_additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) + if (Optional.IsDefined(ToolChoice) && _additionalBinaryDataProperties?.ContainsKey("tool_choice") != true) { writer.WritePropertyName("tool_choice"u8); writer.WriteObjectValue(ToolChoice, options); } + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) + { + writer.WritePropertyName("model"u8); + writer.WriteStringValue(Model); + } + if (_additionalBinaryDataProperties?.ContainsKey("object") != true) + { + writer.WritePropertyName("object"u8); + writer.WriteStringValue(Object); + } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -220,6 +240,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit OpenAIResponse IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual OpenAIResponse JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -237,19 +258,19 @@ internal static OpenAIResponse DeserializeOpenAIResponse(JsonElement element, Mo { return null; } + IDictionary metadata = default; + float? temperature = default; + float? topP = default; + InternalServiceTier? serviceTier = default; + string previousResponseId = default; + bool? background = default; + string instructions = default; + IList tools = default; string id = default; - DateTimeOffset createdAt = default; ResponseStatus? status = default; + DateTimeOffset createdAt = default; ResponseError error = default; - string instructions = default; - string model = default; - string previousResponseId = default; - float temperature = default; - IList tools = default; - float topP = default; ResponseTokenUsage usage = default; - IDictionary metadata = default; - InternalCreateResponsesResponseObject @object = default; string endUserId = default; ResponseReasoningOptions reasoningOptions = default; int? maxOutputTokenCount = default; @@ -259,51 +280,60 @@ internal static OpenAIResponse DeserializeOpenAIResponse(JsonElement element, Mo IList outputItems = default; bool parallelToolCallsEnabled = default; ResponseToolChoice toolChoice = default; + string model = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("id"u8)) - { - id = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("created_at"u8)) - { - createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); - continue; - } - if (prop.NameEquals("status"u8)) + if (prop.NameEquals("metadata"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { + metadata = new ChangeTrackingDictionary(); continue; } - status = prop.Value.GetString().ToResponseStatus(); + Dictionary dictionary = new Dictionary(); + foreach (var prop0 in prop.Value.EnumerateObject()) + { + if (prop0.Value.ValueKind == JsonValueKind.Null) + { + dictionary.Add(prop0.Name, null); + } + else + { + dictionary.Add(prop0.Name, prop0.Value.GetString()); + } + } + metadata = dictionary; continue; } - if (prop.NameEquals("error"u8)) + if (prop.NameEquals("temperature"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - error = null; + temperature = null; continue; } - error = ResponseError.DeserializeResponseError(prop.Value, options); + temperature = prop.Value.GetSingle(); continue; } - if (prop.NameEquals("instructions"u8)) + if (prop.NameEquals("top_p"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - instructions = null; + topP = null; continue; } - instructions = prop.Value.GetString(); + topP = prop.Value.GetSingle(); continue; } - if (prop.NameEquals("model"u8)) + if (prop.NameEquals("service_tier"u8)) { - model = prop.Value.GetString(); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + serviceTier = new InternalServiceTier(prop.Value.GetString()); continue; } if (prop.NameEquals("previous_response_id"u8)) @@ -316,13 +346,32 @@ internal static OpenAIResponse DeserializeOpenAIResponse(JsonElement element, Mo previousResponseId = prop.Value.GetString(); continue; } - if (prop.NameEquals("temperature"u8)) + if (prop.NameEquals("background"u8)) { - temperature = prop.Value.GetSingle(); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + background = null; + continue; + } + background = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("instructions"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + instructions = null; + continue; + } + instructions = prop.Value.GetString(); continue; } if (prop.NameEquals("tools"u8)) { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { @@ -331,49 +380,51 @@ internal static OpenAIResponse DeserializeOpenAIResponse(JsonElement element, Mo tools = array; continue; } - if (prop.NameEquals("top_p"u8)) + if (prop.NameEquals("id"u8)) { - topP = prop.Value.GetSingle(); + id = prop.Value.GetString(); continue; } - if (prop.NameEquals("usage"u8)) + if (prop.NameEquals("status"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { continue; } - usage = ResponseTokenUsage.DeserializeResponseTokenUsage(prop.Value, options); + status = prop.Value.GetString().ToResponseStatus(); continue; } - if (prop.NameEquals("metadata"u8)) + if (prop.NameEquals("created_at"u8)) + { + createdAt = DateTimeOffset.FromUnixTimeSeconds(prop.Value.GetInt64()); + continue; + } + if (prop.NameEquals("error"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { - metadata = new ChangeTrackingDictionary(); + error = null; continue; } - Dictionary dictionary = new Dictionary(); - foreach (var prop0 in prop.Value.EnumerateObject()) - { - if (prop0.Value.ValueKind == JsonValueKind.Null) - { - dictionary.Add(prop0.Name, null); - } - else - { - dictionary.Add(prop0.Name, prop0.Value.GetString()); - } - } - metadata = dictionary; + error = ResponseError.DeserializeResponseError(prop.Value, options); continue; } - if (prop.NameEquals("object"u8)) + if (prop.NameEquals("usage"u8)) { - @object = new InternalCreateResponsesResponseObject(prop.Value.GetString()); + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + usage = ResponseTokenUsage.DeserializeResponseTokenUsage(prop.Value, options); continue; } if (prop.NameEquals("user"u8)) { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + endUserId = null; + continue; + } endUserId = prop.Value.GetString(); continue; } @@ -443,25 +494,40 @@ internal static OpenAIResponse DeserializeOpenAIResponse(JsonElement element, Mo } if (prop.NameEquals("tool_choice"u8)) { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } toolChoice = ResponseToolChoice.DeserializeResponseToolChoice(prop.Value, options); continue; } + if (prop.NameEquals("model"u8)) + { + model = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("object"u8)) + { + @object = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new OpenAIResponse( + metadata, + temperature, + topP, + serviceTier, + previousResponseId, + background, + instructions, + tools ?? new ChangeTrackingList(), id, - createdAt, status, + createdAt, error, - instructions, - model, - previousResponseId, - temperature, - tools, - topP, usage, - metadata, - @object, endUserId, reasoningOptions, maxOutputTokenCount, @@ -471,18 +537,21 @@ internal static OpenAIResponse DeserializeOpenAIResponse(JsonElement element, Mo outputItems, parallelToolCallsEnabled, toolChoice, + model, + @object, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(OpenAIResponse)} does not support writing '{options.Format}' format."); } @@ -490,6 +559,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions OpenAIResponse IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual OpenAIResponse PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -506,21 +576,5 @@ protected virtual OpenAIResponse PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(OpenAIResponse openAIResponse) - { - if (openAIResponse == null) - { - return null; - } - return BinaryContent.Create(openAIResponse, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator OpenAIResponse(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeOpenAIResponse(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/OpenAIResponse.cs b/src/Generated/Models/OpenAIResponse.cs index 4b819b70b..708d1f0ae 100644 --- a/src/Generated/Models/OpenAIResponse.cs +++ b/src/Generated/Models/OpenAIResponse.cs @@ -5,6 +5,8 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; +using OpenAI.Internal; namespace OpenAI.Responses { @@ -12,75 +14,78 @@ public partial class OpenAIResponse { private protected IDictionary _additionalBinaryDataProperties; - internal OpenAIResponse(string id, DateTimeOffset createdAt, ResponseError error, string instructions, string model, string previousResponseId, float temperature, IEnumerable tools, float topP, IDictionary metadata, ResponseIncompleteStatusDetails incompleteStatusDetails, IEnumerable outputItems, bool parallelToolCallsEnabled, ResponseToolChoice toolChoice) + internal OpenAIResponse(IDictionary metadata, float? temperature, float? topP, string id, DateTimeOffset createdAt, ResponseError error, string endUserId, ResponseIncompleteStatusDetails incompleteStatusDetails, IEnumerable outputItems, bool parallelToolCallsEnabled) { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Temperature = temperature; + TopP = topP; + Tools = new ChangeTrackingList(); Id = id; CreatedAt = createdAt; Error = error; - Instructions = instructions; - Model = model; - PreviousResponseId = previousResponseId; - Temperature = temperature; - Tools = tools.ToList(); - TopP = topP; - Metadata = metadata; + EndUserId = endUserId; IncompleteStatusDetails = incompleteStatusDetails; OutputItems = outputItems.ToList(); ParallelToolCallsEnabled = parallelToolCallsEnabled; - ToolChoice = toolChoice; } - internal OpenAIResponse(string id, DateTimeOffset createdAt, ResponseStatus? status, ResponseError error, string instructions, string model, string previousResponseId, float temperature, IList tools, float topP, ResponseTokenUsage usage, IDictionary metadata, InternalCreateResponsesResponseObject @object, string endUserId, ResponseReasoningOptions reasoningOptions, int? maxOutputTokenCount, ResponseTextOptions textOptions, ResponseTruncationMode? truncationMode, ResponseIncompleteStatusDetails incompleteStatusDetails, IList outputItems, bool parallelToolCallsEnabled, ResponseToolChoice toolChoice, IDictionary additionalBinaryDataProperties) + internal OpenAIResponse(IDictionary metadata, float? temperature, float? topP, InternalServiceTier? serviceTier, string previousResponseId, bool? background, string instructions, IList tools, string id, ResponseStatus? status, DateTimeOffset createdAt, ResponseError error, ResponseTokenUsage usage, string endUserId, ResponseReasoningOptions reasoningOptions, int? maxOutputTokenCount, ResponseTextOptions textOptions, ResponseTruncationMode? truncationMode, ResponseIncompleteStatusDetails incompleteStatusDetails, IList outputItems, bool parallelToolCallsEnabled, ResponseToolChoice toolChoice, string model, string @object, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); + Temperature = temperature; + TopP = topP; + ServiceTier = serviceTier; + PreviousResponseId = previousResponseId; + Background = background; + Instructions = instructions; + Tools = tools ?? new ChangeTrackingList(); Id = id; - CreatedAt = createdAt; Status = status; + CreatedAt = createdAt; Error = error; - Instructions = instructions; - Model = model; - PreviousResponseId = previousResponseId; - Temperature = temperature; - Tools = tools; - TopP = topP; Usage = usage; - Metadata = metadata; - Object = @object; EndUserId = endUserId; ReasoningOptions = reasoningOptions; MaxOutputTokenCount = maxOutputTokenCount; TextOptions = textOptions; TruncationMode = truncationMode; IncompleteStatusDetails = incompleteStatusDetails; - OutputItems = outputItems; + OutputItems = outputItems ?? new ChangeTrackingList(); ParallelToolCallsEnabled = parallelToolCallsEnabled; ToolChoice = toolChoice; + Model = model; + Object = @object; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public string Id { get; } + public IDictionary Metadata { get; } - public DateTimeOffset CreatedAt { get; } + public float? Temperature { get; } - public ResponseStatus? Status { get; } + public float? TopP { get; } - public ResponseError Error { get; } + internal InternalServiceTier? ServiceTier { get; } + + public string PreviousResponseId { get; } + + public bool? Background { get; } public string Instructions { get; } - public string Model { get; } + public IList Tools { get; } - public string PreviousResponseId { get; } + public string Id { get; } - public float Temperature { get; } + public ResponseStatus? Status { get; } - public IList Tools { get; } + public DateTimeOffset CreatedAt { get; } - public float TopP { get; } + public ResponseError Error { get; } public ResponseTokenUsage Usage { get; } - public IDictionary Metadata { get; } - internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/OutputAudioFinishedUpdate.Serialization.cs b/src/Generated/Models/OutputAudioFinishedUpdate.Serialization.cs new file mode 100644 index 000000000..56b2dcd66 --- /dev/null +++ b/src/Generated/Models/OutputAudioFinishedUpdate.Serialization.cs @@ -0,0 +1,165 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class OutputAudioFinishedUpdate : IJsonModel + { + internal OutputAudioFinishedUpdate() : this(RealtimeUpdateKind.ItemStreamingPartAudioFinished, null, null, null, null, default, default) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputAudioFinishedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) + { + writer.WritePropertyName("response_id"u8); + writer.WriteStringValue(ResponseId); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex); + } + } + + OutputAudioFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (OutputAudioFinishedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputAudioFinishedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeOutputAudioFinishedUpdate(document.RootElement, options); + } + + internal static OutputAudioFinishedUpdate DeserializeOutputAudioFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string responseId = default; + string itemId = default; + int outputIndex = default; + int contentIndex = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response_id"u8)) + { + responseId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + contentIndex = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new OutputAudioFinishedUpdate( + kind, + eventId, + additionalBinaryDataProperties, + responseId, + itemId, + outputIndex, + contentIndex); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(OutputAudioFinishedUpdate)} does not support writing '{options.Format}' format."); + } + } + + OutputAudioFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (OutputAudioFinishedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeOutputAudioFinishedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(OutputAudioFinishedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/OutputAudioFinishedUpdate.cs b/src/Generated/Models/OutputAudioFinishedUpdate.cs new file mode 100644 index 000000000..d40f311d9 --- /dev/null +++ b/src/Generated/Models/OutputAudioFinishedUpdate.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class OutputAudioFinishedUpdate : RealtimeUpdate + { + internal OutputAudioFinishedUpdate(string responseId, string itemId, int outputIndex, int contentIndex) : base(RealtimeUpdateKind.ItemStreamingPartAudioFinished) + { + ResponseId = responseId; + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + } + + internal OutputAudioFinishedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex) : base(kind, eventId, additionalBinaryDataProperties) + { + ResponseId = responseId; + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + } + + public string ResponseId { get; } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + } +} diff --git a/src/Generated/Models/OutputAudioTranscriptionFinishedUpdate.Serialization.cs b/src/Generated/Models/OutputAudioTranscriptionFinishedUpdate.Serialization.cs new file mode 100644 index 000000000..ea2a00982 --- /dev/null +++ b/src/Generated/Models/OutputAudioTranscriptionFinishedUpdate.Serialization.cs @@ -0,0 +1,177 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class OutputAudioTranscriptionFinishedUpdate : IJsonModel + { + internal OutputAudioTranscriptionFinishedUpdate() : this(RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionFinished, null, null, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputAudioTranscriptionFinishedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) + { + writer.WritePropertyName("response_id"u8); + writer.WriteStringValue(ResponseId); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("transcript") != true) + { + writer.WritePropertyName("transcript"u8); + writer.WriteStringValue(Transcript); + } + } + + OutputAudioTranscriptionFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (OutputAudioTranscriptionFinishedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputAudioTranscriptionFinishedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeOutputAudioTranscriptionFinishedUpdate(document.RootElement, options); + } + + internal static OutputAudioTranscriptionFinishedUpdate DeserializeOutputAudioTranscriptionFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string responseId = default; + string itemId = default; + int outputIndex = default; + int contentIndex = default; + string transcript = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response_id"u8)) + { + responseId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + contentIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("transcript"u8)) + { + transcript = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new OutputAudioTranscriptionFinishedUpdate( + kind, + eventId, + additionalBinaryDataProperties, + responseId, + itemId, + outputIndex, + contentIndex, + transcript); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(OutputAudioTranscriptionFinishedUpdate)} does not support writing '{options.Format}' format."); + } + } + + OutputAudioTranscriptionFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (OutputAudioTranscriptionFinishedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeOutputAudioTranscriptionFinishedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(OutputAudioTranscriptionFinishedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/OutputAudioTranscriptionFinishedUpdate.cs b/src/Generated/Models/OutputAudioTranscriptionFinishedUpdate.cs new file mode 100644 index 000000000..5ac0c0d36 --- /dev/null +++ b/src/Generated/Models/OutputAudioTranscriptionFinishedUpdate.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class OutputAudioTranscriptionFinishedUpdate : RealtimeUpdate + { + internal OutputAudioTranscriptionFinishedUpdate(string responseId, string itemId, int outputIndex, int contentIndex, string transcript) : base(RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionFinished) + { + ResponseId = responseId; + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Transcript = transcript; + } + + internal OutputAudioTranscriptionFinishedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string transcript) : base(kind, eventId, additionalBinaryDataProperties) + { + ResponseId = responseId; + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Transcript = transcript; + } + + public string ResponseId { get; } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + + public string Transcript { get; } + } +} diff --git a/src/Generated/Models/OutputStreamingFinishedUpdate.Serialization.cs b/src/Generated/Models/OutputStreamingFinishedUpdate.Serialization.cs new file mode 100644 index 000000000..4f9fbd751 --- /dev/null +++ b/src/Generated/Models/OutputStreamingFinishedUpdate.Serialization.cs @@ -0,0 +1,153 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class OutputStreamingFinishedUpdate : IJsonModel + { + internal OutputStreamingFinishedUpdate() : this(RealtimeUpdateKind.ItemStreamingFinished, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputStreamingFinishedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) + { + writer.WritePropertyName("response_id"u8); + writer.WriteStringValue(ResponseId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item") != true) + { + writer.WritePropertyName("item"u8); + writer.WriteObjectValue(_internalItem, options); + } + } + + OutputStreamingFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (OutputStreamingFinishedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputStreamingFinishedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeOutputStreamingFinishedUpdate(document.RootElement, options); + } + + internal static OutputStreamingFinishedUpdate DeserializeOutputStreamingFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string responseId = default; + int outputIndex = default; + InternalRealtimeResponseItem internalItem = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response_id"u8)) + { + responseId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item"u8)) + { + internalItem = InternalRealtimeResponseItem.DeserializeInternalRealtimeResponseItem(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new OutputStreamingFinishedUpdate( + kind, + eventId, + additionalBinaryDataProperties, + responseId, + outputIndex, + internalItem); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(OutputStreamingFinishedUpdate)} does not support writing '{options.Format}' format."); + } + } + + OutputStreamingFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (OutputStreamingFinishedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeOutputStreamingFinishedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(OutputStreamingFinishedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/OutputStreamingFinishedUpdate.cs b/src/Generated/Models/OutputStreamingFinishedUpdate.cs new file mode 100644 index 000000000..936996eb5 --- /dev/null +++ b/src/Generated/Models/OutputStreamingFinishedUpdate.cs @@ -0,0 +1,30 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class OutputStreamingFinishedUpdate : RealtimeUpdate + { + internal OutputStreamingFinishedUpdate(string responseId, int outputIndex, InternalRealtimeResponseItem internalItem) : base(RealtimeUpdateKind.ItemStreamingFinished) + { + ResponseId = responseId; + OutputIndex = outputIndex; + _internalItem = internalItem; + } + + internal OutputStreamingFinishedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, int outputIndex, InternalRealtimeResponseItem internalItem) : base(kind, eventId, additionalBinaryDataProperties) + { + ResponseId = responseId; + OutputIndex = outputIndex; + _internalItem = internalItem; + } + + public string ResponseId { get; } + + public int OutputIndex { get; } + } +} diff --git a/src/Generated/Models/OutputStreamingStartedUpdate.Serialization.cs b/src/Generated/Models/OutputStreamingStartedUpdate.Serialization.cs new file mode 100644 index 000000000..8cf62a9c9 --- /dev/null +++ b/src/Generated/Models/OutputStreamingStartedUpdate.Serialization.cs @@ -0,0 +1,153 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class OutputStreamingStartedUpdate : IJsonModel + { + internal OutputStreamingStartedUpdate() : this(RealtimeUpdateKind.ItemStreamingStarted, null, null, null, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputStreamingStartedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) + { + writer.WritePropertyName("response_id"u8); + writer.WriteStringValue(ResponseId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(ItemIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("item") != true) + { + writer.WritePropertyName("item"u8); + writer.WriteObjectValue(_internalItem, options); + } + } + + OutputStreamingStartedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (OutputStreamingStartedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputStreamingStartedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeOutputStreamingStartedUpdate(document.RootElement, options); + } + + internal static OutputStreamingStartedUpdate DeserializeOutputStreamingStartedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string responseId = default; + int itemIndex = default; + InternalRealtimeResponseItem internalItem = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response_id"u8)) + { + responseId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + itemIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("item"u8)) + { + internalItem = InternalRealtimeResponseItem.DeserializeInternalRealtimeResponseItem(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new OutputStreamingStartedUpdate( + kind, + eventId, + additionalBinaryDataProperties, + responseId, + itemIndex, + internalItem); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(OutputStreamingStartedUpdate)} does not support writing '{options.Format}' format."); + } + } + + OutputStreamingStartedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (OutputStreamingStartedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeOutputStreamingStartedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(OutputStreamingStartedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/OutputStreamingStartedUpdate.cs b/src/Generated/Models/OutputStreamingStartedUpdate.cs new file mode 100644 index 000000000..5982986b8 --- /dev/null +++ b/src/Generated/Models/OutputStreamingStartedUpdate.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class OutputStreamingStartedUpdate : RealtimeUpdate + { + internal OutputStreamingStartedUpdate(string responseId, int itemIndex, InternalRealtimeResponseItem internalItem) : base(RealtimeUpdateKind.ItemStreamingStarted) + { + ResponseId = responseId; + ItemIndex = itemIndex; + _internalItem = internalItem; + } + + internal OutputStreamingStartedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, int itemIndex, InternalRealtimeResponseItem internalItem) : base(kind, eventId, additionalBinaryDataProperties) + { + ResponseId = responseId; + ItemIndex = itemIndex; + _internalItem = internalItem; + } + + public string ResponseId { get; } + } +} diff --git a/src/Generated/Models/OutputTextFinishedUpdate.Serialization.cs b/src/Generated/Models/OutputTextFinishedUpdate.Serialization.cs new file mode 100644 index 000000000..0748f2c00 --- /dev/null +++ b/src/Generated/Models/OutputTextFinishedUpdate.Serialization.cs @@ -0,0 +1,177 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class OutputTextFinishedUpdate : IJsonModel + { + internal OutputTextFinishedUpdate() : this(RealtimeUpdateKind.ItemStreamingPartTextFinished, null, null, null, null, default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputTextFinishedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response_id") != true) + { + writer.WritePropertyName("response_id"u8); + writer.WriteStringValue(ResponseId); + } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } + if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) + { + writer.WritePropertyName("output_index"u8); + writer.WriteNumberValue(OutputIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) + { + writer.WritePropertyName("content_index"u8); + writer.WriteNumberValue(ContentIndex); + } + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + } + + OutputTextFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (OutputTextFinishedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(OutputTextFinishedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeOutputTextFinishedUpdate(document.RootElement, options); + } + + internal static OutputTextFinishedUpdate DeserializeOutputTextFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string responseId = default; + string itemId = default; + int outputIndex = default; + int contentIndex = default; + string text = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response_id"u8)) + { + responseId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("output_index"u8)) + { + outputIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("content_index"u8)) + { + contentIndex = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new OutputTextFinishedUpdate( + kind, + eventId, + additionalBinaryDataProperties, + responseId, + itemId, + outputIndex, + contentIndex, + text); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(OutputTextFinishedUpdate)} does not support writing '{options.Format}' format."); + } + } + + OutputTextFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (OutputTextFinishedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeOutputTextFinishedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(OutputTextFinishedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/OutputTextFinishedUpdate.cs b/src/Generated/Models/OutputTextFinishedUpdate.cs new file mode 100644 index 000000000..d430675ba --- /dev/null +++ b/src/Generated/Models/OutputTextFinishedUpdate.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class OutputTextFinishedUpdate : RealtimeUpdate + { + internal OutputTextFinishedUpdate(string responseId, string itemId, int outputIndex, int contentIndex, string text) : base(RealtimeUpdateKind.ItemStreamingPartTextFinished) + { + ResponseId = responseId; + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Text = text; + } + + internal OutputTextFinishedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, string responseId, string itemId, int outputIndex, int contentIndex, string text) : base(kind, eventId, additionalBinaryDataProperties) + { + ResponseId = responseId; + ItemId = itemId; + OutputIndex = outputIndex; + ContentIndex = contentIndex; + Text = text; + } + + public string ResponseId { get; } + + public string ItemId { get; } + + public int OutputIndex { get; } + + public int ContentIndex { get; } + + public string Text { get; } + } +} diff --git a/src/Generated/Models/RateLimitsUpdate.Serialization.cs b/src/Generated/Models/RateLimitsUpdate.Serialization.cs new file mode 100644 index 000000000..ca1d3fb76 --- /dev/null +++ b/src/Generated/Models/RateLimitsUpdate.Serialization.cs @@ -0,0 +1,135 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class RateLimitsUpdate : IJsonModel + { + internal RateLimitsUpdate() : this(RealtimeUpdateKind.RateLimitsUpdated, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(RateLimitsUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("rate_limits") != true) + { + writer.WritePropertyName("rate_limits"u8); + writer.WriteStartArray(); + foreach (ConversationRateLimitDetailsItem item in AllDetails) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + RateLimitsUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (RateLimitsUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(RateLimitsUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeRateLimitsUpdate(document.RootElement, options); + } + + internal static RateLimitsUpdate DeserializeRateLimitsUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + IReadOnlyList allDetails = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("rate_limits"u8)) + { + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(ConversationRateLimitDetailsItem.DeserializeConversationRateLimitDetailsItem(item, options)); + } + allDetails = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new RateLimitsUpdate(kind, eventId, additionalBinaryDataProperties, allDetails); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(RateLimitsUpdate)} does not support writing '{options.Format}' format."); + } + } + + RateLimitsUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (RateLimitsUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeRateLimitsUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(RateLimitsUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/RateLimitsUpdate.cs b/src/Generated/Models/RateLimitsUpdate.cs new file mode 100644 index 000000000..71f8039be --- /dev/null +++ b/src/Generated/Models/RateLimitsUpdate.cs @@ -0,0 +1,25 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class RateLimitsUpdate : RealtimeUpdate + { + internal RateLimitsUpdate(IEnumerable allDetails) : base(RealtimeUpdateKind.RateLimitsUpdated) + { + AllDetails = allDetails.ToList(); + } + + internal RateLimitsUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, IReadOnlyList allDetails) : base(kind, eventId, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + AllDetails = allDetails ?? new ChangeTrackingList(); + } + } +} diff --git a/src/Generated/Models/RealtimeAudioFormat.cs b/src/Generated/Models/RealtimeAudioFormat.cs new file mode 100644 index 000000000..d9bdbe867 --- /dev/null +++ b/src/Generated/Models/RealtimeAudioFormat.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Realtime +{ + public readonly partial struct RealtimeAudioFormat : IEquatable + { + private readonly string _value; + private const string Pcm16Value = "pcm16"; + private const string G711UlawValue = "g711_ulaw"; + private const string G711AlawValue = "g711_alaw"; + + public RealtimeAudioFormat(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static RealtimeAudioFormat Pcm16 { get; } = new RealtimeAudioFormat(Pcm16Value); + + public static RealtimeAudioFormat G711Ulaw { get; } = new RealtimeAudioFormat(G711UlawValue); + + public static RealtimeAudioFormat G711Alaw { get; } = new RealtimeAudioFormat(G711AlawValue); + + public static bool operator ==(RealtimeAudioFormat left, RealtimeAudioFormat right) => left.Equals(right); + + public static bool operator !=(RealtimeAudioFormat left, RealtimeAudioFormat right) => !left.Equals(right); + + public static implicit operator RealtimeAudioFormat(string value) => new RealtimeAudioFormat(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is RealtimeAudioFormat other && Equals(other); + + public bool Equals(RealtimeAudioFormat 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/RealtimeErrorUpdate.Serialization.cs b/src/Generated/Models/RealtimeErrorUpdate.Serialization.cs new file mode 100644 index 000000000..7b84c74e9 --- /dev/null +++ b/src/Generated/Models/RealtimeErrorUpdate.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class RealtimeErrorUpdate : IJsonModel + { + internal RealtimeErrorUpdate() : this(RealtimeUpdateKind.Error, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(RealtimeErrorUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("error") != true) + { + writer.WritePropertyName("error"u8); + writer.WriteObjectValue(_error, options); + } + } + + RealtimeErrorUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (RealtimeErrorUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(RealtimeErrorUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeRealtimeErrorUpdate(document.RootElement, options); + } + + internal static RealtimeErrorUpdate DeserializeRealtimeErrorUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalRealtimeServerEventErrorError error = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("error"u8)) + { + error = InternalRealtimeServerEventErrorError.DeserializeInternalRealtimeServerEventErrorError(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new RealtimeErrorUpdate(kind, eventId, additionalBinaryDataProperties, error); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(RealtimeErrorUpdate)} does not support writing '{options.Format}' format."); + } + } + + RealtimeErrorUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (RealtimeErrorUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeRealtimeErrorUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(RealtimeErrorUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/RealtimeErrorUpdate.cs b/src/Generated/Models/RealtimeErrorUpdate.cs new file mode 100644 index 000000000..f7b760480 --- /dev/null +++ b/src/Generated/Models/RealtimeErrorUpdate.cs @@ -0,0 +1,22 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class RealtimeErrorUpdate : RealtimeUpdate + { + internal RealtimeErrorUpdate(InternalRealtimeServerEventErrorError error) : base(RealtimeUpdateKind.Error) + { + _error = error; + } + + internal RealtimeErrorUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, InternalRealtimeServerEventErrorError error) : base(kind, eventId, additionalBinaryDataProperties) + { + _error = error; + } + } +} diff --git a/src/Generated/Models/RealtimeItem.Serialization.cs b/src/Generated/Models/RealtimeItem.Serialization.cs new file mode 100644 index 000000000..ad43cd388 --- /dev/null +++ b/src/Generated/Models/RealtimeItem.Serialization.cs @@ -0,0 +1,137 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + [PersistableModelProxy(typeof(UnknownRealtimeRequestItem))] + public partial class RealtimeItem : IJsonModel + { + internal RealtimeItem() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(RealtimeItem)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + if (Optional.IsDefined(Id) && _additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + RealtimeItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(RealtimeItem)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeRealtimeItem(document.RootElement, options); + } + + internal static RealtimeItem DeserializeRealtimeItem(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "message": + return InternalRealtimeRequestMessageItem.DeserializeInternalRealtimeRequestMessageItem(element, options); + case "function_call": + return InternalRealtimeRequestFunctionCallItem.DeserializeInternalRealtimeRequestFunctionCallItem(element, options); + case "function_call_output": + return InternalRealtimeRequestFunctionCallOutputItem.DeserializeInternalRealtimeRequestFunctionCallOutputItem(element, options); + } + } + return UnknownRealtimeRequestItem.DeserializeUnknownRealtimeRequestItem(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(RealtimeItem)} does not support writing '{options.Format}' format."); + } + } + + RealtimeItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeRealtimeItem(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(RealtimeItem)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/RealtimeItem.cs b/src/Generated/Models/RealtimeItem.cs new file mode 100644 index 000000000..490669ae9 --- /dev/null +++ b/src/Generated/Models/RealtimeItem.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class RealtimeItem + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected RealtimeItem(InternalRealtimeItemType kind) + { + Kind = kind; + } + + internal RealtimeItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + Id = id; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeItemType Kind { get; set; } + + public string Id { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/RealtimeUpdate.Serialization.cs b/src/Generated/Models/RealtimeUpdate.Serialization.cs new file mode 100644 index 000000000..7934c8efc --- /dev/null +++ b/src/Generated/Models/RealtimeUpdate.Serialization.cs @@ -0,0 +1,116 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + [PersistableModelProxy(typeof(UnknownRealtimeServerEvent))] + public partial class RealtimeUpdate : IJsonModel + { + internal RealtimeUpdate() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(RealtimeUpdate)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToSerialString()); + } + if (Optional.IsDefined(EventId) && _additionalBinaryDataProperties?.ContainsKey("event_id") != true) + { + writer.WritePropertyName("event_id"u8); + writer.WriteStringValue(EventId); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + RealtimeUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(RealtimeUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeRealtimeUpdate(document.RootElement, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(RealtimeUpdate)} does not support writing '{options.Format}' format."); + } + } + + RealtimeUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeRealtimeUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(RealtimeUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/RealtimeUpdate.cs b/src/Generated/Models/RealtimeUpdate.cs new file mode 100644 index 000000000..9b54d9254 --- /dev/null +++ b/src/Generated/Models/RealtimeUpdate.cs @@ -0,0 +1,36 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class RealtimeUpdate + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected RealtimeUpdate(RealtimeUpdateKind kind) + { + Kind = kind; + } + + internal RealtimeUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + EventId = eventId; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public RealtimeUpdateKind Kind { get; } + + public string EventId { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/RealtimeUpdateKind.Serialization.cs b/src/Generated/Models/RealtimeUpdateKind.Serialization.cs new file mode 100644 index 000000000..506739273 --- /dev/null +++ b/src/Generated/Models/RealtimeUpdateKind.Serialization.cs @@ -0,0 +1,10 @@ +// + +#nullable disable + +namespace OpenAI.Realtime +{ + internal static partial class RealtimeUpdateKindExtensions + { + } +} diff --git a/src/Generated/Models/ReasoningResponseItem.Serialization.cs b/src/Generated/Models/ReasoningResponseItem.Serialization.cs index 972d29fd2..b7ccd3696 100644 --- a/src/Generated/Models/ReasoningResponseItem.Serialization.cs +++ b/src/Generated/Models/ReasoningResponseItem.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class ReasoningResponseItem : IJsonModel { - internal ReasoningResponseItem() + internal ReasoningResponseItem() : this(InternalItemType.Reasoning, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,16 +33,16 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(ReasoningResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) + if (Optional.IsDefined(EncryptedContent) && _additionalBinaryDataProperties?.ContainsKey("encrypted_content") != true) { - writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.Value.ToSerialString()); + writer.WritePropertyName("encrypted_content"u8); + writer.WriteStringValue(EncryptedContent); } if (_additionalBinaryDataProperties?.ContainsKey("summary") != true) { writer.WritePropertyName("summary"u8); writer.WriteStartArray(); - foreach (InternalResponsesReasoningItemSummaryElement item in Summary) + foreach (ReasoningSummaryPart item in SummaryParts) { writer.WriteObjectValue(item, options); } @@ -51,6 +52,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ReasoningResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ReasoningResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,16 +70,16 @@ internal static ReasoningResponseItem DeserializeReasoningResponseItem(JsonEleme { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - ReasoningStatus? status = default; - IList summary = default; + string encryptedContent = default; + IReadOnlyList summaryParts = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -85,39 +87,42 @@ internal static ReasoningResponseItem DeserializeReasoningResponseItem(JsonEleme id = prop.Value.GetString(); continue; } - if (prop.NameEquals("status"u8)) + if (prop.NameEquals("encrypted_content"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { + encryptedContent = null; continue; } - status = prop.Value.GetString().ToReasoningStatus(); + encryptedContent = prop.Value.GetString(); continue; } if (prop.NameEquals("summary"u8)) { - List array = new List(); + List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { - array.Add(InternalResponsesReasoningItemSummaryElement.DeserializeInternalResponsesReasoningItemSummaryElement(item, options)); + array.Add(ReasoningSummaryPart.DeserializeReasoningSummaryPart(item, options)); } - summary = array; + summaryParts = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new ReasoningResponseItem(@type, id, additionalBinaryDataProperties, status, summary); + return new ReasoningResponseItem(kind, id, additionalBinaryDataProperties, encryptedContent, summaryParts); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ReasoningResponseItem)} does not support writing '{options.Format}' format."); } @@ -125,6 +130,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ReasoningResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ReasoningResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -141,21 +147,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ReasoningResponseItem reasoningResponseItem) - { - if (reasoningResponseItem == null) - { - return null; - } - return BinaryContent.Create(reasoningResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ReasoningResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeReasoningResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ReasoningResponseItem.cs b/src/Generated/Models/ReasoningResponseItem.cs index 0c40e712d..431c29825 100644 --- a/src/Generated/Models/ReasoningResponseItem.cs +++ b/src/Generated/Models/ReasoningResponseItem.cs @@ -4,17 +4,25 @@ using System; using System.Collections.Generic; +using System.Linq; +using OpenAI; namespace OpenAI.Responses { public partial class ReasoningResponseItem : ResponseItem { - internal ReasoningResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, ReasoningStatus? status, IList summary) : base(@type, id, additionalBinaryDataProperties) + internal ReasoningResponseItem(string id, IEnumerable summaryParts) : base(InternalItemType.Reasoning, id) { - Status = status; - Summary = summary; + SummaryParts = summaryParts.ToList(); } - public ReasoningStatus? Status { get; } + internal ReasoningResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, string encryptedContent, IReadOnlyList summaryParts) : base(kind, id, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + EncryptedContent = encryptedContent; + SummaryParts = summaryParts ?? new ChangeTrackingList(); + } + + public string EncryptedContent { get; } } } diff --git a/src/Generated/Models/ReasoningStatus.Serialization.cs b/src/Generated/Models/ReasoningStatus.Serialization.cs deleted file mode 100644 index 199f186f9..000000000 --- a/src/Generated/Models/ReasoningStatus.Serialization.cs +++ /dev/null @@ -1,36 +0,0 @@ -// - -#nullable disable - -using System; - -namespace OpenAI.Responses -{ - internal static partial class ReasoningStatusExtensions - { - public static string ToSerialString(this ReasoningStatus value) => value switch - { - ReasoningStatus.InProgress => "in_progress", - ReasoningStatus.Completed => "completed", - ReasoningStatus.Incomplete => "incomplete", - _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ReasoningStatus value.") - }; - - public static ReasoningStatus ToReasoningStatus(this string value) - { - if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) - { - return ReasoningStatus.InProgress; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "completed")) - { - return ReasoningStatus.Completed; - } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) - { - return ReasoningStatus.Incomplete; - } - throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ReasoningStatus value."); - } - } -} diff --git a/src/Generated/Models/ReasoningSummaryPart.Serialization.cs b/src/Generated/Models/ReasoningSummaryPart.Serialization.cs new file mode 100644 index 000000000..40b25a13e --- /dev/null +++ b/src/Generated/Models/ReasoningSummaryPart.Serialization.cs @@ -0,0 +1,128 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + [PersistableModelProxy(typeof(InternalUnknownReasoningItemSummaryPart))] + public partial class ReasoningSummaryPart : IJsonModel + { + internal ReasoningSummaryPart() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ReasoningSummaryPart)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + ReasoningSummaryPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual ReasoningSummaryPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ReasoningSummaryPart)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeReasoningSummaryPart(document.RootElement, options); + } + + internal static ReasoningSummaryPart DeserializeReasoningSummaryPart(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "summary_text": + return ReasoningSummaryTextPart.DeserializeReasoningSummaryTextPart(element, options); + } + } + return InternalUnknownReasoningItemSummaryPart.DeserializeInternalUnknownReasoningItemSummaryPart(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ReasoningSummaryPart)} does not support writing '{options.Format}' format."); + } + } + + ReasoningSummaryPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual ReasoningSummaryPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeReasoningSummaryPart(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ReasoningSummaryPart)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ReasoningSummaryPart.cs b/src/Generated/Models/ReasoningSummaryPart.cs new file mode 100644 index 000000000..20bb608cf --- /dev/null +++ b/src/Generated/Models/ReasoningSummaryPart.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ReasoningSummaryPart + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected ReasoningSummaryPart(InternalReasoningItemSummaryPartType kind) + { + Kind = kind; + } + + internal ReasoningSummaryPart(InternalReasoningItemSummaryPartType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalReasoningItemSummaryPartType Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ReasoningSummaryTextPart.Serialization.cs b/src/Generated/Models/ReasoningSummaryTextPart.Serialization.cs new file mode 100644 index 000000000..ade3f829f --- /dev/null +++ b/src/Generated/Models/ReasoningSummaryTextPart.Serialization.cs @@ -0,0 +1,119 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ReasoningSummaryTextPart : IJsonModel + { + internal ReasoningSummaryTextPart() : this(InternalReasoningItemSummaryPartType.SummaryText, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ReasoningSummaryTextPart)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + } + + ReasoningSummaryTextPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ReasoningSummaryTextPart)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override ReasoningSummaryPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ReasoningSummaryTextPart)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeReasoningSummaryTextPart(document.RootElement, options); + } + + internal static ReasoningSummaryTextPart DeserializeReasoningSummaryTextPart(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalReasoningItemSummaryPartType kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string text = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalReasoningItemSummaryPartType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ReasoningSummaryTextPart(kind, additionalBinaryDataProperties, text); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ReasoningSummaryTextPart)} does not support writing '{options.Format}' format."); + } + } + + ReasoningSummaryTextPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ReasoningSummaryTextPart)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override ReasoningSummaryPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeReasoningSummaryTextPart(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ReasoningSummaryTextPart)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ReasoningSummaryTextPart.cs b/src/Generated/Models/ReasoningSummaryTextPart.cs new file mode 100644 index 000000000..84a0dc0c6 --- /dev/null +++ b/src/Generated/Models/ReasoningSummaryTextPart.cs @@ -0,0 +1,27 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ReasoningSummaryTextPart : ReasoningSummaryPart + { + public ReasoningSummaryTextPart(string text) : base(InternalReasoningItemSummaryPartType.SummaryText) + { + Argument.AssertNotNull(text, nameof(text)); + + Text = text; + } + + internal ReasoningSummaryTextPart(InternalReasoningItemSummaryPartType kind, IDictionary additionalBinaryDataProperties, string text) : base(kind, additionalBinaryDataProperties) + { + Text = text; + } + + public string Text { get; set; } + } +} diff --git a/src/Generated/Models/ReferenceResponseItem.Serialization.cs b/src/Generated/Models/ReferenceResponseItem.Serialization.cs index 86b71d788..19a01ca60 100644 --- a/src/Generated/Models/ReferenceResponseItem.Serialization.cs +++ b/src/Generated/Models/ReferenceResponseItem.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Responses { public partial class ReferenceResponseItem : IJsonModel { + internal ReferenceResponseItem() : this(InternalItemType.ItemReference, null, null) + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ReferenceResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ReferenceResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -49,14 +55,14 @@ internal static ReferenceResponseItem DeserializeReferenceResponseItem(JsonEleme { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -64,20 +70,22 @@ internal static ReferenceResponseItem DeserializeReferenceResponseItem(JsonEleme id = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new ReferenceResponseItem(@type, id, additionalBinaryDataProperties); + return new ReferenceResponseItem(kind, id, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ReferenceResponseItem)} does not support writing '{options.Format}' format."); } @@ -85,6 +93,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ReferenceResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ReferenceResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -101,21 +110,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ReferenceResponseItem referenceResponseItem) - { - if (referenceResponseItem == null) - { - return null; - } - return BinaryContent.Create(referenceResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ReferenceResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeReferenceResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ReferenceResponseItem.cs b/src/Generated/Models/ReferenceResponseItem.cs index 11348e698..a1bf58e67 100644 --- a/src/Generated/Models/ReferenceResponseItem.cs +++ b/src/Generated/Models/ReferenceResponseItem.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { public partial class ReferenceResponseItem : ResponseItem { - internal ReferenceResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties) : base(@type, id, additionalBinaryDataProperties) + internal ReferenceResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties) : base(kind, id, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/ResponseContentPart.Serialization.cs b/src/Generated/Models/ResponseContentPart.Serialization.cs index c07bb09ba..ffffb84a5 100644 --- a/src/Generated/Models/ResponseContentPart.Serialization.cs +++ b/src/Generated/Models/ResponseContentPart.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Responses { + [PersistableModelProxy(typeof(InternalUnknownItemContent))] public partial class ResponseContentPart : IJsonModel { internal ResponseContentPart() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(InternalType.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -79,30 +83,35 @@ internal static ResponseContentPart DeserializeResponseContentPart(JsonElement e { switch (discriminator.GetString()) { + case "input_audio": + return InternalItemContentInputAudio.DeserializeInternalItemContentInputAudio(element, options); + case "output_audio": + return InternalItemContentOutputAudio.DeserializeInternalItemContentOutputAudio(element, options); + case "refusal": + return InternalItemContentRefusal.DeserializeInternalItemContentRefusal(element, options); case "input_text": - return InternalResponsesInputTextContentPart.DeserializeInternalResponsesInputTextContentPart(element, options); + return InternalItemContentInputText.DeserializeInternalItemContentInputText(element, options); case "input_image": - return InternalResponsesInputImageContentPart.DeserializeInternalResponsesInputImageContentPart(element, options); + return InternalItemContentInputImage.DeserializeInternalItemContentInputImage(element, options); case "input_file": - return InternalResponsesInputFileContentPart.DeserializeInternalResponsesInputFileContentPart(element, options); + return InternalItemContentInputFile.DeserializeInternalItemContentInputFile(element, options); case "output_text": - return InternalResponsesOutputTextContentPart.DeserializeInternalResponsesOutputTextContentPart(element, options); - case "refusal": - return InternalResponsesOutputRefusalContentPart.DeserializeInternalResponsesOutputRefusalContentPart(element, options); + return InternalItemContentOutputText.DeserializeInternalItemContentOutputText(element, options); } } - return InternalUnknownResponsesContent.DeserializeInternalUnknownResponsesContent(element, options); + return InternalUnknownItemContent.DeserializeInternalUnknownItemContent(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseContentPart)} does not support writing '{options.Format}' format."); } @@ -110,6 +119,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -126,21 +136,5 @@ protected virtual ResponseContentPart PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseContentPart responseContentPart) - { - if (responseContentPart == null) - { - return null; - } - return BinaryContent.Create(responseContentPart, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseContentPart(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseContentPart(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseContentPart.cs b/src/Generated/Models/ResponseContentPart.cs index 3e5c2d130..0dddf68e7 100644 --- a/src/Generated/Models/ResponseContentPart.cs +++ b/src/Generated/Models/ResponseContentPart.cs @@ -11,12 +11,12 @@ public partial class ResponseContentPart { private protected IDictionary _additionalBinaryDataProperties; - private protected ResponseContentPart(InternalResponsesContentType internalType) + private protected ResponseContentPart(InternalItemContentType internalType) { InternalType = internalType; } - internal ResponseContentPart(InternalResponsesContentType internalType, IDictionary additionalBinaryDataProperties) + internal ResponseContentPart(InternalItemContentType internalType, IDictionary additionalBinaryDataProperties) { InternalType = internalType; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/ResponseConversationSelection.cs b/src/Generated/Models/ResponseConversationSelection.cs index 0fbfb42a4..cc87d77d6 100644 --- a/src/Generated/Models/ResponseConversationSelection.cs +++ b/src/Generated/Models/ResponseConversationSelection.cs @@ -6,7 +6,7 @@ using System.ComponentModel; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { public readonly partial struct ResponseConversationSelection : IEquatable { diff --git a/src/Generated/Models/ResponseCreationOptions.Serialization.cs b/src/Generated/Models/ResponseCreationOptions.Serialization.cs index 8f555d164..6a8752034 100644 --- a/src/Generated/Models/ResponseCreationOptions.Serialization.cs +++ b/src/Generated/Models/ResponseCreationOptions.Serialization.cs @@ -3,16 +3,21 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; +using OpenAI.Internal; namespace OpenAI.Responses { public partial class ResponseCreationOptions : IJsonModel { + public ResponseCreationOptions() : this(null, default, default, default, null, default, null, null, null, null, default, null, null, default, null, default, default, default, null, null, null) + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,11 +59,21 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("top_p"u8); writer.WriteNumberValue(TopP.Value); } + if (Optional.IsDefined(ServiceTier) && _additionalBinaryDataProperties?.ContainsKey("service_tier") != true) + { + writer.WritePropertyName("service_tier"u8); + writer.WriteStringValue(ServiceTier.Value.ToString()); + } if (Optional.IsDefined(PreviousResponseId) && _additionalBinaryDataProperties?.ContainsKey("previous_response_id") != true) { writer.WritePropertyName("previous_response_id"u8); writer.WriteStringValue(PreviousResponseId); } + if (Optional.IsDefined(Background) && _additionalBinaryDataProperties?.ContainsKey("background") != true) + { + writer.WritePropertyName("background"u8); + writer.WriteBooleanValue(Background.Value); + } if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) { writer.WritePropertyName("instructions"u8); @@ -67,16 +83,16 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { writer.WritePropertyName("include"u8); writer.WriteStartArray(); - foreach (InternalCreateResponsesRequestIncludable item in Include) + foreach (InternalIncludable item in Include) { writer.WriteStringValue(item.ToString()); } writer.WriteEndArray(); } - if (_additionalBinaryDataProperties?.ContainsKey("model") != true) + if (Optional.IsDefined(Model) && _additionalBinaryDataProperties?.ContainsKey("model") != true) { writer.WritePropertyName("model"u8); - writer.WriteStringValue(Model.ToString()); + writer.WriteStringValue(Model); } if (_additionalBinaryDataProperties?.ContainsKey("input") != true) { @@ -143,6 +159,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -166,6 +183,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseCreationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -186,10 +204,12 @@ internal static ResponseCreationOptions DeserializeResponseCreationOptions(JsonE IDictionary metadata = default; float? temperature = default; float? topP = default; + InternalServiceTier? serviceTier = default; string previousResponseId = default; + bool? background = default; string instructions = default; - IList include = default; - InternalCreateResponsesRequestModel model = default; + IList include = default; + string model = default; IList input = default; bool? stream = default; string endUserId = default; @@ -245,6 +265,15 @@ internal static ResponseCreationOptions DeserializeResponseCreationOptions(JsonE topP = prop.Value.GetSingle(); continue; } + if (prop.NameEquals("service_tier"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + serviceTier = new InternalServiceTier(prop.Value.GetString()); + continue; + } if (prop.NameEquals("previous_response_id"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -255,6 +284,16 @@ internal static ResponseCreationOptions DeserializeResponseCreationOptions(JsonE previousResponseId = prop.Value.GetString(); continue; } + if (prop.NameEquals("background"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + background = null; + continue; + } + background = prop.Value.GetBoolean(); + continue; + } if (prop.NameEquals("instructions"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -271,17 +310,17 @@ internal static ResponseCreationOptions DeserializeResponseCreationOptions(JsonE { continue; } - List array = new List(); + List array = new List(); foreach (var item in prop.Value.EnumerateArray()) { - array.Add(new InternalCreateResponsesRequestIncludable(item.GetString())); + array.Add(new InternalIncludable(item.GetString())); } include = array; continue; } if (prop.NameEquals("model"u8)) { - model = new InternalCreateResponsesRequestModel(prop.Value.GetString()); + model = prop.Value.GetString(); continue; } if (prop.NameEquals("input"u8)) @@ -313,6 +352,7 @@ internal static ResponseCreationOptions DeserializeResponseCreationOptions(JsonE { if (prop.Value.ValueKind == JsonValueKind.Null) { + reasoningOptions = null; continue; } reasoningOptions = ResponseReasoningOptions.DeserializeResponseReasoningOptions(prop.Value, options); @@ -390,15 +430,18 @@ internal static ResponseCreationOptions DeserializeResponseCreationOptions(JsonE tools = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ResponseCreationOptions( metadata ?? new ChangeTrackingDictionary(), temperature, topP, + serviceTier, previousResponseId, + background, instructions, - include ?? new ChangeTrackingList(), + include ?? new ChangeTrackingList(), model, input, stream, @@ -416,13 +459,14 @@ internal static ResponseCreationOptions DeserializeResponseCreationOptions(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseCreationOptions)} does not support writing '{options.Format}' format."); } @@ -430,6 +474,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseCreationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -446,21 +491,5 @@ protected virtual ResponseCreationOptions PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseCreationOptions responseCreationOptions) - { - if (responseCreationOptions == null) - { - return null; - } - return BinaryContent.Create(responseCreationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseCreationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseCreationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseCreationOptions.cs b/src/Generated/Models/ResponseCreationOptions.cs index e5d478e1e..c188213bd 100644 --- a/src/Generated/Models/ResponseCreationOptions.cs +++ b/src/Generated/Models/ResponseCreationOptions.cs @@ -4,6 +4,8 @@ using System; using System.Collections.Generic; +using OpenAI; +using OpenAI.Internal; namespace OpenAI.Responses { @@ -11,16 +13,19 @@ public partial class ResponseCreationOptions { private protected IDictionary _additionalBinaryDataProperties; - internal ResponseCreationOptions(IDictionary metadata, float? temperature, float? topP, string previousResponseId, string instructions, IList include, InternalCreateResponsesRequestModel model, IList input, bool? stream, string endUserId, ResponseReasoningOptions reasoningOptions, int? maxOutputTokenCount, ResponseTextOptions textOptions, ResponseTruncationMode? truncationMode, bool? parallelToolCallsEnabled, bool? storedOutputEnabled, ResponseToolChoice toolChoice, IList tools, IDictionary additionalBinaryDataProperties) + internal ResponseCreationOptions(IDictionary metadata, float? temperature, float? topP, InternalServiceTier? serviceTier, string previousResponseId, bool? background, string instructions, IList include, string model, IList input, bool? stream, string endUserId, ResponseReasoningOptions reasoningOptions, int? maxOutputTokenCount, ResponseTextOptions textOptions, ResponseTruncationMode? truncationMode, bool? parallelToolCallsEnabled, bool? storedOutputEnabled, ResponseToolChoice toolChoice, IList tools, IDictionary additionalBinaryDataProperties) { - Metadata = metadata; + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); Temperature = temperature; TopP = topP; + ServiceTier = serviceTier; PreviousResponseId = previousResponseId; + Background = background; Instructions = instructions; - Include = include; + Include = include ?? new ChangeTrackingList(); Model = model; - Input = input; + Input = input ?? new ChangeTrackingList(); Stream = stream; EndUserId = endUserId; ReasoningOptions = reasoningOptions; @@ -30,7 +35,7 @@ internal ResponseCreationOptions(IDictionary metadata, float? te ParallelToolCallsEnabled = parallelToolCallsEnabled; StoredOutputEnabled = storedOutputEnabled; ToolChoice = toolChoice; - Tools = tools; + Tools = tools ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -40,8 +45,12 @@ internal ResponseCreationOptions(IDictionary metadata, float? te public float? TopP { get; set; } + internal InternalServiceTier? ServiceTier { get; set; } + public string PreviousResponseId { get; set; } + public bool? Background { get; set; } + public string Instructions { get; set; } internal IDictionary SerializedAdditionalRawData diff --git a/src/Generated/Models/ResponseDeletionResult.Serialization.cs b/src/Generated/Models/ResponseDeletionResult.Serialization.cs index 9c242dcab..4a77d9493 100644 --- a/src/Generated/Models/ResponseDeletionResult.Serialization.cs +++ b/src/Generated/Models/ResponseDeletionResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,8 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,7 +91,7 @@ internal static ResponseDeletionResult DeserializeResponseDeletionResult(JsonEle } string id = default; bool deleted = default; - InternalDeleteResponseResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -104,9 +107,10 @@ internal static ResponseDeletionResult DeserializeResponseDeletionResult(JsonEle } if (prop.NameEquals("object"u8)) { - @object = new InternalDeleteResponseResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ResponseDeletionResult(id, deleted, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static ResponseDeletionResult DeserializeResponseDeletionResult(JsonEle BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseDeletionResult)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual ResponseDeletionResult PersistableModelCreateCore(BinaryData d } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseDeletionResult responseDeletionResult) - { - if (responseDeletionResult == null) - { - return null; - } - return BinaryContent.Create(responseDeletionResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseDeletionResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseDeletionResult.cs b/src/Generated/Models/ResponseDeletionResult.cs index f598f9d29..7f4d36f8b 100644 --- a/src/Generated/Models/ResponseDeletionResult.cs +++ b/src/Generated/Models/ResponseDeletionResult.cs @@ -16,7 +16,7 @@ internal ResponseDeletionResult(string id) Id = id; } - internal ResponseDeletionResult(string id, bool deleted, InternalDeleteResponseResponseObject @object, IDictionary additionalBinaryDataProperties) + internal ResponseDeletionResult(string id, bool deleted, string @object, IDictionary additionalBinaryDataProperties) { Id = id; Deleted = deleted; diff --git a/src/Generated/Models/ResponseError.Serialization.cs b/src/Generated/Models/ResponseError.Serialization.cs index 4d2ea6944..abf96b33a 100644 --- a/src/Generated/Models/ResponseError.Serialization.cs +++ b/src/Generated/Models/ResponseError.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpt writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,13 +35,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("code") != true) { writer.WritePropertyName("code"u8); - writer.WriteStringValue(Code); + writer.WriteStringValue(Code.ToString()); } if (_additionalBinaryDataProperties?.ContainsKey("message") != true) { writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,14 +84,14 @@ internal static ResponseError DeserializeResponseError(JsonElement element, Mode { return null; } - string code = default; + ResponseErrorCode code = default; string message = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("code"u8)) { - code = prop.Value.GetString(); + code = new ResponseErrorCode(prop.Value.GetString()); continue; } if (prop.NameEquals("message"u8)) @@ -96,6 +99,7 @@ internal static ResponseError DeserializeResponseError(JsonElement element, Mode message = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ResponseError(code, message, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static ResponseError DeserializeResponseError(JsonElement element, Mode BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseError)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual ResponseError PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseError responseError) - { - if (responseError == null) - { - return null; - } - return BinaryContent.Create(responseError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseError.cs b/src/Generated/Models/ResponseError.cs index 02c73a4b3..1fdc49777 100644 --- a/src/Generated/Models/ResponseError.cs +++ b/src/Generated/Models/ResponseError.cs @@ -11,20 +11,20 @@ public partial class ResponseError { private protected IDictionary _additionalBinaryDataProperties; - internal ResponseError(string code, string message) + internal ResponseError(ResponseErrorCode code, string message) { Code = code; Message = message; } - internal ResponseError(string code, string message, IDictionary additionalBinaryDataProperties) + internal ResponseError(ResponseErrorCode code, string message, IDictionary additionalBinaryDataProperties) { Code = code; Message = message; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - public string Code { get; } + public ResponseErrorCode Code { get; } public string Message { get; } diff --git a/src/Generated/Models/ResponseErrorCode.cs b/src/Generated/Models/ResponseErrorCode.cs new file mode 100644 index 000000000..e41847aaa --- /dev/null +++ b/src/Generated/Models/ResponseErrorCode.cs @@ -0,0 +1,92 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct ResponseErrorCode : IEquatable + { + private readonly string _value; + private const string ServerErrorValue = "server_error"; + private const string RateLimitExceededValue = "rate_limit_exceeded"; + private const string InvalidPromptValue = "invalid_prompt"; + private const string VectorStoreTimeoutValue = "vector_store_timeout"; + private const string InvalidImageValue = "invalid_image"; + private const string InvalidImageFormatValue = "invalid_image_format"; + private const string InvalidBase64ImageValue = "invalid_base64_image"; + private const string InvalidImageUrlValue = "invalid_image_url"; + private const string ImageTooLargeValue = "image_too_large"; + private const string ImageTooSmallValue = "image_too_small"; + private const string ImageParseErrorValue = "image_parse_error"; + private const string ImageContentPolicyViolationValue = "image_content_policy_violation"; + private const string InvalidImageModeValue = "invalid_image_mode"; + private const string ImageFileTooLargeValue = "image_file_too_large"; + private const string UnsupportedImageMediaTypeValue = "unsupported_image_media_type"; + private const string EmptyImageFileValue = "empty_image_file"; + private const string FailedToDownloadImageValue = "failed_to_download_image"; + private const string ImageFileNotFoundValue = "image_file_not_found"; + + public ResponseErrorCode(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static ResponseErrorCode ServerError { get; } = new ResponseErrorCode(ServerErrorValue); + + public static ResponseErrorCode RateLimitExceeded { get; } = new ResponseErrorCode(RateLimitExceededValue); + + public static ResponseErrorCode InvalidPrompt { get; } = new ResponseErrorCode(InvalidPromptValue); + + public static ResponseErrorCode VectorStoreTimeout { get; } = new ResponseErrorCode(VectorStoreTimeoutValue); + + public static ResponseErrorCode InvalidImage { get; } = new ResponseErrorCode(InvalidImageValue); + + public static ResponseErrorCode InvalidImageFormat { get; } = new ResponseErrorCode(InvalidImageFormatValue); + + public static ResponseErrorCode InvalidBase64Image { get; } = new ResponseErrorCode(InvalidBase64ImageValue); + + public static ResponseErrorCode InvalidImageUrl { get; } = new ResponseErrorCode(InvalidImageUrlValue); + + public static ResponseErrorCode ImageTooLarge { get; } = new ResponseErrorCode(ImageTooLargeValue); + + public static ResponseErrorCode ImageTooSmall { get; } = new ResponseErrorCode(ImageTooSmallValue); + + public static ResponseErrorCode ImageParseError { get; } = new ResponseErrorCode(ImageParseErrorValue); + + public static ResponseErrorCode ImageContentPolicyViolation { get; } = new ResponseErrorCode(ImageContentPolicyViolationValue); + + public static ResponseErrorCode InvalidImageMode { get; } = new ResponseErrorCode(InvalidImageModeValue); + + public static ResponseErrorCode ImageFileTooLarge { get; } = new ResponseErrorCode(ImageFileTooLargeValue); + + public static ResponseErrorCode UnsupportedImageMediaType { get; } = new ResponseErrorCode(UnsupportedImageMediaTypeValue); + + public static ResponseErrorCode EmptyImageFile { get; } = new ResponseErrorCode(EmptyImageFileValue); + + public static ResponseErrorCode FailedToDownloadImage { get; } = new ResponseErrorCode(FailedToDownloadImageValue); + + public static ResponseErrorCode ImageFileNotFound { get; } = new ResponseErrorCode(ImageFileNotFoundValue); + + public static bool operator ==(ResponseErrorCode left, ResponseErrorCode right) => left.Equals(right); + + public static bool operator !=(ResponseErrorCode left, ResponseErrorCode right) => !left.Equals(right); + + public static implicit operator ResponseErrorCode(string value) => new ResponseErrorCode(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is ResponseErrorCode other && Equals(other); + + public bool Equals(ResponseErrorCode 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/ResponseFinishedUpdate.Serialization.cs b/src/Generated/Models/ResponseFinishedUpdate.Serialization.cs new file mode 100644 index 000000000..3040af8de --- /dev/null +++ b/src/Generated/Models/ResponseFinishedUpdate.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class ResponseFinishedUpdate : IJsonModel + { + internal ResponseFinishedUpdate() : this(RealtimeUpdateKind.ResponseFinished, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseFinishedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response") != true) + { + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(_internalResponse, options); + } + } + + ResponseFinishedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ResponseFinishedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseFinishedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseFinishedUpdate(document.RootElement, options); + } + + internal static ResponseFinishedUpdate DeserializeResponseFinishedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalRealtimeResponse internalResponse = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response"u8)) + { + internalResponse = InternalRealtimeResponse.DeserializeInternalRealtimeResponse(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseFinishedUpdate(kind, eventId, additionalBinaryDataProperties, internalResponse); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ResponseFinishedUpdate)} does not support writing '{options.Format}' format."); + } + } + + ResponseFinishedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ResponseFinishedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseFinishedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseFinishedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ResponseFinishedUpdate.cs b/src/Generated/Models/ResponseFinishedUpdate.cs new file mode 100644 index 000000000..7277debee --- /dev/null +++ b/src/Generated/Models/ResponseFinishedUpdate.cs @@ -0,0 +1,22 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class ResponseFinishedUpdate : RealtimeUpdate + { + internal ResponseFinishedUpdate(InternalRealtimeResponse internalResponse) : base(RealtimeUpdateKind.ResponseFinished) + { + _internalResponse = internalResponse; + } + + internal ResponseFinishedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, InternalRealtimeResponse internalResponse) : base(kind, eventId, additionalBinaryDataProperties) + { + _internalResponse = internalResponse; + } + } +} diff --git a/src/Generated/Models/ResponseIncompleteStatusDetails.Serialization.cs b/src/Generated/Models/ResponseIncompleteStatusDetails.Serialization.cs index 2da6b968c..fc9eef7a2 100644 --- a/src/Generated/Models/ResponseIncompleteStatusDetails.Serialization.cs +++ b/src/Generated/Models/ResponseIncompleteStatusDetails.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reason"u8); writer.WriteStringValue(Reason.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseIncompleteStatusDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseIncompleteStatusDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static ResponseIncompleteStatusDetails DeserializeResponseIncompleteSta reason = new ResponseIncompleteStatusReason(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ResponseIncompleteStatusDetails(reason, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static ResponseIncompleteStatusDetails DeserializeResponseIncompleteSta BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseIncompleteStatusDetails)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseIncompleteStatusDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseIncompleteStatusDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual ResponseIncompleteStatusDetails PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseIncompleteStatusDetails responseIncompleteStatusDetails) - { - if (responseIncompleteStatusDetails == null) - { - return null; - } - return BinaryContent.Create(responseIncompleteStatusDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseIncompleteStatusDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseIncompleteStatusDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseInputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ResponseInputTokenUsageDetails.Serialization.cs new file mode 100644 index 000000000..02ac1d089 --- /dev/null +++ b/src/Generated/Models/ResponseInputTokenUsageDetails.Serialization.cs @@ -0,0 +1,132 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class ResponseInputTokenUsageDetails : IJsonModel + { + internal ResponseInputTokenUsageDetails() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseInputTokenUsageDetails)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("cached_tokens") != true) + { + writer.WritePropertyName("cached_tokens"u8); + writer.WriteNumberValue(CachedTokenCount); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + ResponseInputTokenUsageDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual ResponseInputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseInputTokenUsageDetails)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseInputTokenUsageDetails(document.RootElement, options); + } + + internal static ResponseInputTokenUsageDetails DeserializeResponseInputTokenUsageDetails(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + int cachedTokenCount = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("cached_tokens"u8)) + { + cachedTokenCount = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseInputTokenUsageDetails(cachedTokenCount, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ResponseInputTokenUsageDetails)} does not support writing '{options.Format}' format."); + } + } + + ResponseInputTokenUsageDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual ResponseInputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseInputTokenUsageDetails(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseInputTokenUsageDetails)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ResponseInputTokenUsageDetails.cs b/src/Generated/Models/ResponseInputTokenUsageDetails.cs new file mode 100644 index 000000000..1c4c3a988 --- /dev/null +++ b/src/Generated/Models/ResponseInputTokenUsageDetails.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class ResponseInputTokenUsageDetails + { + private protected IDictionary _additionalBinaryDataProperties; + + internal ResponseInputTokenUsageDetails(int cachedTokenCount) + { + CachedTokenCount = cachedTokenCount; + } + + internal ResponseInputTokenUsageDetails(int cachedTokenCount, IDictionary additionalBinaryDataProperties) + { + CachedTokenCount = cachedTokenCount; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/ResponseItem.Serialization.cs b/src/Generated/Models/ResponseItem.Serialization.cs index 1be232552..8367ae63f 100644 --- a/src/Generated/Models/ResponseItem.Serialization.cs +++ b/src/Generated/Models/ResponseItem.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Responses { + [PersistableModelProxy(typeof(InternalUnknownItemResource))] public partial class ResponseItem : IJsonModel { internal ResponseItem() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -33,13 +35,15 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup if (Optional.IsDefined(Id) && _additionalBinaryDataProperties?.ContainsKey("id") != true) { writer.WritePropertyName("id"u8); writer.WriteStringValue(Id); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -63,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -84,38 +89,55 @@ internal static ResponseItem DeserializeResponseItem(JsonElement element, ModelR { switch (discriminator.GetString()) { - case "message": - return MessageResponseItem.DeserializeMessageResponseItem(element, options); - case "function_call": - return FunctionCallResponseItem.DeserializeFunctionCallResponseItem(element, options); - case "function_call_output": - return FunctionCallOutputResponseItem.DeserializeFunctionCallOutputResponseItem(element, options); + case "item_reference": + return ReferenceResponseItem.DeserializeReferenceResponseItem(element, options); + case "file_search_call": + return FileSearchCallResponseItem.DeserializeFileSearchCallResponseItem(element, options); case "computer_call": return ComputerCallResponseItem.DeserializeComputerCallResponseItem(element, options); case "computer_call_output": return ComputerCallOutputResponseItem.DeserializeComputerCallOutputResponseItem(element, options); - case "file_search_call": - return FileSearchCallResponseItem.DeserializeFileSearchCallResponseItem(element, options); - case "item_reference": - return ReferenceResponseItem.DeserializeReferenceResponseItem(element, options); case "web_search_call": return WebSearchCallResponseItem.DeserializeWebSearchCallResponseItem(element, options); + case "function_call": + return FunctionCallResponseItem.DeserializeFunctionCallResponseItem(element, options); + case "function_call_output": + return FunctionCallOutputResponseItem.DeserializeFunctionCallOutputResponseItem(element, options); case "reasoning": return ReasoningResponseItem.DeserializeReasoningResponseItem(element, options); + case "image_generation_call": + return InternalImageGenToolCallItemResource.DeserializeInternalImageGenToolCallItemResource(element, options); + case "code_interpreter_call": + return InternalCodeInterpreterToolCallItemResource.DeserializeInternalCodeInterpreterToolCallItemResource(element, options); + case "local_shell_call": + return InternalLocalShellToolCallItemResource.DeserializeInternalLocalShellToolCallItemResource(element, options); + case "local_shell_call_output": + return InternalLocalShellToolCallOutputItemResource.DeserializeInternalLocalShellToolCallOutputItemResource(element, options); + case "mcp_list_tools": + return InternalMCPListToolsItemResource.DeserializeInternalMCPListToolsItemResource(element, options); + case "mcp_approval_request": + return InternalMCPApprovalRequestItemResource.DeserializeInternalMCPApprovalRequestItemResource(element, options); + case "mcp_approval_response": + return InternalMCPApprovalResponseItemResource.DeserializeInternalMCPApprovalResponseItemResource(element, options); + case "mcp_call": + return InternalMCPCallItemResource.DeserializeInternalMCPCallItemResource(element, options); + case "message": + return MessageResponseItem.DeserializeMessageResponseItem(element, options); } } - return InternalUnknownResponsesItem.DeserializeInternalUnknownResponsesItem(element, options); + return InternalUnknownItemResource.DeserializeInternalUnknownItemResource(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseItem)} does not support writing '{options.Format}' format."); } @@ -123,6 +145,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -139,21 +162,5 @@ protected virtual ResponseItem PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseItem responseItem) - { - if (responseItem == null) - { - return null; - } - return BinaryContent.Create(responseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseItem.cs b/src/Generated/Models/ResponseItem.cs index 327ba454f..9e0fe2f83 100644 --- a/src/Generated/Models/ResponseItem.cs +++ b/src/Generated/Models/ResponseItem.cs @@ -11,21 +11,20 @@ public partial class ResponseItem { private protected IDictionary _additionalBinaryDataProperties; - private protected ResponseItem(InternalResponsesItemType @type) + private protected ResponseItem(InternalItemType kind, string id) { - Type = @type; + Kind = kind; + Id = id; } - internal ResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties) + internal ResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; Id = id; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal InternalResponsesItemType Type { get; set; } - - public string Id { get; } + internal InternalItemType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/ResponseMessageAnnotation.Serialization.cs b/src/Generated/Models/ResponseMessageAnnotation.Serialization.cs index 389756d19..f70023b74 100644 --- a/src/Generated/Models/ResponseMessageAnnotation.Serialization.cs +++ b/src/Generated/Models/ResponseMessageAnnotation.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Responses { + [PersistableModelProxy(typeof(InternalUnknownAnnotation))] public partial class ResponseMessageAnnotation : IJsonModel { internal ResponseMessageAnnotation() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseMessageAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseMessageAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -80,25 +84,26 @@ internal static ResponseMessageAnnotation DeserializeResponseMessageAnnotation(J switch (discriminator.GetString()) { case "file_citation": - return InternalResponsesMessageAnnotationFileCitation.DeserializeInternalResponsesMessageAnnotationFileCitation(element, options); + return InternalAnnotationFileCitation.DeserializeInternalAnnotationFileCitation(element, options); case "url_citation": - return InternalResponsesMessageAnnotationUrlCitation.DeserializeInternalResponsesMessageAnnotationUrlCitation(element, options); + return InternalAnnotationUrlCitation.DeserializeInternalAnnotationUrlCitation(element, options); case "file_path": - return InternalResponsesMessageAnnotationFilePath.DeserializeInternalResponsesMessageAnnotationFilePath(element, options); + return InternalAnnotationFilePath.DeserializeInternalAnnotationFilePath(element, options); } } - return InternalUnknownResponsesOutputTextAnnotation.DeserializeInternalUnknownResponsesOutputTextAnnotation(element, options); + return InternalUnknownAnnotation.DeserializeInternalUnknownAnnotation(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseMessageAnnotation)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseMessageAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseMessageAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual ResponseMessageAnnotation PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseMessageAnnotation responseMessageAnnotation) - { - if (responseMessageAnnotation == null) - { - return null; - } - return BinaryContent.Create(responseMessageAnnotation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseMessageAnnotation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseMessageAnnotation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseMessageAnnotation.cs b/src/Generated/Models/ResponseMessageAnnotation.cs index 9fd5c7f85..4e9bd566a 100644 --- a/src/Generated/Models/ResponseMessageAnnotation.cs +++ b/src/Generated/Models/ResponseMessageAnnotation.cs @@ -22,6 +22,8 @@ internal ResponseMessageAnnotation(ResponseMessageAnnotationKind kind, IDictiona _additionalBinaryDataProperties = additionalBinaryDataProperties; } + public ResponseMessageAnnotationKind Kind { get; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ResponseMessageAnnotationKind.Serialization.cs b/src/Generated/Models/ResponseMessageAnnotationKind.Serialization.cs index b7cbb0be4..1fefdbd22 100644 --- a/src/Generated/Models/ResponseMessageAnnotationKind.Serialization.cs +++ b/src/Generated/Models/ResponseMessageAnnotationKind.Serialization.cs @@ -13,6 +13,7 @@ internal static partial class ResponseMessageAnnotationKindExtensions ResponseMessageAnnotationKind.FileCitation => "file_citation", ResponseMessageAnnotationKind.UriCitation => "url_citation", ResponseMessageAnnotationKind.FilePath => "file_path", + ResponseMessageAnnotationKind.ContainerFileCitation => "container_file_citation", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseMessageAnnotationKind value.") }; @@ -30,6 +31,10 @@ public static ResponseMessageAnnotationKind ToResponseMessageAnnotationKind(this { return ResponseMessageAnnotationKind.FilePath; } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "container_file_citation")) + { + return ResponseMessageAnnotationKind.ContainerFileCitation; + } throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseMessageAnnotationKind value."); } } diff --git a/src/Generated/Models/ResponseOutputTokenUsageDetails.Serialization.cs b/src/Generated/Models/ResponseOutputTokenUsageDetails.Serialization.cs index b591f822b..f95410617 100644 --- a/src/Generated/Models/ResponseOutputTokenUsageDetails.Serialization.cs +++ b/src/Generated/Models/ResponseOutputTokenUsageDetails.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -36,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reasoning_tokens"u8); writer.WriteNumberValue(ReasoningTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseOutputTokenUsageDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseOutputTokenUsageDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static ResponseOutputTokenUsageDetails DeserializeResponseOutputTokenUs reasoningTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ResponseOutputTokenUsageDetails(reasoningTokenCount, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static ResponseOutputTokenUsageDetails DeserializeResponseOutputTokenUs BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseOutputTokenUsageDetails)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseOutputTokenUsageDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseOutputTokenUsageDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual ResponseOutputTokenUsageDetails PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseOutputTokenUsageDetails responseOutputTokenUsageDetails) - { - if (responseOutputTokenUsageDetails == null) - { - return null; - } - return BinaryContent.Create(responseOutputTokenUsageDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseOutputTokenUsageDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseOutputTokenUsageDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseReasoningOptions.Serialization.cs b/src/Generated/Models/ResponseReasoningOptions.Serialization.cs index 3993dd6ac..a11dc438f 100644 --- a/src/Generated/Models/ResponseReasoningOptions.Serialization.cs +++ b/src/Generated/Models/ResponseReasoningOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRead writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,23 +28,22 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ResponseReasoningOptions)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("effort") != true) + if (Optional.IsDefined(GenerateSummary) && _additionalBinaryDataProperties?.ContainsKey("generate_summary") != true) { - if (Optional.IsDefined(ReasoningEffortLevel)) - { - writer.WritePropertyName("effort"u8); - writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); - } - else - { - writer.WriteNull("effort"u8); - } + writer.WritePropertyName("generate_summary"u8); + writer.WriteStringValue(GenerateSummary.Value.ToString()); } - if (Optional.IsDefined(ReasoningSummaryVerbosity) && _additionalBinaryDataProperties?.ContainsKey("generate_summary") != true) + if (Optional.IsDefined(ReasoningEffortLevel) && _additionalBinaryDataProperties?.ContainsKey("effort") != true) { - writer.WritePropertyName("generate_summary"u8); + writer.WritePropertyName("effort"u8); + writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); + } + if (Optional.IsDefined(ReasoningSummaryVerbosity) && _additionalBinaryDataProperties?.ContainsKey("summary") != true) + { + writer.WritePropertyName("summary"u8); writer.WriteStringValue(ReasoningSummaryVerbosity.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -67,6 +67,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseReasoningOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseReasoningOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -84,11 +85,22 @@ internal static ResponseReasoningOptions DeserializeResponseReasoningOptions(Jso { return null; } + InternalReasoningGenerateSummary? generateSummary = default; ResponseReasoningEffortLevel? reasoningEffortLevel = default; ResponseReasoningSummaryVerbosity? reasoningSummaryVerbosity = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { + if (prop.NameEquals("generate_summary"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + generateSummary = null; + continue; + } + generateSummary = new InternalReasoningGenerateSummary(prop.Value.GetString()); + continue; + } if (prop.NameEquals("effort"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -99,7 +111,7 @@ internal static ResponseReasoningOptions DeserializeResponseReasoningOptions(Jso reasoningEffortLevel = new ResponseReasoningEffortLevel(prop.Value.GetString()); continue; } - if (prop.NameEquals("generate_summary"u8)) + if (prop.NameEquals("summary"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) { @@ -109,20 +121,22 @@ internal static ResponseReasoningOptions DeserializeResponseReasoningOptions(Jso reasoningSummaryVerbosity = new ResponseReasoningSummaryVerbosity(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new ResponseReasoningOptions(reasoningEffortLevel, reasoningSummaryVerbosity, additionalBinaryDataProperties); + return new ResponseReasoningOptions(generateSummary, reasoningEffortLevel, reasoningSummaryVerbosity, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseReasoningOptions)} does not support writing '{options.Format}' format."); } @@ -130,6 +144,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseReasoningOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseReasoningOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -146,21 +161,5 @@ protected virtual ResponseReasoningOptions PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseReasoningOptions responseReasoningOptions) - { - if (responseReasoningOptions == null) - { - return null; - } - return BinaryContent.Create(responseReasoningOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseReasoningOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseReasoningOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseReasoningOptions.cs b/src/Generated/Models/ResponseReasoningOptions.cs index b1ba483d3..959fba89e 100644 --- a/src/Generated/Models/ResponseReasoningOptions.cs +++ b/src/Generated/Models/ResponseReasoningOptions.cs @@ -11,18 +11,20 @@ public partial class ResponseReasoningOptions { private protected IDictionary _additionalBinaryDataProperties; - public ResponseReasoningOptions(ResponseReasoningEffortLevel? reasoningEffortLevel) + public ResponseReasoningOptions() { - ReasoningEffortLevel = reasoningEffortLevel; } - internal ResponseReasoningOptions(ResponseReasoningEffortLevel? reasoningEffortLevel, ResponseReasoningSummaryVerbosity? reasoningSummaryVerbosity, IDictionary additionalBinaryDataProperties) + internal ResponseReasoningOptions(InternalReasoningGenerateSummary? generateSummary, ResponseReasoningEffortLevel? reasoningEffortLevel, ResponseReasoningSummaryVerbosity? reasoningSummaryVerbosity, IDictionary additionalBinaryDataProperties) { + GenerateSummary = generateSummary; ReasoningEffortLevel = reasoningEffortLevel; ReasoningSummaryVerbosity = reasoningSummaryVerbosity; _additionalBinaryDataProperties = additionalBinaryDataProperties; } + internal InternalReasoningGenerateSummary? GenerateSummary { get; set; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/ResponseReasoningSummaryVerbosity.cs b/src/Generated/Models/ResponseReasoningSummaryVerbosity.cs index 1562b0816..57199112b 100644 --- a/src/Generated/Models/ResponseReasoningSummaryVerbosity.cs +++ b/src/Generated/Models/ResponseReasoningSummaryVerbosity.cs @@ -11,6 +11,7 @@ namespace OpenAI.Responses public readonly partial struct ResponseReasoningSummaryVerbosity : IEquatable { private readonly string _value; + private const string AutoValue = "auto"; private const string ConciseValue = "concise"; private const string DetailedValue = "detailed"; @@ -21,6 +22,8 @@ public ResponseReasoningSummaryVerbosity(string value) _value = value; } + public static ResponseReasoningSummaryVerbosity Auto { get; } = new ResponseReasoningSummaryVerbosity(AutoValue); + public static ResponseReasoningSummaryVerbosity Concise { get; } = new ResponseReasoningSummaryVerbosity(ConciseValue); public static ResponseReasoningSummaryVerbosity Detailed { get; } = new ResponseReasoningSummaryVerbosity(DetailedValue); diff --git a/src/Generated/Models/ResponseStartedUpdate.Serialization.cs b/src/Generated/Models/ResponseStartedUpdate.Serialization.cs new file mode 100644 index 000000000..e07662d19 --- /dev/null +++ b/src/Generated/Models/ResponseStartedUpdate.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class ResponseStartedUpdate : IJsonModel + { + internal ResponseStartedUpdate() : this(RealtimeUpdateKind.ResponseStarted, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseStartedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response") != true) + { + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(_internalResponse, options); + } + } + + ResponseStartedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ResponseStartedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(ResponseStartedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeResponseStartedUpdate(document.RootElement, options); + } + + internal static ResponseStartedUpdate DeserializeResponseStartedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalRealtimeResponse internalResponse = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("response"u8)) + { + internalResponse = InternalRealtimeResponse.DeserializeInternalRealtimeResponse(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new ResponseStartedUpdate(kind, eventId, additionalBinaryDataProperties, internalResponse); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(ResponseStartedUpdate)} does not support writing '{options.Format}' format."); + } + } + + ResponseStartedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ResponseStartedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeResponseStartedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(ResponseStartedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/ResponseStartedUpdate.cs b/src/Generated/Models/ResponseStartedUpdate.cs new file mode 100644 index 000000000..daa145436 --- /dev/null +++ b/src/Generated/Models/ResponseStartedUpdate.cs @@ -0,0 +1,22 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class ResponseStartedUpdate : RealtimeUpdate + { + internal ResponseStartedUpdate(InternalRealtimeResponse internalResponse) : base(RealtimeUpdateKind.ResponseStarted) + { + _internalResponse = internalResponse; + } + + internal ResponseStartedUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, InternalRealtimeResponse internalResponse) : base(kind, eventId, additionalBinaryDataProperties) + { + _internalResponse = internalResponse; + } + } +} diff --git a/src/Generated/Models/ResponseStatus.Serialization.cs b/src/Generated/Models/ResponseStatus.Serialization.cs index 4c749c4a9..199c87e1a 100644 --- a/src/Generated/Models/ResponseStatus.Serialization.cs +++ b/src/Generated/Models/ResponseStatus.Serialization.cs @@ -11,8 +11,10 @@ internal static partial class ResponseStatusExtensions public static string ToSerialString(this ResponseStatus value) => value switch { ResponseStatus.Completed => "completed", - ResponseStatus.InProgress => "in_progress", ResponseStatus.Failed => "failed", + ResponseStatus.InProgress => "in_progress", + ResponseStatus.Cancelled => "cancelled", + ResponseStatus.Queued => "queued", ResponseStatus.Incomplete => "incomplete", _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown ResponseStatus value.") }; @@ -23,13 +25,21 @@ public static ResponseStatus ToResponseStatus(this string value) { return ResponseStatus.Completed; } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "failed")) + { + return ResponseStatus.Failed; + } if (StringComparer.OrdinalIgnoreCase.Equals(value, "in_progress")) { return ResponseStatus.InProgress; } - if (StringComparer.OrdinalIgnoreCase.Equals(value, "failed")) + if (StringComparer.OrdinalIgnoreCase.Equals(value, "cancelled")) { - return ResponseStatus.Failed; + return ResponseStatus.Cancelled; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "queued")) + { + return ResponseStatus.Queued; } if (StringComparer.OrdinalIgnoreCase.Equals(value, "incomplete")) { diff --git a/src/Generated/Models/ResponseTextFormat.Serialization.cs b/src/Generated/Models/ResponseTextFormat.Serialization.cs index c1250a278..f53bf8f71 100644 --- a/src/Generated/Models/ResponseTextFormat.Serialization.cs +++ b/src/Generated/Models/ResponseTextFormat.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Responses { + [PersistableModelProxy(typeof(InternalUnknownResponseTextFormatConfiguration))] public partial class ResponseTextFormat : IJsonModel { internal ResponseTextFormat() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(InternalType.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseTextFormat IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseTextFormat JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -87,18 +91,19 @@ internal static ResponseTextFormat DeserializeResponseTextFormat(JsonElement ele return InternalResponsesTextFormatJsonSchema.DeserializeInternalResponsesTextFormatJsonSchema(element, options); } } - return InternalUnknownResponsesTextFormat.DeserializeInternalUnknownResponsesTextFormat(element, options); + return InternalUnknownResponseTextFormatConfiguration.DeserializeInternalUnknownResponseTextFormatConfiguration(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseTextFormat)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseTextFormat IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseTextFormat PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual ResponseTextFormat PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseTextFormat responseTextFormat) - { - if (responseTextFormat == null) - { - return null; - } - return BinaryContent.Create(responseTextFormat, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseTextFormat(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseTextFormat(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseTextOptions.Serialization.cs b/src/Generated/Models/ResponseTextOptions.Serialization.cs index 6c897d365..315c63ada 100644 --- a/src/Generated/Models/ResponseTextOptions.Serialization.cs +++ b/src/Generated/Models/ResponseTextOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("format"u8); writer.WriteObjectValue(TextFormat, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseTextOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseTextOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static ResponseTextOptions DeserializeResponseTextOptions(JsonElement e textFormat = ResponseTextFormat.DeserializeResponseTextFormat(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ResponseTextOptions(textFormat, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static ResponseTextOptions DeserializeResponseTextOptions(JsonElement e BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseTextOptions)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseTextOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseTextOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual ResponseTextOptions PersistableModelCreateCore(BinaryData data } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseTextOptions responseTextOptions) - { - if (responseTextOptions == null) - { - return null; - } - return BinaryContent.Create(responseTextOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseTextOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseTextOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseTokenUsage.Serialization.cs b/src/Generated/Models/ResponseTokenUsage.Serialization.cs index 677646dc7..ce66a62d9 100644 --- a/src/Generated/Models/ResponseTokenUsage.Serialization.cs +++ b/src/Generated/Models/ResponseTokenUsage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,11 +47,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } + if (_additionalBinaryDataProperties?.ContainsKey("input_tokens_details") != true) + { + writer.WritePropertyName("input_tokens_details"u8); + writer.WriteObjectValue(InputTokenDetails, options); + } if (_additionalBinaryDataProperties?.ContainsKey("output_tokens_details") != true) { writer.WritePropertyName("output_tokens_details"u8); writer.WriteObjectValue(OutputTokenDetails, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +81,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseTokenUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -94,6 +102,7 @@ internal static ResponseTokenUsage DeserializeResponseTokenUsage(JsonElement ele int inputTokenCount = default; int outputTokenCount = default; int totalTokenCount = default; + ResponseInputTokenUsageDetails inputTokenDetails = default; ResponseOutputTokenUsageDetails outputTokenDetails = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -113,25 +122,38 @@ internal static ResponseTokenUsage DeserializeResponseTokenUsage(JsonElement ele totalTokenCount = prop.Value.GetInt32(); continue; } + if (prop.NameEquals("input_tokens_details"u8)) + { + inputTokenDetails = ResponseInputTokenUsageDetails.DeserializeResponseInputTokenUsageDetails(prop.Value, options); + continue; + } if (prop.NameEquals("output_tokens_details"u8)) { outputTokenDetails = ResponseOutputTokenUsageDetails.DeserializeResponseOutputTokenUsageDetails(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new ResponseTokenUsage(inputTokenCount, outputTokenCount, totalTokenCount, outputTokenDetails, additionalBinaryDataProperties); + return new ResponseTokenUsage( + inputTokenCount, + outputTokenCount, + totalTokenCount, + inputTokenDetails, + outputTokenDetails, + additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseTokenUsage)} does not support writing '{options.Format}' format."); } @@ -139,6 +161,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseTokenUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -155,21 +178,5 @@ protected virtual ResponseTokenUsage PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseTokenUsage responseTokenUsage) - { - if (responseTokenUsage == null) - { - return null; - } - return BinaryContent.Create(responseTokenUsage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseTokenUsage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseTokenUsage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseTokenUsage.cs b/src/Generated/Models/ResponseTokenUsage.cs index 8d02b4667..b7c631cdb 100644 --- a/src/Generated/Models/ResponseTokenUsage.cs +++ b/src/Generated/Models/ResponseTokenUsage.cs @@ -11,19 +11,21 @@ public partial class ResponseTokenUsage { private protected IDictionary _additionalBinaryDataProperties; - internal ResponseTokenUsage(int inputTokenCount, int outputTokenCount, int totalTokenCount, ResponseOutputTokenUsageDetails outputTokenDetails) + internal ResponseTokenUsage(int inputTokenCount, int outputTokenCount, int totalTokenCount, ResponseInputTokenUsageDetails inputTokenDetails, ResponseOutputTokenUsageDetails outputTokenDetails) { InputTokenCount = inputTokenCount; OutputTokenCount = outputTokenCount; TotalTokenCount = totalTokenCount; + InputTokenDetails = inputTokenDetails; OutputTokenDetails = outputTokenDetails; } - internal ResponseTokenUsage(int inputTokenCount, int outputTokenCount, int totalTokenCount, ResponseOutputTokenUsageDetails outputTokenDetails, IDictionary additionalBinaryDataProperties) + internal ResponseTokenUsage(int inputTokenCount, int outputTokenCount, int totalTokenCount, ResponseInputTokenUsageDetails inputTokenDetails, ResponseOutputTokenUsageDetails outputTokenDetails, IDictionary additionalBinaryDataProperties) { InputTokenCount = inputTokenCount; OutputTokenCount = outputTokenCount; TotalTokenCount = totalTokenCount; + InputTokenDetails = inputTokenDetails; OutputTokenDetails = outputTokenDetails; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ResponseTool.Serialization.cs b/src/Generated/Models/ResponseTool.Serialization.cs index 91f4c8b72..f9a12221d 100644 --- a/src/Generated/Models/ResponseTool.Serialization.cs +++ b/src/Generated/Models/ResponseTool.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Responses { + [PersistableModelProxy(typeof(InternalUnknownTool))] public partial class ResponseTool : IJsonModel { internal ResponseTool() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -33,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ResponseTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ResponseTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -80,27 +84,36 @@ internal static ResponseTool DeserializeResponseTool(JsonElement element, ModelR switch (discriminator.GetString()) { case "function": - return InternalResponsesFunctionTool.DeserializeInternalResponsesFunctionTool(element, options); + return InternalFunctionTool.DeserializeInternalFunctionTool(element, options); case "file_search": - return InternalResponsesFileSearchTool.DeserializeInternalResponsesFileSearchTool(element, options); - case "web_search_preview": - return InternalResponsesWebSearchTool.DeserializeInternalResponsesWebSearchTool(element, options); + return InternalFileSearchTool.DeserializeInternalFileSearchTool(element, options); case "computer_use_preview": - return InternalResponsesComputerTool.DeserializeInternalResponsesComputerTool(element, options); + return InternalComputerUsePreviewTool.DeserializeInternalComputerUsePreviewTool(element, options); + case "web_search_preview": + return InternalWebSearchTool.DeserializeInternalWebSearchTool(element, options); + case "code_interpreter": + return InternalCodeInterpreterTool.DeserializeInternalCodeInterpreterTool(element, options); + case "image_generation": + return InternalImageGenTool.DeserializeInternalImageGenTool(element, options); + case "local_shell": + return InternalLocalShellTool.DeserializeInternalLocalShellTool(element, options); + case "mcp": + return InternalMCPTool.DeserializeInternalMCPTool(element, options); } } - return InternalUnknownResponsesTool.DeserializeInternalUnknownResponsesTool(element, options); + return InternalUnknownTool.DeserializeInternalUnknownTool(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ResponseTool)} does not support writing '{options.Format}' format."); } @@ -108,6 +121,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ResponseTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ResponseTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -124,21 +138,5 @@ protected virtual ResponseTool PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ResponseTool responseTool) - { - if (responseTool == null) - { - return null; - } - return BinaryContent.Create(responseTool, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ResponseTool(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeResponseTool(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ResponseTool.cs b/src/Generated/Models/ResponseTool.cs index f5cb97d31..272a65b8c 100644 --- a/src/Generated/Models/ResponseTool.cs +++ b/src/Generated/Models/ResponseTool.cs @@ -11,17 +11,19 @@ public partial class ResponseTool { private protected IDictionary _additionalBinaryDataProperties; - private protected ResponseTool(InternalResponsesToolType @type) + private protected ResponseTool(InternalToolType kind) { - Type = @type; + Kind = kind; } - internal ResponseTool(InternalResponsesToolType @type, IDictionary additionalBinaryDataProperties) + internal ResponseTool(InternalToolType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } + internal InternalToolType Kind { get; set; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/RunCreationOptions.Serialization.cs b/src/Generated/Models/RunCreationOptions.Serialization.cs index 533ec3d2a..f844f91cd 100644 --- a/src/Generated/Models/RunCreationOptions.Serialization.cs +++ b/src/Generated/Models/RunCreationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.Chat; @@ -14,6 +14,10 @@ namespace OpenAI.Assistants { public partial class RunCreationOptions : IJsonModel { + public RunCreationOptions() : this(null, default, null, null, null, null, null, default, null, null, default, default, default, default, null, null, default, null) + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -21,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -134,6 +139,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reasoning_effort"u8); writer.WriteStringValue(ReasoningEffortLevel.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -157,6 +163,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunCreationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -377,6 +384,7 @@ internal static RunCreationOptions DeserializeRunCreationOptions(JsonElement ele reasoningEffortLevel = new ChatReasoningEffortLevel(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunCreationOptions( @@ -402,13 +410,14 @@ internal static RunCreationOptions DeserializeRunCreationOptions(JsonElement ele BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunCreationOptions)} does not support writing '{options.Format}' format."); } @@ -416,6 +425,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunCreationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -432,21 +442,5 @@ protected virtual RunCreationOptions PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunCreationOptions runCreationOptions) - { - if (runCreationOptions == null) - { - return null; - } - return BinaryContent.Create(runCreationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunCreationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunCreationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunCreationOptions.cs b/src/Generated/Models/RunCreationOptions.cs index f0c3a2c53..2a1c55960 100644 --- a/src/Generated/Models/RunCreationOptions.cs +++ b/src/Generated/Models/RunCreationOptions.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using OpenAI; using OpenAI.Chat; namespace OpenAI.Assistants @@ -14,16 +15,17 @@ public partial class RunCreationOptions internal RunCreationOptions(string assistantId, bool? stream, AssistantResponseFormat responseFormat, string modelOverride, string instructionsOverride, string additionalInstructions, IList internalMessages, bool? allowParallelToolCalls, IList toolsOverride, IDictionary metadata, float? temperature, float? nucleusSamplingFactor, int? maxInputTokenCount, int? maxOutputTokenCount, RunTruncationStrategy truncationStrategy, ToolConstraint toolConstraint, ChatReasoningEffortLevel? reasoningEffortLevel, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections AssistantId = assistantId; Stream = stream; ResponseFormat = responseFormat; ModelOverride = modelOverride; InstructionsOverride = instructionsOverride; AdditionalInstructions = additionalInstructions; - InternalMessages = internalMessages; + InternalMessages = internalMessages ?? new ChangeTrackingList(); AllowParallelToolCalls = allowParallelToolCalls; - ToolsOverride = toolsOverride; - Metadata = metadata; + ToolsOverride = toolsOverride ?? new ChangeTrackingList(); + Metadata = metadata ?? new ChangeTrackingDictionary(); Temperature = temperature; NucleusSamplingFactor = nucleusSamplingFactor; MaxInputTokenCount = maxInputTokenCount; diff --git a/src/Generated/Models/RunError.Serialization.cs b/src/Generated/Models/RunError.Serialization.cs index a6acf9464..ce55e6cf5 100644 --- a/src/Generated/Models/RunError.Serialization.cs +++ b/src/Generated/Models/RunError.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static RunError DeserializeRunError(JsonElement element, ModelReaderWri message = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunError(code, message, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static RunError DeserializeRunError(JsonElement element, ModelReaderWri BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunError)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual RunError PersistableModelCreateCore(BinaryData data, ModelRead } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunError runError) - { - if (runError == null) - { - return null; - } - return BinaryContent.Create(runError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunIncompleteDetails.Serialization.cs b/src/Generated/Models/RunIncompleteDetails.Serialization.cs index a490872a8..6df08a57e 100644 --- a/src/Generated/Models/RunIncompleteDetails.Serialization.cs +++ b/src/Generated/Models/RunIncompleteDetails.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,6 +33,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("reason"u8); writer.WriteStringValue(Reason.Value.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -55,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunIncompleteDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunIncompleteDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -85,6 +88,7 @@ internal static RunIncompleteDetails DeserializeRunIncompleteDetails(JsonElement reason = new RunIncompleteReason(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunIncompleteDetails(reason, additionalBinaryDataProperties); @@ -92,13 +96,14 @@ internal static RunIncompleteDetails DeserializeRunIncompleteDetails(JsonElement BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunIncompleteDetails)} does not support writing '{options.Format}' format."); } @@ -106,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunIncompleteDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunIncompleteDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,21 +128,5 @@ protected virtual RunIncompleteDetails PersistableModelCreateCore(BinaryData dat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunIncompleteDetails runIncompleteDetails) - { - if (runIncompleteDetails == null) - { - return null; - } - return BinaryContent.Create(runIncompleteDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunIncompleteDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunIncompleteDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunModificationOptions.Serialization.cs b/src/Generated/Models/RunModificationOptions.Serialization.cs index 7386bfeb6..792bfb13c 100644 --- a/src/Generated/Models/RunModificationOptions.Serialization.cs +++ b/src/Generated/Models/RunModificationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReader writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -43,6 +44,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndObject(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -66,6 +68,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunModificationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -108,6 +111,7 @@ internal static RunModificationOptions DeserializeRunModificationOptions(JsonEle metadata = dictionary; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunModificationOptions(metadata ?? new ChangeTrackingDictionary(), additionalBinaryDataProperties); @@ -115,13 +119,14 @@ internal static RunModificationOptions DeserializeRunModificationOptions(JsonEle BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunModificationOptions)} does not support writing '{options.Format}' format."); } @@ -129,6 +134,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunModificationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -145,21 +151,5 @@ protected virtual RunModificationOptions PersistableModelCreateCore(BinaryData d } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunModificationOptions runModificationOptions) - { - if (runModificationOptions == null) - { - return null; - } - return BinaryContent.Create(runModificationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunModificationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunModificationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunModificationOptions.cs b/src/Generated/Models/RunModificationOptions.cs index 45750f93b..83104f9d5 100644 --- a/src/Generated/Models/RunModificationOptions.cs +++ b/src/Generated/Models/RunModificationOptions.cs @@ -12,14 +12,14 @@ public partial class RunModificationOptions { private protected IDictionary _additionalBinaryDataProperties; - public RunModificationOptions() + public RunModificationOptions() : this(null, null) { - Metadata = new ChangeTrackingDictionary(); } internal RunModificationOptions(IDictionary metadata, IDictionary additionalBinaryDataProperties) { - Metadata = metadata; + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/RunStep.Serialization.cs b/src/Generated/Models/RunStep.Serialization.cs index 52163d483..807684caf 100644 --- a/src/Generated/Models/RunStep.Serialization.cs +++ b/src/Generated/Models/RunStep.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { public partial class RunStep : IJsonModel { - internal RunStep() + internal RunStep() : this(null, default, null, null, null, default, default, null, default, default, default, default, null, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions o writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("run_id"u8); writer.WriteStringValue(RunId); } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToSerialString()); + } if (_additionalBinaryDataProperties?.ContainsKey("status") != true) { writer.WritePropertyName("status"u8); @@ -121,28 +127,22 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("completed_at"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + writer.WritePropertyName(item.Key); + if (item.Value == null) { - writer.WritePropertyName(item.Key); - if (item.Value == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item.Value); + writer.WriteNullValue(); + continue; } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"u8); + writer.WriteStringValue(item.Value); } + writer.WriteEndObject(); } if (_additionalBinaryDataProperties?.ContainsKey("usage") != true) { @@ -159,18 +159,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Kind.ToSerialString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("step_details") != true) { writer.WritePropertyName("step_details"u8); writer.WriteObjectValue(Details, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -194,6 +190,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStep IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStep JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -216,6 +213,7 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite string assistantId = default; string threadId = default; string runId = default; + RunStepKind kind = default; RunStepStatus status = default; RunStepError lastError = default; DateTimeOffset? expiredAt = default; @@ -224,8 +222,7 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite DateTimeOffset? completedAt = default; IReadOnlyDictionary metadata = default; RunStepTokenUsage usage = default; - InternalRunStepObjectObject @object = default; - RunStepKind kind = default; + string @object = default; RunStepDetails details = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -255,6 +252,11 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite runId = prop.Value.GetString(); continue; } + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRunStepKind(); + continue; + } if (prop.NameEquals("status"u8)) { status = new RunStepStatus(prop.Value.GetString()); @@ -344,12 +346,7 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite } if (prop.NameEquals("object"u8)) { - @object = new InternalRunStepObjectObject(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToRunStepKind(); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("step_details"u8)) @@ -357,6 +354,7 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite details = RunStepDetails.DeserializeRunStepDetails(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStep( @@ -365,6 +363,7 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite assistantId, threadId, runId, + kind, status, lastError, expiredAt, @@ -374,20 +373,20 @@ internal static RunStep DeserializeRunStep(JsonElement element, ModelReaderWrite metadata, usage, @object, - kind, details, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStep)} does not support writing '{options.Format}' format."); } @@ -395,6 +394,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStep IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStep PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -411,21 +411,5 @@ protected virtual RunStep PersistableModelCreateCore(BinaryData data, ModelReade } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStep runStep) - { - if (runStep == null) - { - return null; - } - return BinaryContent.Create(runStep, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStep(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStep(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStep.cs b/src/Generated/Models/RunStep.cs index 3f35a02b6..4772532fd 100644 --- a/src/Generated/Models/RunStep.cs +++ b/src/Generated/Models/RunStep.cs @@ -12,13 +12,14 @@ public partial class RunStep { private protected IDictionary _additionalBinaryDataProperties; - internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string threadId, string runId, RunStepStatus status, RunStepError lastError, DateTimeOffset? expiredAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, RunStepTokenUsage usage, RunStepKind kind, RunStepDetails details) + internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string threadId, string runId, RunStepKind kind, RunStepStatus status, RunStepError lastError, DateTimeOffset? expiredAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, RunStepTokenUsage usage, RunStepDetails details) { Id = id; CreatedAt = createdAt; AssistantId = assistantId; ThreadId = threadId; RunId = runId; + Kind = kind; Status = status; LastError = lastError; ExpiredAt = expiredAt; @@ -27,27 +28,27 @@ internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string CompletedAt = completedAt; Metadata = new ChangeTrackingDictionary(); Usage = usage; - Kind = kind; Details = details; } - internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string threadId, string runId, RunStepStatus status, RunStepError lastError, DateTimeOffset? expiredAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, IReadOnlyDictionary metadata, RunStepTokenUsage usage, InternalRunStepObjectObject @object, RunStepKind kind, RunStepDetails details, IDictionary additionalBinaryDataProperties) + internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string threadId, string runId, RunStepKind kind, RunStepStatus status, RunStepError lastError, DateTimeOffset? expiredAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, IReadOnlyDictionary metadata, RunStepTokenUsage usage, string @object, RunStepDetails details, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; CreatedAt = createdAt; AssistantId = assistantId; ThreadId = threadId; RunId = runId; + Kind = kind; Status = status; LastError = lastError; ExpiredAt = expiredAt; CancelledAt = cancelledAt; FailedAt = failedAt; CompletedAt = completedAt; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); Usage = usage; Object = @object; - Kind = kind; Details = details; _additionalBinaryDataProperties = additionalBinaryDataProperties; } @@ -62,6 +63,8 @@ internal RunStep(string id, DateTimeOffset createdAt, string assistantId, string public string RunId { get; } + public RunStepKind Kind { get; } + public RunStepStatus Status { get; } public RunStepError LastError { get; } diff --git a/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs b/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs index 7acd96d87..95852153d 100644 --- a/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs +++ b/src/Generated/Models/RunStepCodeInterpreterOutput.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStepCodeInterpreterOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStepCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -91,13 +94,14 @@ internal static RunStepCodeInterpreterOutput DeserializeRunStepCodeInterpreterOu BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepCodeInterpreterOutput)} does not support writing '{options.Format}' format."); } @@ -105,6 +109,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepCodeInterpreterOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStepCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +126,5 @@ protected virtual RunStepCodeInterpreterOutput PersistableModelCreateCore(Binary } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStepCodeInterpreterOutput runStepCodeInterpreterOutput) - { - if (runStepCodeInterpreterOutput == null) - { - return null; - } - return BinaryContent.Create(runStepCodeInterpreterOutput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStepCodeInterpreterOutput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStepCodeInterpreterOutput(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStepCodeInterpreterOutput.cs b/src/Generated/Models/RunStepCodeInterpreterOutput.cs index 742f4c6f3..d6fb07559 100644 --- a/src/Generated/Models/RunStepCodeInterpreterOutput.cs +++ b/src/Generated/Models/RunStepCodeInterpreterOutput.cs @@ -11,18 +11,18 @@ public abstract partial class RunStepCodeInterpreterOutput { private protected IDictionary _additionalBinaryDataProperties; - private protected RunStepCodeInterpreterOutput(string @type) + private protected RunStepCodeInterpreterOutput(InternalRunStepDetailsCodeInterpreterOutputType kind) { - Type = @type; + Kind = kind; } - internal RunStepCodeInterpreterOutput(string @type, IDictionary additionalBinaryDataProperties) + internal RunStepCodeInterpreterOutput(InternalRunStepDetailsCodeInterpreterOutputType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalRunStepDetailsCodeInterpreterOutputType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/RunStepDetails.Serialization.cs b/src/Generated/Models/RunStepDetails.Serialization.cs index 4300f8347..42bd6197b 100644 --- a/src/Generated/Models/RunStepDetails.Serialization.cs +++ b/src/Generated/Models/RunStepDetails.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStepDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -91,13 +94,14 @@ internal static RunStepDetails DeserializeRunStepDetails(JsonElement element, Mo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepDetails)} does not support writing '{options.Format}' format."); } @@ -105,6 +109,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +126,5 @@ protected virtual RunStepDetails PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStepDetails runStepDetails) - { - if (runStepDetails == null) - { - return null; - } - return BinaryContent.Create(runStepDetails, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStepDetails(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStepDetails(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStepDetails.cs b/src/Generated/Models/RunStepDetails.cs index fef8ce678..88bc6652f 100644 --- a/src/Generated/Models/RunStepDetails.cs +++ b/src/Generated/Models/RunStepDetails.cs @@ -11,18 +11,18 @@ public abstract partial class RunStepDetails { private protected IDictionary _additionalBinaryDataProperties; - private protected RunStepDetails(string @type) + private protected RunStepDetails(InternalRunStepDetailsType kind) { - Type = @type; + Kind = kind; } - internal RunStepDetails(string @type, IDictionary additionalBinaryDataProperties) + internal RunStepDetails(InternalRunStepDetailsType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalRunStepDetailsType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/RunStepError.Serialization.cs b/src/Generated/Models/RunStepError.Serialization.cs index 0502fe07a..2a510012a 100644 --- a/src/Generated/Models/RunStepError.Serialization.cs +++ b/src/Generated/Models/RunStepError.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpti writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStepError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStepError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static RunStepError DeserializeRunStepError(JsonElement element, ModelR message = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStepError(code, message, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static RunStepError DeserializeRunStepError(JsonElement element, ModelR BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepError)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStepError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual RunStepError PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStepError runStepError) - { - if (runStepError == null) - { - return null; - } - return BinaryContent.Create(runStepError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStepError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStepError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStepFileSearchResult.Serialization.cs b/src/Generated/Models/RunStepFileSearchResult.Serialization.cs index 927575474..c59b3bfca 100644 --- a/src/Generated/Models/RunStepFileSearchResult.Serialization.cs +++ b/src/Generated/Models/RunStepFileSearchResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { public partial class RunStepFileSearchResult : IJsonModel { - internal RunStepFileSearchResult() + internal RunStepFileSearchResult() : this(null, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("score"u8); writer.WriteNumberValue(Score); } + // Plugin customization: remove options.Format != "W" check if (Optional.IsCollectionDefined(Content) && _additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); @@ -56,6 +58,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -79,6 +82,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStepFileSearchResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStepFileSearchResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -132,6 +136,7 @@ internal static RunStepFileSearchResult DeserializeRunStepFileSearchResult(JsonE content = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStepFileSearchResult(fileId, fileName, score, content ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -139,13 +144,14 @@ internal static RunStepFileSearchResult DeserializeRunStepFileSearchResult(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepFileSearchResult)} does not support writing '{options.Format}' format."); } @@ -153,6 +159,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepFileSearchResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStepFileSearchResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -169,21 +176,5 @@ protected virtual RunStepFileSearchResult PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStepFileSearchResult runStepFileSearchResult) - { - if (runStepFileSearchResult == null) - { - return null; - } - return BinaryContent.Create(runStepFileSearchResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStepFileSearchResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStepFileSearchResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStepFileSearchResult.cs b/src/Generated/Models/RunStepFileSearchResult.cs index eb446f12a..e95616147 100644 --- a/src/Generated/Models/RunStepFileSearchResult.cs +++ b/src/Generated/Models/RunStepFileSearchResult.cs @@ -22,10 +22,11 @@ internal RunStepFileSearchResult(string fileId, string fileName, float score) internal RunStepFileSearchResult(string fileId, string fileName, float score, IReadOnlyList content, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections FileId = fileId; FileName = fileName; Score = score; - Content = content; + Content = content ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/RunStepFileSearchResultContent.Serialization.cs b/src/Generated/Models/RunStepFileSearchResultContent.Serialization.cs index cd2cc296d..24b06d782 100644 --- a/src/Generated/Models/RunStepFileSearchResultContent.Serialization.cs +++ b/src/Generated/Models/RunStepFileSearchResultContent.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStepFileSearchResultContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStepFileSearchResultContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static RunStepFileSearchResultContent DeserializeRunStepFileSearchResul kind = prop.Value.GetString().ToRunStepFileSearchResultContentKind(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStepFileSearchResultContent(text, kind, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static RunStepFileSearchResultContent DeserializeRunStepFileSearchResul BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepFileSearchResultContent)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepFileSearchResultContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStepFileSearchResultContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual RunStepFileSearchResultContent PersistableModelCreateCore(Bina } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStepFileSearchResultContent runStepFileSearchResultContent) - { - if (runStepFileSearchResultContent == null) - { - return null; - } - return BinaryContent.Create(runStepFileSearchResultContent, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStepFileSearchResultContent(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStepFileSearchResultContent(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStepFileSearchResultContent.cs b/src/Generated/Models/RunStepFileSearchResultContent.cs index 65b5ebb81..b08a9710f 100644 --- a/src/Generated/Models/RunStepFileSearchResultContent.cs +++ b/src/Generated/Models/RunStepFileSearchResultContent.cs @@ -11,9 +11,10 @@ public partial class RunStepFileSearchResultContent { private protected IDictionary _additionalBinaryDataProperties; - internal RunStepFileSearchResultContent(string text) + internal RunStepFileSearchResultContent(string text, RunStepFileSearchResultContentKind kind) { Text = text; + Kind = kind; } internal RunStepFileSearchResultContent(string text, RunStepFileSearchResultContentKind kind, IDictionary additionalBinaryDataProperties) diff --git a/src/Generated/Models/RunStepTokenUsage.Serialization.cs b/src/Generated/Models/RunStepTokenUsage.Serialization.cs index 291d1c36d..c35797b6f 100644 --- a/src/Generated/Models/RunStepTokenUsage.Serialization.cs +++ b/src/Generated/Models/RunStepTokenUsage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrite writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStepTokenUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStepTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static RunStepTokenUsage DeserializeRunStepTokenUsage(JsonElement eleme totalTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunStepTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static RunStepTokenUsage DeserializeRunStepTokenUsage(JsonElement eleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepTokenUsage)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepTokenUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStepTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual RunStepTokenUsage PersistableModelCreateCore(BinaryData data, } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStepTokenUsage runStepTokenUsage) - { - if (runStepTokenUsage == null) - { - return null; - } - return BinaryContent.Create(runStepTokenUsage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStepTokenUsage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStepTokenUsage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStepToolCall.Serialization.cs b/src/Generated/Models/RunStepToolCall.Serialization.cs index 3e41dbab9..fef00dc80 100644 --- a/src/Generated/Models/RunStepToolCall.Serialization.cs +++ b/src/Generated/Models/RunStepToolCall.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Assistants { + [PersistableModelProxy(typeof(UnknownRunStepDetailsToolCallsObjectToolCallsObject))] public partial class RunStepToolCall : IJsonModel { void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) @@ -19,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -26,16 +28,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(RunStepToolCall)} does not support writing '{format}' format."); } - if (_additionalBinaryDataProperties?.ContainsKey("id") != true) - { - writer.WritePropertyName("id"u8); - writer.WriteStringValue(Id); - } if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); writer.WriteStringValue(Kind.ToSerialString()); } + if (_additionalBinaryDataProperties?.ContainsKey("id") != true) + { + writer.WritePropertyName("id"u8); + writer.WriteStringValue(Id); + } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -59,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStepToolCall IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStepToolCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -93,13 +97,14 @@ internal static RunStepToolCall DeserializeRunStepToolCall(JsonElement element, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepToolCall)} does not support writing '{options.Format}' format."); } @@ -107,6 +112,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepToolCall IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStepToolCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -123,21 +129,5 @@ protected virtual RunStepToolCall PersistableModelCreateCore(BinaryData data, Mo } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStepToolCall runStepToolCall) - { - if (runStepToolCall == null) - { - return null; - } - return BinaryContent.Create(runStepToolCall, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStepToolCall(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStepToolCall(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStepToolCall.cs b/src/Generated/Models/RunStepToolCall.cs index 9b11c28a5..195c7f888 100644 --- a/src/Generated/Models/RunStepToolCall.cs +++ b/src/Generated/Models/RunStepToolCall.cs @@ -11,19 +11,21 @@ public partial class RunStepToolCall { private protected IDictionary _additionalBinaryDataProperties; - private protected RunStepToolCall(string id, RunStepToolCallKind kind) + private protected RunStepToolCall(RunStepToolCallKind kind, string id) { - Id = id; Kind = kind; + Id = id; } - internal RunStepToolCall(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties) + internal RunStepToolCall(RunStepToolCallKind kind, string id, IDictionary additionalBinaryDataProperties) { - Id = id; Kind = kind; + Id = id; _additionalBinaryDataProperties = additionalBinaryDataProperties; } + public RunStepToolCallKind Kind { get; } + public string Id { get; } internal IDictionary SerializedAdditionalRawData diff --git a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs index 09245301a..a085da572 100644 --- a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs +++ b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Assistants { + [PersistableModelProxy(typeof(UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject))] public partial class RunStepUpdateCodeInterpreterOutput : IJsonModel { internal RunStepUpdateCodeInterpreterOutput() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -33,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunStepUpdateCodeInterpreterOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunStepUpdateCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -90,13 +94,14 @@ internal static RunStepUpdateCodeInterpreterOutput DeserializeRunStepUpdateCodeI BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepUpdateCodeInterpreterOutput)} does not support writing '{options.Format}' format."); } @@ -104,6 +109,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepUpdateCodeInterpreterOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunStepUpdateCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -120,21 +126,5 @@ protected virtual RunStepUpdateCodeInterpreterOutput PersistableModelCreateCore( } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunStepUpdateCodeInterpreterOutput runStepUpdateCodeInterpreterOutput) - { - if (runStepUpdateCodeInterpreterOutput == null) - { - return null; - } - return BinaryContent.Create(runStepUpdateCodeInterpreterOutput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunStepUpdateCodeInterpreterOutput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunStepUpdateCodeInterpreterOutput(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs index ecd137966..5bacde2b7 100644 --- a/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs +++ b/src/Generated/Models/RunStepUpdateCodeInterpreterOutput.cs @@ -11,18 +11,18 @@ public partial class RunStepUpdateCodeInterpreterOutput { private protected IDictionary _additionalBinaryDataProperties; - private protected RunStepUpdateCodeInterpreterOutput(string @type) + private protected RunStepUpdateCodeInterpreterOutput(InternalRunStepDetailsCodeInterpreterOutputType kind) { - Type = @type; + Kind = kind; } - internal RunStepUpdateCodeInterpreterOutput(string @type, IDictionary additionalBinaryDataProperties) + internal RunStepUpdateCodeInterpreterOutput(InternalRunStepDetailsCodeInterpreterOutputType kind, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalRunStepDetailsCodeInterpreterOutputType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/RunTokenUsage.Serialization.cs b/src/Generated/Models/RunTokenUsage.Serialization.cs index d1905041a..46e5be182 100644 --- a/src/Generated/Models/RunTokenUsage.Serialization.cs +++ b/src/Generated/Models/RunTokenUsage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpt writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total_tokens"u8); writer.WriteNumberValue(TotalTokenCount); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunTokenUsage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunTokenUsage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static RunTokenUsage DeserializeRunTokenUsage(JsonElement element, Mode totalTokenCount = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new RunTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static RunTokenUsage DeserializeRunTokenUsage(JsonElement element, Mode BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunTokenUsage)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunTokenUsage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunTokenUsage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual RunTokenUsage PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunTokenUsage runTokenUsage) - { - if (runTokenUsage == null) - { - return null; - } - return BinaryContent.Create(runTokenUsage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunTokenUsage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunTokenUsage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunTruncationStrategy.Serialization.cs b/src/Generated/Models/RunTruncationStrategy.Serialization.cs index c8d705ef5..5067136b6 100644 --- a/src/Generated/Models/RunTruncationStrategy.Serialization.cs +++ b/src/Generated/Models/RunTruncationStrategy.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -31,16 +32,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(RunTruncationStrategy)} does not support writing '{format}' format."); } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } if (Optional.IsDefined(LastMessages) && _additionalBinaryDataProperties?.ContainsKey("last_messages") != true) { writer.WritePropertyName("last_messages"u8); writer.WriteNumberValue(LastMessages.Value); } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_type.ToString()); - } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit RunTruncationStrategy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual RunTruncationStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -81,11 +84,16 @@ internal static RunTruncationStrategy DeserializeRunTruncationStrategy(JsonEleme { return null; } + InternalTruncationObjectType kind = default; int? lastMessages = default; - InternalTruncationObjectType @type = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { + if (prop.NameEquals("type"u8)) + { + kind = new InternalTruncationObjectType(prop.Value.GetString()); + continue; + } if (prop.NameEquals("last_messages"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -96,25 +104,22 @@ internal static RunTruncationStrategy DeserializeRunTruncationStrategy(JsonEleme lastMessages = prop.Value.GetInt32(); continue; } - if (prop.NameEquals("type"u8)) - { - @type = new InternalTruncationObjectType(prop.Value.GetString()); - continue; - } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new RunTruncationStrategy(lastMessages, @type, additionalBinaryDataProperties); + return new RunTruncationStrategy(kind, lastMessages, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunTruncationStrategy)} does not support writing '{options.Format}' format."); } @@ -122,6 +127,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunTruncationStrategy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual RunTruncationStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -138,21 +144,5 @@ protected virtual RunTruncationStrategy PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(RunTruncationStrategy runTruncationStrategy) - { - if (runTruncationStrategy == null) - { - return null; - } - return BinaryContent.Create(runTruncationStrategy, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator RunTruncationStrategy(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeRunTruncationStrategy(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/RunTruncationStrategy.cs b/src/Generated/Models/RunTruncationStrategy.cs index 39d09cb7a..38d3973f1 100644 --- a/src/Generated/Models/RunTruncationStrategy.cs +++ b/src/Generated/Models/RunTruncationStrategy.cs @@ -11,13 +11,15 @@ public partial class RunTruncationStrategy { private protected IDictionary _additionalBinaryDataProperties; - internal RunTruncationStrategy(int? lastMessages, InternalTruncationObjectType @type, IDictionary additionalBinaryDataProperties) + internal RunTruncationStrategy(InternalTruncationObjectType kind, int? lastMessages, IDictionary additionalBinaryDataProperties) { + Kind = kind; LastMessages = lastMessages; - _type = @type; _additionalBinaryDataProperties = additionalBinaryDataProperties; } + internal InternalTruncationObjectType Kind { get; set; } + internal IDictionary SerializedAdditionalRawData { get => _additionalBinaryDataProperties; diff --git a/src/Generated/Models/SpeechGenerationOptions.Serialization.cs b/src/Generated/Models/SpeechGenerationOptions.Serialization.cs index 2b21d9196..7cbc4c0dc 100644 --- a/src/Generated/Models/SpeechGenerationOptions.Serialization.cs +++ b/src/Generated/Models/SpeechGenerationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Audio { public partial class SpeechGenerationOptions : IJsonModel { + public SpeechGenerationOptions() + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -27,6 +32,11 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(SpeechGenerationOptions)} does not support writing '{format}' format."); } + if (Optional.IsDefined(Instructions) && _additionalBinaryDataProperties?.ContainsKey("instructions") != true) + { + writer.WritePropertyName("instructions"u8); + writer.WriteStringValue(Instructions); + } if (Optional.IsDefined(ResponseFormat) && _additionalBinaryDataProperties?.ContainsKey("response_format") != true) { writer.WritePropertyName("response_format"u8); @@ -52,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("speed"u8); writer.WriteNumberValue(SpeedRatio.Value); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -75,6 +86,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit SpeechGenerationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual SpeechGenerationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,6 +104,7 @@ internal static SpeechGenerationOptions DeserializeSpeechGenerationOptions(JsonE { return null; } + string instructions = default; GeneratedSpeechFormat? responseFormat = default; InternalCreateSpeechRequestModel model = default; string input = default; @@ -100,6 +113,11 @@ internal static SpeechGenerationOptions DeserializeSpeechGenerationOptions(JsonE IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { + if (prop.NameEquals("instructions"u8)) + { + instructions = prop.Value.GetString(); + continue; + } if (prop.NameEquals("response_format"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -133,9 +151,11 @@ internal static SpeechGenerationOptions DeserializeSpeechGenerationOptions(JsonE speedRatio = prop.Value.GetSingle(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new SpeechGenerationOptions( + instructions, responseFormat, model, input, @@ -146,13 +166,14 @@ internal static SpeechGenerationOptions DeserializeSpeechGenerationOptions(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(SpeechGenerationOptions)} does not support writing '{options.Format}' format."); } @@ -160,6 +181,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions SpeechGenerationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual SpeechGenerationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -176,21 +198,5 @@ protected virtual SpeechGenerationOptions PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(SpeechGenerationOptions speechGenerationOptions) - { - if (speechGenerationOptions == null) - { - return null; - } - return BinaryContent.Create(speechGenerationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator SpeechGenerationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeSpeechGenerationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/SpeechGenerationOptions.cs b/src/Generated/Models/SpeechGenerationOptions.cs index e48d5cf02..b16bc6f51 100644 --- a/src/Generated/Models/SpeechGenerationOptions.cs +++ b/src/Generated/Models/SpeechGenerationOptions.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; namespace OpenAI.Audio { @@ -11,8 +12,9 @@ public partial class SpeechGenerationOptions { private protected IDictionary _additionalBinaryDataProperties; - internal SpeechGenerationOptions(GeneratedSpeechFormat? responseFormat, InternalCreateSpeechRequestModel model, string input, GeneratedSpeechVoice voice, float? speedRatio, IDictionary additionalBinaryDataProperties) + internal SpeechGenerationOptions(string instructions, GeneratedSpeechFormat? responseFormat, InternalCreateSpeechRequestModel model, string input, GeneratedSpeechVoice voice, float? speedRatio, IDictionary additionalBinaryDataProperties) { + Instructions = instructions; ResponseFormat = responseFormat; Model = model; Input = input; @@ -21,6 +23,9 @@ internal SpeechGenerationOptions(GeneratedSpeechFormat? responseFormat, Internal _additionalBinaryDataProperties = additionalBinaryDataProperties; } + [Experimental("OPENAI001")] + public string Instructions { get; set; } + public GeneratedSpeechFormat? ResponseFormat { get; set; } internal IDictionary SerializedAdditionalRawData diff --git a/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs b/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs index 6535b929c..1f0385a4b 100644 --- a/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs +++ b/src/Generated/Models/StaticFileChunkingStrategy.Serialization.cs @@ -3,17 +3,18 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; +using OpenAI.Responses; namespace OpenAI.VectorStores { public partial class StaticFileChunkingStrategy : IJsonModel { - internal StaticFileChunkingStrategy() + internal StaticFileChunkingStrategy() : this(InternalDotNetCombinedChunkingStrategyParamType2.Static, null, null) { } @@ -24,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +43,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StaticFileChunkingStrategy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StaticFileChunkingStrategy)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override FileChunkingStrategy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,35 +61,37 @@ internal static StaticFileChunkingStrategy DeserializeStaticFileChunkingStrategy { return null; } - string @type = "static"; + InternalDotNetCombinedChunkingStrategyParamType2 kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalStaticChunkingStrategyDetails internalDetails = default; + InternalStaticChunkingStrategy internalDetails = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalDotNetCombinedChunkingStrategyParamType2(prop.Value.GetString()); continue; } if (prop.NameEquals("static"u8)) { - internalDetails = InternalStaticChunkingStrategyDetails.DeserializeInternalStaticChunkingStrategyDetails(prop.Value, options); + internalDetails = InternalStaticChunkingStrategy.DeserializeInternalStaticChunkingStrategy(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StaticFileChunkingStrategy(@type, additionalBinaryDataProperties, internalDetails); + return new StaticFileChunkingStrategy(kind, additionalBinaryDataProperties, internalDetails); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StaticFileChunkingStrategy)} does not support writing '{options.Format}' format."); } @@ -94,6 +99,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StaticFileChunkingStrategy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StaticFileChunkingStrategy)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +116,5 @@ protected override FileChunkingStrategy PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StaticFileChunkingStrategy staticFileChunkingStrategy) - { - if (staticFileChunkingStrategy == null) - { - return null; - } - return BinaryContent.Create(staticFileChunkingStrategy, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StaticFileChunkingStrategy(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStaticFileChunkingStrategy(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StaticFileChunkingStrategy.cs b/src/Generated/Models/StaticFileChunkingStrategy.cs index f59a5ede5..61490db63 100644 --- a/src/Generated/Models/StaticFileChunkingStrategy.cs +++ b/src/Generated/Models/StaticFileChunkingStrategy.cs @@ -4,12 +4,21 @@ using System; using System.Collections.Generic; +using OpenAI; +using OpenAI.Responses; namespace OpenAI.VectorStores { public partial class StaticFileChunkingStrategy : FileChunkingStrategy { - internal StaticFileChunkingStrategy(string @type, IDictionary additionalBinaryDataProperties, InternalStaticChunkingStrategyDetails internalDetails) : base(@type, additionalBinaryDataProperties) + internal StaticFileChunkingStrategy(InternalStaticChunkingStrategy internalDetails) : base(InternalDotNetCombinedChunkingStrategyParamType2.Static) + { + Argument.AssertNotNull(internalDetails, nameof(internalDetails)); + + _internalDetails = internalDetails; + } + + internal StaticFileChunkingStrategy(InternalDotNetCombinedChunkingStrategyParamType2 kind, IDictionary additionalBinaryDataProperties, InternalStaticChunkingStrategy internalDetails) : base(kind, additionalBinaryDataProperties) { _internalDetails = internalDetails; } diff --git a/src/Generated/Models/StreamingAudioTranscriptionTextDeltaUpdate.Serialization.cs b/src/Generated/Models/StreamingAudioTranscriptionTextDeltaUpdate.Serialization.cs new file mode 100644 index 000000000..da9f7126e --- /dev/null +++ b/src/Generated/Models/StreamingAudioTranscriptionTextDeltaUpdate.Serialization.cs @@ -0,0 +1,144 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Audio +{ + public partial class StreamingAudioTranscriptionTextDeltaUpdate : IJsonModel + { + internal StreamingAudioTranscriptionTextDeltaUpdate() : this(StreamingAudioTranscriptionUpdateKind.TranscriptTextDelta, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionTextDeltaUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("delta") != true) + { + writer.WritePropertyName("delta"u8); + writer.WriteStringValue(Delta); + } + if (Optional.IsCollectionDefined(TranscriptionTokenLogProbabilities) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) + { + writer.WritePropertyName("logprobs"u8); + writer.WriteStartArray(); + foreach (AudioTokenLogProbabilityDetails item in TranscriptionTokenLogProbabilities) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + StreamingAudioTranscriptionTextDeltaUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingAudioTranscriptionTextDeltaUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionTextDeltaUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeStreamingAudioTranscriptionTextDeltaUpdate(document.RootElement, options); + } + + internal static StreamingAudioTranscriptionTextDeltaUpdate DeserializeStreamingAudioTranscriptionTextDeltaUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingAudioTranscriptionUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string delta = default; + IReadOnlyList transcriptionTokenLogProbabilities = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingAudioTranscriptionUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("delta"u8)) + { + delta = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprobs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(AudioTokenLogProbabilityDetails.DeserializeAudioTokenLogProbabilityDetails(item, options)); + } + transcriptionTokenLogProbabilities = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new StreamingAudioTranscriptionTextDeltaUpdate(kind, additionalBinaryDataProperties, delta, transcriptionTokenLogProbabilities ?? new ChangeTrackingList()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(StreamingAudioTranscriptionTextDeltaUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingAudioTranscriptionTextDeltaUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingAudioTranscriptionTextDeltaUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeStreamingAudioTranscriptionTextDeltaUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionTextDeltaUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/StreamingAudioTranscriptionTextDeltaUpdate.cs b/src/Generated/Models/StreamingAudioTranscriptionTextDeltaUpdate.cs new file mode 100644 index 000000000..d09ec2cbf --- /dev/null +++ b/src/Generated/Models/StreamingAudioTranscriptionTextDeltaUpdate.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Audio +{ + public partial class StreamingAudioTranscriptionTextDeltaUpdate : StreamingAudioTranscriptionUpdate + { + internal StreamingAudioTranscriptionTextDeltaUpdate(string delta) : base(StreamingAudioTranscriptionUpdateKind.TranscriptTextDelta) + { + Delta = delta; + TranscriptionTokenLogProbabilities = new ChangeTrackingList(); + } + + internal StreamingAudioTranscriptionTextDeltaUpdate(StreamingAudioTranscriptionUpdateKind kind, IDictionary additionalBinaryDataProperties, string delta, IReadOnlyList transcriptionTokenLogProbabilities) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Delta = delta; + TranscriptionTokenLogProbabilities = transcriptionTokenLogProbabilities ?? new ChangeTrackingList(); + } + + public string Delta { get; } + } +} diff --git a/src/Generated/Models/StreamingAudioTranscriptionTextDoneUpdate.Serialization.cs b/src/Generated/Models/StreamingAudioTranscriptionTextDoneUpdate.Serialization.cs new file mode 100644 index 000000000..1734aaa90 --- /dev/null +++ b/src/Generated/Models/StreamingAudioTranscriptionTextDoneUpdate.Serialization.cs @@ -0,0 +1,144 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Audio +{ + public partial class StreamingAudioTranscriptionTextDoneUpdate : IJsonModel + { + internal StreamingAudioTranscriptionTextDoneUpdate() : this(StreamingAudioTranscriptionUpdateKind.TranscriptTextDone, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionTextDoneUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("text") != true) + { + writer.WritePropertyName("text"u8); + writer.WriteStringValue(Text); + } + if (Optional.IsCollectionDefined(TranscriptionTokenLogProbabilities) && _additionalBinaryDataProperties?.ContainsKey("logprobs") != true) + { + writer.WritePropertyName("logprobs"u8); + writer.WriteStartArray(); + foreach (AudioTokenLogProbabilityDetails item in TranscriptionTokenLogProbabilities) + { + writer.WriteObjectValue(item, options); + } + writer.WriteEndArray(); + } + } + + StreamingAudioTranscriptionTextDoneUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingAudioTranscriptionTextDoneUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionTextDoneUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeStreamingAudioTranscriptionTextDoneUpdate(document.RootElement, options); + } + + internal static StreamingAudioTranscriptionTextDoneUpdate DeserializeStreamingAudioTranscriptionTextDoneUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + StreamingAudioTranscriptionUpdateKind kind = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + string text = default; + IReadOnlyList transcriptionTokenLogProbabilities = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new StreamingAudioTranscriptionUpdateKind(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("text"u8)) + { + text = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("logprobs"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(AudioTokenLogProbabilityDetails.DeserializeAudioTokenLogProbabilityDetails(item, options)); + } + transcriptionTokenLogProbabilities = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new StreamingAudioTranscriptionTextDoneUpdate(kind, additionalBinaryDataProperties, text, transcriptionTokenLogProbabilities ?? new ChangeTrackingList()); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(StreamingAudioTranscriptionTextDoneUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingAudioTranscriptionTextDoneUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingAudioTranscriptionTextDoneUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeStreamingAudioTranscriptionTextDoneUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionTextDoneUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/StreamingAudioTranscriptionTextDoneUpdate.cs b/src/Generated/Models/StreamingAudioTranscriptionTextDoneUpdate.cs new file mode 100644 index 000000000..db3f18481 --- /dev/null +++ b/src/Generated/Models/StreamingAudioTranscriptionTextDoneUpdate.cs @@ -0,0 +1,28 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Audio +{ + public partial class StreamingAudioTranscriptionTextDoneUpdate : StreamingAudioTranscriptionUpdate + { + internal StreamingAudioTranscriptionTextDoneUpdate(string text) : base(StreamingAudioTranscriptionUpdateKind.TranscriptTextDone) + { + Text = text; + TranscriptionTokenLogProbabilities = new ChangeTrackingList(); + } + + internal StreamingAudioTranscriptionTextDoneUpdate(StreamingAudioTranscriptionUpdateKind kind, IDictionary additionalBinaryDataProperties, string text, IReadOnlyList transcriptionTokenLogProbabilities) : base(kind, additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + Text = text; + TranscriptionTokenLogProbabilities = transcriptionTokenLogProbabilities ?? new ChangeTrackingList(); + } + + public string Text { get; } + } +} diff --git a/src/Generated/Models/StreamingAudioTranscriptionUpdate.Serialization.cs b/src/Generated/Models/StreamingAudioTranscriptionUpdate.Serialization.cs new file mode 100644 index 000000000..c13f7b767 --- /dev/null +++ b/src/Generated/Models/StreamingAudioTranscriptionUpdate.Serialization.cs @@ -0,0 +1,130 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Audio +{ + [PersistableModelProxy(typeof(InternalUnknownCreateTranscriptionResponseStreamEvent))] + public partial class StreamingAudioTranscriptionUpdate : IJsonModel + { + internal StreamingAudioTranscriptionUpdate() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionUpdate)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + StreamingAudioTranscriptionUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual StreamingAudioTranscriptionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeStreamingAudioTranscriptionUpdate(document.RootElement, options); + } + + internal static StreamingAudioTranscriptionUpdate DeserializeStreamingAudioTranscriptionUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "transcript.text.delta": + return StreamingAudioTranscriptionTextDeltaUpdate.DeserializeStreamingAudioTranscriptionTextDeltaUpdate(element, options); + case "transcript.text.done": + return StreamingAudioTranscriptionTextDoneUpdate.DeserializeStreamingAudioTranscriptionTextDoneUpdate(element, options); + } + } + return InternalUnknownCreateTranscriptionResponseStreamEvent.DeserializeInternalUnknownCreateTranscriptionResponseStreamEvent(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(StreamingAudioTranscriptionUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingAudioTranscriptionUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual StreamingAudioTranscriptionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeStreamingAudioTranscriptionUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(StreamingAudioTranscriptionUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/StreamingAudioTranscriptionUpdate.cs b/src/Generated/Models/StreamingAudioTranscriptionUpdate.cs new file mode 100644 index 000000000..b0b1da2b1 --- /dev/null +++ b/src/Generated/Models/StreamingAudioTranscriptionUpdate.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Audio +{ + public partial class StreamingAudioTranscriptionUpdate + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected StreamingAudioTranscriptionUpdate(StreamingAudioTranscriptionUpdateKind kind) + { + Kind = kind; + } + + internal StreamingAudioTranscriptionUpdate(StreamingAudioTranscriptionUpdateKind kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal StreamingAudioTranscriptionUpdateKind Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/StreamingAudioTranscriptionUpdateKind.cs b/src/Generated/Models/StreamingAudioTranscriptionUpdateKind.cs new file mode 100644 index 000000000..9a59a2e4e --- /dev/null +++ b/src/Generated/Models/StreamingAudioTranscriptionUpdateKind.cs @@ -0,0 +1,44 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Audio +{ + public readonly partial struct StreamingAudioTranscriptionUpdateKind : IEquatable + { + private readonly string _value; + private const string TranscriptTextDeltaValue = "transcript.text.delta"; + private const string TranscriptTextDoneValue = "transcript.text.done"; + + public StreamingAudioTranscriptionUpdateKind(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static StreamingAudioTranscriptionUpdateKind TranscriptTextDelta { get; } = new StreamingAudioTranscriptionUpdateKind(TranscriptTextDeltaValue); + + public static StreamingAudioTranscriptionUpdateKind TranscriptTextDone { get; } = new StreamingAudioTranscriptionUpdateKind(TranscriptTextDoneValue); + + public static bool operator ==(StreamingAudioTranscriptionUpdateKind left, StreamingAudioTranscriptionUpdateKind right) => left.Equals(right); + + public static bool operator !=(StreamingAudioTranscriptionUpdateKind left, StreamingAudioTranscriptionUpdateKind right) => !left.Equals(right); + + public static implicit operator StreamingAudioTranscriptionUpdateKind(string value) => new StreamingAudioTranscriptionUpdateKind(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is StreamingAudioTranscriptionUpdateKind other && Equals(other); + + public bool Equals(StreamingAudioTranscriptionUpdateKind 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/StreamingChatCompletionUpdate.Serialization.cs b/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs index 8ee89e924..7ced8edaf 100644 --- a/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatCompletionUpdate.Serialization.cs @@ -3,17 +3,18 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; +using OpenAI.Internal; namespace OpenAI.Chat { public partial class StreamingChatCompletionUpdate : IJsonModel { - internal StreamingChatCompletionUpdate() + internal StreamingChatCompletionUpdate() : this(null, null, null, null, default, null, default, null, null) { } @@ -24,6 +25,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,7 +46,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("id") != true) { @@ -76,6 +78,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("usage"u8); writer.WriteObjectValue(Usage, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -99,6 +102,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit StreamingChatCompletionUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual StreamingChatCompletionUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -118,9 +122,9 @@ internal static StreamingChatCompletionUpdate DeserializeStreamingChatCompletion } string model = default; string systemFingerprint = default; - InternalCreateChatCompletionStreamResponseObject @object = default; + string @object = default; string completionId = default; - InternalCreateChatCompletionStreamResponseServiceTier? serviceTier = default; + InternalServiceTier? serviceTier = default; IReadOnlyList choices = default; DateTimeOffset createdAt = default; ChatTokenUsage usage = default; @@ -139,7 +143,7 @@ internal static StreamingChatCompletionUpdate DeserializeStreamingChatCompletion } if (prop.NameEquals("object"u8)) { - @object = new InternalCreateChatCompletionStreamResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("id"u8)) @@ -154,7 +158,7 @@ internal static StreamingChatCompletionUpdate DeserializeStreamingChatCompletion serviceTier = null; continue; } - serviceTier = new InternalCreateChatCompletionStreamResponseServiceTier(prop.Value.GetString()); + serviceTier = new InternalServiceTier(prop.Value.GetString()); continue; } if (prop.NameEquals("choices"u8)) @@ -176,11 +180,13 @@ internal static StreamingChatCompletionUpdate DeserializeStreamingChatCompletion { if (prop.Value.ValueKind == JsonValueKind.Null) { + usage = null; continue; } usage = ChatTokenUsage.DeserializeChatTokenUsage(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingChatCompletionUpdate( @@ -197,13 +203,14 @@ internal static StreamingChatCompletionUpdate DeserializeStreamingChatCompletion BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingChatCompletionUpdate)} does not support writing '{options.Format}' format."); } @@ -211,6 +218,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingChatCompletionUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual StreamingChatCompletionUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -227,21 +235,5 @@ protected virtual StreamingChatCompletionUpdate PersistableModelCreateCore(Binar } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingChatCompletionUpdate streamingChatCompletionUpdate) - { - if (streamingChatCompletionUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingChatCompletionUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingChatCompletionUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingChatCompletionUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingChatCompletionUpdate.cs b/src/Generated/Models/StreamingChatCompletionUpdate.cs index 13a134ed7..724b3f1bf 100644 --- a/src/Generated/Models/StreamingChatCompletionUpdate.cs +++ b/src/Generated/Models/StreamingChatCompletionUpdate.cs @@ -5,6 +5,8 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenAI; +using OpenAI.Internal; namespace OpenAI.Chat { @@ -20,14 +22,15 @@ internal StreamingChatCompletionUpdate(string model, string completionId, IEnume CreatedAt = createdAt; } - internal StreamingChatCompletionUpdate(string model, string systemFingerprint, InternalCreateChatCompletionStreamResponseObject @object, string completionId, InternalCreateChatCompletionStreamResponseServiceTier? serviceTier, IReadOnlyList choices, DateTimeOffset createdAt, ChatTokenUsage usage, IDictionary additionalBinaryDataProperties) + internal StreamingChatCompletionUpdate(string model, string systemFingerprint, string @object, string completionId, InternalServiceTier? serviceTier, IReadOnlyList choices, DateTimeOffset createdAt, ChatTokenUsage usage, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Model = model; SystemFingerprint = systemFingerprint; Object = @object; CompletionId = completionId; ServiceTier = serviceTier; - Choices = choices; + Choices = choices ?? new ChangeTrackingList(); CreatedAt = createdAt; Usage = usage; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/StreamingChatFunctionCallUpdate.Serialization.cs b/src/Generated/Models/StreamingChatFunctionCallUpdate.Serialization.cs index e937d4b0f..ddb75d496 100644 --- a/src/Generated/Models/StreamingChatFunctionCallUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatFunctionCallUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("arguments"u8); SerializeFunctionArgumentsUpdateValue(writer, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit StreamingChatFunctionCallUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual StreamingChatFunctionCallUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,6 +95,7 @@ internal static StreamingChatFunctionCallUpdate DeserializeStreamingChatFunction DeserializeFunctionArgumentsUpdateValue(prop, ref functionArgumentsUpdate); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingChatFunctionCallUpdate(functionName, functionArgumentsUpdate, additionalBinaryDataProperties); @@ -99,13 +103,14 @@ internal static StreamingChatFunctionCallUpdate DeserializeStreamingChatFunction BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingChatFunctionCallUpdate)} does not support writing '{options.Format}' format."); } @@ -113,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingChatFunctionCallUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual StreamingChatFunctionCallUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,21 +135,5 @@ protected virtual StreamingChatFunctionCallUpdate PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingChatFunctionCallUpdate streamingChatFunctionCallUpdate) - { - if (streamingChatFunctionCallUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingChatFunctionCallUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingChatFunctionCallUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingChatFunctionCallUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingChatOutputAudioUpdate.Serialization.cs b/src/Generated/Models/StreamingChatOutputAudioUpdate.Serialization.cs index 6c8fccc46..d273ef6ca 100644 --- a/src/Generated/Models/StreamingChatOutputAudioUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatOutputAudioUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -47,6 +48,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("data"u8); writer.WriteBase64StringValue(AudioBytesUpdate.ToArray(), "D"); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -70,6 +72,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit StreamingChatOutputAudioUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual StreamingChatOutputAudioUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -122,6 +125,7 @@ internal static StreamingChatOutputAudioUpdate DeserializeStreamingChatOutputAud audioBytesUpdate = BinaryData.FromBytes(prop.Value.GetBytesFromBase64("D")); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingChatOutputAudioUpdate(id, expiresAt, transcriptUpdate, audioBytesUpdate, additionalBinaryDataProperties); @@ -129,13 +133,14 @@ internal static StreamingChatOutputAudioUpdate DeserializeStreamingChatOutputAud BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingChatOutputAudioUpdate)} does not support writing '{options.Format}' format."); } @@ -143,6 +148,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingChatOutputAudioUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual StreamingChatOutputAudioUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -159,21 +165,5 @@ protected virtual StreamingChatOutputAudioUpdate PersistableModelCreateCore(Bina } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingChatOutputAudioUpdate streamingChatOutputAudioUpdate) - { - if (streamingChatOutputAudioUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingChatOutputAudioUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingChatOutputAudioUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingChatOutputAudioUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs b/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs index 5a33c0019..3cd2eee59 100644 --- a/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingChatToolCallUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("id"u8); writer.WriteStringValue(ToolCallId); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -74,6 +76,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit StreamingChatToolCallUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual StreamingChatToolCallUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -126,6 +129,7 @@ internal static StreamingChatToolCallUpdate DeserializeStreamingChatToolCallUpda toolCallId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingChatToolCallUpdate(index, function, kind, toolCallId, additionalBinaryDataProperties); @@ -133,13 +137,14 @@ internal static StreamingChatToolCallUpdate DeserializeStreamingChatToolCallUpda BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingChatToolCallUpdate)} does not support writing '{options.Format}' format."); } @@ -147,6 +152,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingChatToolCallUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual StreamingChatToolCallUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -163,21 +169,5 @@ protected virtual StreamingChatToolCallUpdate PersistableModelCreateCore(BinaryD } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingChatToolCallUpdate streamingChatToolCallUpdate) - { - if (streamingChatToolCallUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingChatToolCallUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingChatToolCallUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingChatToolCallUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseCompletedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseCompletedUpdate.Serialization.cs index 7297283f7..7f67447ac 100644 --- a/src/Generated/Models/StreamingResponseCompletedUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseCompletedUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseCompletedUpdate : IJsonModel { - internal StreamingResponseCompletedUpdate() + internal StreamingResponseCompletedUpdate() : this(InternalResponseStreamEventType.ResponseCompleted, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseCompletedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseCompletedUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,20 @@ internal static StreamingResponseCompletedUpdate DeserializeStreamingResponseCom { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); OpenAIResponse response = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("response"u8)) @@ -73,20 +81,22 @@ internal static StreamingResponseCompletedUpdate DeserializeStreamingResponseCom response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseCompletedUpdate(@type, additionalBinaryDataProperties, response); + return new StreamingResponseCompletedUpdate(kind, sequenceNumber, additionalBinaryDataProperties, response); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseCompletedUpdate)} does not support writing '{options.Format}' format."); } @@ -94,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseCompletedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseCompletedUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +121,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseCompletedUpdate streamingResponseCompletedUpdate) - { - if (streamingResponseCompletedUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseCompletedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseCompletedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseCompletedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseCompletedUpdate.cs b/src/Generated/Models/StreamingResponseCompletedUpdate.cs index e42c6f784..7b4f93bd9 100644 --- a/src/Generated/Models/StreamingResponseCompletedUpdate.cs +++ b/src/Generated/Models/StreamingResponseCompletedUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.Responses { public partial class StreamingResponseCompletedUpdate : StreamingResponseUpdate { - internal StreamingResponseCompletedUpdate(OpenAIResponse response) : base(InternalResponsesResponseStreamEventType.ResponseCompleted) + internal StreamingResponseCompletedUpdate(int sequenceNumber, OpenAIResponse response) : base(InternalResponseStreamEventType.ResponseCompleted, sequenceNumber) { Response = response; } - internal StreamingResponseCompletedUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseCompletedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, sequenceNumber, additionalBinaryDataProperties) { Response = response; } diff --git a/src/Generated/Models/StreamingResponseContentPartAddedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseContentPartAddedUpdate.Serialization.cs index b766b7d42..cef3245ff 100644 --- a/src/Generated/Models/StreamingResponseContentPartAddedUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseContentPartAddedUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseContentPartAddedUpdate : IJsonModel { - internal StreamingResponseContentPartAddedUpdate() + internal StreamingResponseContentPartAddedUpdate() : this(InternalResponseStreamEventType.ResponseContentPartAdded, default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseContentPartAddedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseContentPartAddedUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,7 +75,8 @@ internal static StreamingResponseContentPartAddedUpdate DeserializeStreamingResp { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int outputIndex = default; @@ -83,7 +86,12 @@ internal static StreamingResponseContentPartAddedUpdate DeserializeStreamingResp { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("item_id"u8)) @@ -106,10 +114,12 @@ internal static StreamingResponseContentPartAddedUpdate DeserializeStreamingResp part = ResponseContentPart.DeserializeResponseContentPart(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingResponseContentPartAddedUpdate( - @type, + kind, + sequenceNumber, additionalBinaryDataProperties, itemId, outputIndex, @@ -119,13 +129,14 @@ internal static StreamingResponseContentPartAddedUpdate DeserializeStreamingResp BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseContentPartAddedUpdate)} does not support writing '{options.Format}' format."); } @@ -133,6 +144,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseContentPartAddedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseContentPartAddedUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,21 +161,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseContentPartAddedUpdate streamingResponseContentPartAddedUpdate) - { - if (streamingResponseContentPartAddedUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseContentPartAddedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseContentPartAddedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseContentPartAddedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseContentPartAddedUpdate.cs b/src/Generated/Models/StreamingResponseContentPartAddedUpdate.cs index 73e1e94c8..4ab3954ab 100644 --- a/src/Generated/Models/StreamingResponseContentPartAddedUpdate.cs +++ b/src/Generated/Models/StreamingResponseContentPartAddedUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseContentPartAddedUpdate : StreamingResponseUpdate { - internal StreamingResponseContentPartAddedUpdate(string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(InternalResponsesResponseStreamEventType.ResponseContentPartAdded) + internal StreamingResponseContentPartAddedUpdate(int sequenceNumber, string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(InternalResponseStreamEventType.ResponseContentPartAdded, sequenceNumber) { ItemId = itemId; OutputIndex = outputIndex; @@ -17,7 +17,7 @@ internal StreamingResponseContentPartAddedUpdate(string itemId, int outputIndex, Part = part; } - internal StreamingResponseContentPartAddedUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseContentPartAddedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(kind, sequenceNumber, additionalBinaryDataProperties) { ItemId = itemId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/StreamingResponseContentPartDoneUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseContentPartDoneUpdate.Serialization.cs index 0d76db1d6..b56e73fdf 100644 --- a/src/Generated/Models/StreamingResponseContentPartDoneUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseContentPartDoneUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseContentPartDoneUpdate : IJsonModel { - internal StreamingResponseContentPartDoneUpdate() + internal StreamingResponseContentPartDoneUpdate() : this(InternalResponseStreamEventType.ResponseContentPartDone, default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseContentPartDoneUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseContentPartDoneUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,7 +75,8 @@ internal static StreamingResponseContentPartDoneUpdate DeserializeStreamingRespo { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int outputIndex = default; @@ -83,7 +86,12 @@ internal static StreamingResponseContentPartDoneUpdate DeserializeStreamingRespo { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("item_id"u8)) @@ -106,10 +114,12 @@ internal static StreamingResponseContentPartDoneUpdate DeserializeStreamingRespo part = ResponseContentPart.DeserializeResponseContentPart(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingResponseContentPartDoneUpdate( - @type, + kind, + sequenceNumber, additionalBinaryDataProperties, itemId, outputIndex, @@ -119,13 +129,14 @@ internal static StreamingResponseContentPartDoneUpdate DeserializeStreamingRespo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseContentPartDoneUpdate)} does not support writing '{options.Format}' format."); } @@ -133,6 +144,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseContentPartDoneUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseContentPartDoneUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,21 +161,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseContentPartDoneUpdate streamingResponseContentPartDoneUpdate) - { - if (streamingResponseContentPartDoneUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseContentPartDoneUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseContentPartDoneUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseContentPartDoneUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseContentPartDoneUpdate.cs b/src/Generated/Models/StreamingResponseContentPartDoneUpdate.cs index 68f11d073..26b2e0965 100644 --- a/src/Generated/Models/StreamingResponseContentPartDoneUpdate.cs +++ b/src/Generated/Models/StreamingResponseContentPartDoneUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseContentPartDoneUpdate : StreamingResponseUpdate { - internal StreamingResponseContentPartDoneUpdate(string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(InternalResponsesResponseStreamEventType.ResponseContentPartDone) + internal StreamingResponseContentPartDoneUpdate(int sequenceNumber, string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(InternalResponseStreamEventType.ResponseContentPartDone, sequenceNumber) { ItemId = itemId; OutputIndex = outputIndex; @@ -17,7 +17,7 @@ internal StreamingResponseContentPartDoneUpdate(string itemId, int outputIndex, Part = part; } - internal StreamingResponseContentPartDoneUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseContentPartDoneUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, ResponseContentPart part) : base(kind, sequenceNumber, additionalBinaryDataProperties) { ItemId = itemId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/StreamingResponseCreatedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseCreatedUpdate.Serialization.cs index eb3f93bd7..205ccae43 100644 --- a/src/Generated/Models/StreamingResponseCreatedUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseCreatedUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseCreatedUpdate : IJsonModel { - internal StreamingResponseCreatedUpdate() + internal StreamingResponseCreatedUpdate() : this(InternalResponseStreamEventType.ResponseCreated, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseCreatedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseCreatedUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,20 @@ internal static StreamingResponseCreatedUpdate DeserializeStreamingResponseCreat { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); OpenAIResponse response = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("response"u8)) @@ -73,20 +81,22 @@ internal static StreamingResponseCreatedUpdate DeserializeStreamingResponseCreat response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseCreatedUpdate(@type, additionalBinaryDataProperties, response); + return new StreamingResponseCreatedUpdate(kind, sequenceNumber, additionalBinaryDataProperties, response); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseCreatedUpdate)} does not support writing '{options.Format}' format."); } @@ -94,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseCreatedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseCreatedUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +121,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseCreatedUpdate streamingResponseCreatedUpdate) - { - if (streamingResponseCreatedUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseCreatedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseCreatedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseCreatedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseCreatedUpdate.cs b/src/Generated/Models/StreamingResponseCreatedUpdate.cs index a71f772ab..2d206dab2 100644 --- a/src/Generated/Models/StreamingResponseCreatedUpdate.cs +++ b/src/Generated/Models/StreamingResponseCreatedUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.Responses { public partial class StreamingResponseCreatedUpdate : StreamingResponseUpdate { - internal StreamingResponseCreatedUpdate(OpenAIResponse response) : base(InternalResponsesResponseStreamEventType.ResponseCreated) + internal StreamingResponseCreatedUpdate(int sequenceNumber, OpenAIResponse response) : base(InternalResponseStreamEventType.ResponseCreated, sequenceNumber) { Response = response; } - internal StreamingResponseCreatedUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseCreatedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, sequenceNumber, additionalBinaryDataProperties) { Response = response; } diff --git a/src/Generated/Models/StreamingResponseErrorUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseErrorUpdate.Serialization.cs index 5fd872eb8..ed68f3ec8 100644 --- a/src/Generated/Models/StreamingResponseErrorUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseErrorUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseErrorUpdate : IJsonModel { - internal StreamingResponseErrorUpdate() + internal StreamingResponseErrorUpdate() : this(InternalResponseStreamEventType.Error, default, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,11 +33,6 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(StreamingResponseErrorUpdate)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("message") != true) - { - writer.WritePropertyName("message"u8); - writer.WriteStringValue(Message); - } if (_additionalBinaryDataProperties?.ContainsKey("code") != true) { if (Optional.IsDefined(Code)) @@ -49,6 +45,11 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri writer.WriteNull("code"u8); } } + if (_additionalBinaryDataProperties?.ContainsKey("message") != true) + { + writer.WritePropertyName("message"u8); + writer.WriteStringValue(Message); + } if (_additionalBinaryDataProperties?.ContainsKey("param") != true) { if (Optional.IsDefined(Param)) @@ -65,6 +66,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseErrorUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseErrorUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,21 +84,22 @@ internal static StreamingResponseErrorUpdate DeserializeStreamingResponseErrorUp { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string message = default; string code = default; + string message = default; string @param = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); continue; } - if (prop.NameEquals("message"u8)) + if (prop.NameEquals("sequence_number"u8)) { - message = prop.Value.GetString(); + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("code"u8)) @@ -109,6 +112,11 @@ internal static StreamingResponseErrorUpdate DeserializeStreamingResponseErrorUp code = prop.Value.GetString(); continue; } + if (prop.NameEquals("message"u8)) + { + message = prop.Value.GetString(); + continue; + } if (prop.NameEquals("param"u8)) { if (prop.Value.ValueKind == JsonValueKind.Null) @@ -119,20 +127,28 @@ internal static StreamingResponseErrorUpdate DeserializeStreamingResponseErrorUp @param = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseErrorUpdate(@type, additionalBinaryDataProperties, message, code, @param); + return new StreamingResponseErrorUpdate( + kind, + sequenceNumber, + additionalBinaryDataProperties, + code, + message, + @param); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseErrorUpdate)} does not support writing '{options.Format}' format."); } @@ -140,6 +156,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseErrorUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseErrorUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -156,21 +173,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseErrorUpdate streamingResponseErrorUpdate) - { - if (streamingResponseErrorUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseErrorUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseErrorUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseErrorUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseErrorUpdate.cs b/src/Generated/Models/StreamingResponseErrorUpdate.cs index 88c4a68ae..46d474546 100644 --- a/src/Generated/Models/StreamingResponseErrorUpdate.cs +++ b/src/Generated/Models/StreamingResponseErrorUpdate.cs @@ -9,24 +9,24 @@ namespace OpenAI.Responses { public partial class StreamingResponseErrorUpdate : StreamingResponseUpdate { - internal StreamingResponseErrorUpdate(string message, string code, string @param) : base(InternalResponsesResponseStreamEventType.Error) + internal StreamingResponseErrorUpdate(int sequenceNumber, string code, string message, string @param) : base(InternalResponseStreamEventType.Error, sequenceNumber) { - Message = message; Code = code; + Message = message; Param = @param; } - internal StreamingResponseErrorUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string message, string code, string @param) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseErrorUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string code, string message, string @param) : base(kind, sequenceNumber, additionalBinaryDataProperties) { - Message = message; Code = code; + Message = message; Param = @param; } - public string Message { get; } - public string Code { get; } + public string Message { get; } + public string Param { get; } } } diff --git a/src/Generated/Models/StreamingResponseFailedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseFailedUpdate.Serialization.cs index 39d71ee1f..974446cde 100644 --- a/src/Generated/Models/StreamingResponseFailedUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseFailedUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseFailedUpdate : IJsonModel { - internal StreamingResponseFailedUpdate() + internal StreamingResponseFailedUpdate() : this(InternalResponseStreamEventType.ResponseFailed, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseFailedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseFailedUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,20 @@ internal static StreamingResponseFailedUpdate DeserializeStreamingResponseFailed { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); OpenAIResponse response = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("response"u8)) @@ -73,20 +81,22 @@ internal static StreamingResponseFailedUpdate DeserializeStreamingResponseFailed response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseFailedUpdate(@type, additionalBinaryDataProperties, response); + return new StreamingResponseFailedUpdate(kind, sequenceNumber, additionalBinaryDataProperties, response); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseFailedUpdate)} does not support writing '{options.Format}' format."); } @@ -94,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseFailedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseFailedUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +121,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseFailedUpdate streamingResponseFailedUpdate) - { - if (streamingResponseFailedUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseFailedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseFailedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseFailedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseFailedUpdate.cs b/src/Generated/Models/StreamingResponseFailedUpdate.cs index 138242f27..3aeeca501 100644 --- a/src/Generated/Models/StreamingResponseFailedUpdate.cs +++ b/src/Generated/Models/StreamingResponseFailedUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.Responses { public partial class StreamingResponseFailedUpdate : StreamingResponseUpdate { - internal StreamingResponseFailedUpdate(OpenAIResponse response) : base(InternalResponsesResponseStreamEventType.ResponseFailed) + internal StreamingResponseFailedUpdate(int sequenceNumber, OpenAIResponse response) : base(InternalResponseStreamEventType.ResponseFailed, sequenceNumber) { Response = response; } - internal StreamingResponseFailedUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseFailedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, sequenceNumber, additionalBinaryDataProperties) { Response = response; } diff --git a/src/Generated/Models/StreamingResponseFileSearchCallCompletedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseFileSearchCallCompletedUpdate.Serialization.cs index f8f931fc5..e9c0ab592 100644 --- a/src/Generated/Models/StreamingResponseFileSearchCallCompletedUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseFileSearchCallCompletedUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseFileSearchCallCompletedUpdate : IJsonModel { - internal StreamingResponseFileSearchCallCompletedUpdate() + internal StreamingResponseFileSearchCallCompletedUpdate() : this(InternalResponseStreamEventType.ResponseFileSearchCallCompleted, default, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,20 +33,21 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(StreamingResponseFileSearchCallCompletedUpdate)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) { writer.WritePropertyName("output_index"u8); writer.WriteNumberValue(OutputIndex); } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } } StreamingResponseFileSearchCallCompletedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseFileSearchCallCompletedUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,20 +65,21 @@ internal static StreamingResponseFileSearchCallCompletedUpdate DeserializeStream { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; int outputIndex = default; + string itemId = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); continue; } - if (prop.NameEquals("item_id"u8)) + if (prop.NameEquals("sequence_number"u8)) { - itemId = prop.Value.GetString(); + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("output_index"u8)) @@ -84,20 +87,27 @@ internal static StreamingResponseFileSearchCallCompletedUpdate DeserializeStream outputIndex = prop.Value.GetInt32(); continue; } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseFileSearchCallCompletedUpdate(@type, additionalBinaryDataProperties, itemId, outputIndex); + return new StreamingResponseFileSearchCallCompletedUpdate(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseFileSearchCallCompletedUpdate)} does not support writing '{options.Format}' format."); } @@ -105,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseFileSearchCallCompletedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseFileSearchCallCompletedUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +132,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseFileSearchCallCompletedUpdate streamingResponseFileSearchCallCompletedUpdate) - { - if (streamingResponseFileSearchCallCompletedUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseFileSearchCallCompletedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseFileSearchCallCompletedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseFileSearchCallCompletedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseFileSearchCallCompletedUpdate.cs b/src/Generated/Models/StreamingResponseFileSearchCallCompletedUpdate.cs index e9cad5a96..82a895c2c 100644 --- a/src/Generated/Models/StreamingResponseFileSearchCallCompletedUpdate.cs +++ b/src/Generated/Models/StreamingResponseFileSearchCallCompletedUpdate.cs @@ -9,20 +9,20 @@ namespace OpenAI.Responses { public partial class StreamingResponseFileSearchCallCompletedUpdate : StreamingResponseUpdate { - internal StreamingResponseFileSearchCallCompletedUpdate(string itemId, int outputIndex) : base(InternalResponsesResponseStreamEventType.ResponseFileSearchCallCompleted) + internal StreamingResponseFileSearchCallCompletedUpdate(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseFileSearchCallCompleted, sequenceNumber) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - internal StreamingResponseFileSearchCallCompletedUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseFileSearchCallCompletedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - public string ItemId { get; } - public int OutputIndex { get; } + + public string ItemId { get; } } } diff --git a/src/Generated/Models/StreamingResponseFileSearchCallInProgressUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseFileSearchCallInProgressUpdate.Serialization.cs index a16632eec..f634ac8af 100644 --- a/src/Generated/Models/StreamingResponseFileSearchCallInProgressUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseFileSearchCallInProgressUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseFileSearchCallInProgressUpdate : IJsonModel { - internal StreamingResponseFileSearchCallInProgressUpdate() + internal StreamingResponseFileSearchCallInProgressUpdate() : this(InternalResponseStreamEventType.ResponseFileSearchCallInProgress, default, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,20 +33,21 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(StreamingResponseFileSearchCallInProgressUpdate)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) { writer.WritePropertyName("output_index"u8); writer.WriteNumberValue(OutputIndex); } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } } StreamingResponseFileSearchCallInProgressUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseFileSearchCallInProgressUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,20 +65,21 @@ internal static StreamingResponseFileSearchCallInProgressUpdate DeserializeStrea { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; int outputIndex = default; + string itemId = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); continue; } - if (prop.NameEquals("item_id"u8)) + if (prop.NameEquals("sequence_number"u8)) { - itemId = prop.Value.GetString(); + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("output_index"u8)) @@ -84,20 +87,27 @@ internal static StreamingResponseFileSearchCallInProgressUpdate DeserializeStrea outputIndex = prop.Value.GetInt32(); continue; } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseFileSearchCallInProgressUpdate(@type, additionalBinaryDataProperties, itemId, outputIndex); + return new StreamingResponseFileSearchCallInProgressUpdate(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseFileSearchCallInProgressUpdate)} does not support writing '{options.Format}' format."); } @@ -105,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseFileSearchCallInProgressUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseFileSearchCallInProgressUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +132,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseFileSearchCallInProgressUpdate streamingResponseFileSearchCallInProgressUpdate) - { - if (streamingResponseFileSearchCallInProgressUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseFileSearchCallInProgressUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseFileSearchCallInProgressUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseFileSearchCallInProgressUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseFileSearchCallInProgressUpdate.cs b/src/Generated/Models/StreamingResponseFileSearchCallInProgressUpdate.cs index 7f14a5164..0bc098fbc 100644 --- a/src/Generated/Models/StreamingResponseFileSearchCallInProgressUpdate.cs +++ b/src/Generated/Models/StreamingResponseFileSearchCallInProgressUpdate.cs @@ -9,20 +9,20 @@ namespace OpenAI.Responses { public partial class StreamingResponseFileSearchCallInProgressUpdate : StreamingResponseUpdate { - internal StreamingResponseFileSearchCallInProgressUpdate(string itemId, int outputIndex) : base(InternalResponsesResponseStreamEventType.ResponseFileSearchCallInProgress) + internal StreamingResponseFileSearchCallInProgressUpdate(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseFileSearchCallInProgress, sequenceNumber) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - internal StreamingResponseFileSearchCallInProgressUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseFileSearchCallInProgressUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - public string ItemId { get; } - public int OutputIndex { get; } + + public string ItemId { get; } } } diff --git a/src/Generated/Models/StreamingResponseFileSearchCallSearchingUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseFileSearchCallSearchingUpdate.Serialization.cs index 3ea451a2e..c09a2747e 100644 --- a/src/Generated/Models/StreamingResponseFileSearchCallSearchingUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseFileSearchCallSearchingUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseFileSearchCallSearchingUpdate : IJsonModel { - internal StreamingResponseFileSearchCallSearchingUpdate() + internal StreamingResponseFileSearchCallSearchingUpdate() : this(InternalResponseStreamEventType.ResponseFileSearchCallSearching, default, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,20 +33,21 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(StreamingResponseFileSearchCallSearchingUpdate)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) { writer.WritePropertyName("output_index"u8); writer.WriteNumberValue(OutputIndex); } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } } StreamingResponseFileSearchCallSearchingUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseFileSearchCallSearchingUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,20 +65,21 @@ internal static StreamingResponseFileSearchCallSearchingUpdate DeserializeStream { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; int outputIndex = default; + string itemId = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); continue; } - if (prop.NameEquals("item_id"u8)) + if (prop.NameEquals("sequence_number"u8)) { - itemId = prop.Value.GetString(); + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("output_index"u8)) @@ -84,20 +87,27 @@ internal static StreamingResponseFileSearchCallSearchingUpdate DeserializeStream outputIndex = prop.Value.GetInt32(); continue; } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseFileSearchCallSearchingUpdate(@type, additionalBinaryDataProperties, itemId, outputIndex); + return new StreamingResponseFileSearchCallSearchingUpdate(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseFileSearchCallSearchingUpdate)} does not support writing '{options.Format}' format."); } @@ -105,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseFileSearchCallSearchingUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseFileSearchCallSearchingUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +132,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseFileSearchCallSearchingUpdate streamingResponseFileSearchCallSearchingUpdate) - { - if (streamingResponseFileSearchCallSearchingUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseFileSearchCallSearchingUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseFileSearchCallSearchingUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseFileSearchCallSearchingUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseFileSearchCallSearchingUpdate.cs b/src/Generated/Models/StreamingResponseFileSearchCallSearchingUpdate.cs index 83ca499d6..b12373e46 100644 --- a/src/Generated/Models/StreamingResponseFileSearchCallSearchingUpdate.cs +++ b/src/Generated/Models/StreamingResponseFileSearchCallSearchingUpdate.cs @@ -9,20 +9,20 @@ namespace OpenAI.Responses { public partial class StreamingResponseFileSearchCallSearchingUpdate : StreamingResponseUpdate { - internal StreamingResponseFileSearchCallSearchingUpdate(string itemId, int outputIndex) : base(InternalResponsesResponseStreamEventType.ResponseFileSearchCallSearching) + internal StreamingResponseFileSearchCallSearchingUpdate(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseFileSearchCallSearching, sequenceNumber) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - internal StreamingResponseFileSearchCallSearchingUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseFileSearchCallSearchingUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - public string ItemId { get; } - public int OutputIndex { get; } + + public string ItemId { get; } } } diff --git a/src/Generated/Models/StreamingResponseFunctionCallArgumentsDeltaUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseFunctionCallArgumentsDeltaUpdate.Serialization.cs index b862b1082..8e0ccead1 100644 --- a/src/Generated/Models/StreamingResponseFunctionCallArgumentsDeltaUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseFunctionCallArgumentsDeltaUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseFunctionCallArgumentsDeltaUpdate : IJsonModel { - internal StreamingResponseFunctionCallArgumentsDeltaUpdate() + internal StreamingResponseFunctionCallArgumentsDeltaUpdate() : this(InternalResponseStreamEventType.ResponseFunctionCallArgumentsDelta, default, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Jso writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseFunctionCallArgumentsDeltaUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseFunctionCallArgumentsDeltaUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,7 +70,8 @@ internal static StreamingResponseFunctionCallArgumentsDeltaUpdate DeserializeStr { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int outputIndex = default; @@ -77,7 +80,12 @@ internal static StreamingResponseFunctionCallArgumentsDeltaUpdate DeserializeStr { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("item_id"u8)) @@ -95,20 +103,28 @@ internal static StreamingResponseFunctionCallArgumentsDeltaUpdate DeserializeStr delta = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseFunctionCallArgumentsDeltaUpdate(@type, additionalBinaryDataProperties, itemId, outputIndex, delta); + return new StreamingResponseFunctionCallArgumentsDeltaUpdate( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + delta); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseFunctionCallArgumentsDeltaUpdate)} does not support writing '{options.Format}' format."); } @@ -116,6 +132,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseFunctionCallArgumentsDeltaUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseFunctionCallArgumentsDeltaUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -132,21 +149,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseFunctionCallArgumentsDeltaUpdate streamingResponseFunctionCallArgumentsDeltaUpdate) - { - if (streamingResponseFunctionCallArgumentsDeltaUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseFunctionCallArgumentsDeltaUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseFunctionCallArgumentsDeltaUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseFunctionCallArgumentsDeltaUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseFunctionCallArgumentsDeltaUpdate.cs b/src/Generated/Models/StreamingResponseFunctionCallArgumentsDeltaUpdate.cs index 197e40a5e..040e4a877 100644 --- a/src/Generated/Models/StreamingResponseFunctionCallArgumentsDeltaUpdate.cs +++ b/src/Generated/Models/StreamingResponseFunctionCallArgumentsDeltaUpdate.cs @@ -9,14 +9,14 @@ namespace OpenAI.Responses { public partial class StreamingResponseFunctionCallArgumentsDeltaUpdate : StreamingResponseUpdate { - internal StreamingResponseFunctionCallArgumentsDeltaUpdate(string itemId, int outputIndex, string delta) : base(InternalResponsesResponseStreamEventType.ResponseFunctionCallArgumentsDelta) + internal StreamingResponseFunctionCallArgumentsDeltaUpdate(int sequenceNumber, string itemId, int outputIndex, string delta) : base(InternalResponseStreamEventType.ResponseFunctionCallArgumentsDelta, sequenceNumber) { ItemId = itemId; OutputIndex = outputIndex; Delta = delta; } - internal StreamingResponseFunctionCallArgumentsDeltaUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, string delta) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseFunctionCallArgumentsDeltaUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, string delta) : base(kind, sequenceNumber, additionalBinaryDataProperties) { ItemId = itemId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/StreamingResponseFunctionCallArgumentsDoneUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseFunctionCallArgumentsDoneUpdate.Serialization.cs index e8e2981da..edcbbe21b 100644 --- a/src/Generated/Models/StreamingResponseFunctionCallArgumentsDoneUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseFunctionCallArgumentsDoneUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseFunctionCallArgumentsDoneUpdate : IJsonModel { - internal StreamingResponseFunctionCallArgumentsDoneUpdate() + internal StreamingResponseFunctionCallArgumentsDoneUpdate() : this(InternalResponseStreamEventType.ResponseFunctionCallArgumentsDone, default, null, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8Json writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -51,6 +52,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseFunctionCallArgumentsDoneUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseFunctionCallArgumentsDoneUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,7 +70,8 @@ internal static StreamingResponseFunctionCallArgumentsDoneUpdate DeserializeStre { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int outputIndex = default; @@ -77,7 +80,12 @@ internal static StreamingResponseFunctionCallArgumentsDoneUpdate DeserializeStre { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("item_id"u8)) @@ -95,20 +103,28 @@ internal static StreamingResponseFunctionCallArgumentsDoneUpdate DeserializeStre arguments = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseFunctionCallArgumentsDoneUpdate(@type, additionalBinaryDataProperties, itemId, outputIndex, arguments); + return new StreamingResponseFunctionCallArgumentsDoneUpdate( + kind, + sequenceNumber, + additionalBinaryDataProperties, + itemId, + outputIndex, + arguments); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseFunctionCallArgumentsDoneUpdate)} does not support writing '{options.Format}' format."); } @@ -116,6 +132,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseFunctionCallArgumentsDoneUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseFunctionCallArgumentsDoneUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -132,21 +149,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseFunctionCallArgumentsDoneUpdate streamingResponseFunctionCallArgumentsDoneUpdate) - { - if (streamingResponseFunctionCallArgumentsDoneUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseFunctionCallArgumentsDoneUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseFunctionCallArgumentsDoneUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseFunctionCallArgumentsDoneUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseFunctionCallArgumentsDoneUpdate.cs b/src/Generated/Models/StreamingResponseFunctionCallArgumentsDoneUpdate.cs index 142b980b8..30799029a 100644 --- a/src/Generated/Models/StreamingResponseFunctionCallArgumentsDoneUpdate.cs +++ b/src/Generated/Models/StreamingResponseFunctionCallArgumentsDoneUpdate.cs @@ -9,14 +9,14 @@ namespace OpenAI.Responses { public partial class StreamingResponseFunctionCallArgumentsDoneUpdate : StreamingResponseUpdate { - internal StreamingResponseFunctionCallArgumentsDoneUpdate(string itemId, int outputIndex, string arguments) : base(InternalResponsesResponseStreamEventType.ResponseFunctionCallArgumentsDone) + internal StreamingResponseFunctionCallArgumentsDoneUpdate(int sequenceNumber, string itemId, int outputIndex, string arguments) : base(InternalResponseStreamEventType.ResponseFunctionCallArgumentsDone, sequenceNumber) { ItemId = itemId; OutputIndex = outputIndex; Arguments = arguments; } - internal StreamingResponseFunctionCallArgumentsDoneUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, string arguments) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseFunctionCallArgumentsDoneUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, string arguments) : base(kind, sequenceNumber, additionalBinaryDataProperties) { ItemId = itemId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/StreamingResponseInProgressUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseInProgressUpdate.Serialization.cs index c035c55dc..22f4408c4 100644 --- a/src/Generated/Models/StreamingResponseInProgressUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseInProgressUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseInProgressUpdate : IJsonModel { - internal StreamingResponseInProgressUpdate() + internal StreamingResponseInProgressUpdate() : this(InternalResponseStreamEventType.ResponseInProgress, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseInProgressUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseInProgressUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,20 @@ internal static StreamingResponseInProgressUpdate DeserializeStreamingResponseIn { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); OpenAIResponse response = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("response"u8)) @@ -73,20 +81,22 @@ internal static StreamingResponseInProgressUpdate DeserializeStreamingResponseIn response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseInProgressUpdate(@type, additionalBinaryDataProperties, response); + return new StreamingResponseInProgressUpdate(kind, sequenceNumber, additionalBinaryDataProperties, response); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseInProgressUpdate)} does not support writing '{options.Format}' format."); } @@ -94,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseInProgressUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseInProgressUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +121,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseInProgressUpdate streamingResponseInProgressUpdate) - { - if (streamingResponseInProgressUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseInProgressUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseInProgressUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseInProgressUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseInProgressUpdate.cs b/src/Generated/Models/StreamingResponseInProgressUpdate.cs index 711f6b2f5..13f08c396 100644 --- a/src/Generated/Models/StreamingResponseInProgressUpdate.cs +++ b/src/Generated/Models/StreamingResponseInProgressUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.Responses { public partial class StreamingResponseInProgressUpdate : StreamingResponseUpdate { - internal StreamingResponseInProgressUpdate(OpenAIResponse response) : base(InternalResponsesResponseStreamEventType.ResponseInProgress) + internal StreamingResponseInProgressUpdate(int sequenceNumber, OpenAIResponse response) : base(InternalResponseStreamEventType.ResponseInProgress, sequenceNumber) { Response = response; } - internal StreamingResponseInProgressUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseInProgressUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, sequenceNumber, additionalBinaryDataProperties) { Response = response; } diff --git a/src/Generated/Models/StreamingResponseIncompleteUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseIncompleteUpdate.Serialization.cs index d87a34af0..82b9efdfa 100644 --- a/src/Generated/Models/StreamingResponseIncompleteUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseIncompleteUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseIncompleteUpdate : IJsonModel { - internal StreamingResponseIncompleteUpdate() + internal StreamingResponseIncompleteUpdate() : this(InternalResponseStreamEventType.ResponseIncomplete, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseIncompleteUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseIncompleteUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,14 +60,20 @@ internal static StreamingResponseIncompleteUpdate DeserializeStreamingResponseIn { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); OpenAIResponse response = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("response"u8)) @@ -73,20 +81,22 @@ internal static StreamingResponseIncompleteUpdate DeserializeStreamingResponseIn response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseIncompleteUpdate(@type, additionalBinaryDataProperties, response); + return new StreamingResponseIncompleteUpdate(kind, sequenceNumber, additionalBinaryDataProperties, response); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseIncompleteUpdate)} does not support writing '{options.Format}' format."); } @@ -94,6 +104,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseIncompleteUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseIncompleteUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +121,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseIncompleteUpdate streamingResponseIncompleteUpdate) - { - if (streamingResponseIncompleteUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseIncompleteUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseIncompleteUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseIncompleteUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseIncompleteUpdate.cs b/src/Generated/Models/StreamingResponseIncompleteUpdate.cs index 8d23427fc..170047214 100644 --- a/src/Generated/Models/StreamingResponseIncompleteUpdate.cs +++ b/src/Generated/Models/StreamingResponseIncompleteUpdate.cs @@ -9,12 +9,12 @@ namespace OpenAI.Responses { public partial class StreamingResponseIncompleteUpdate : StreamingResponseUpdate { - internal StreamingResponseIncompleteUpdate(OpenAIResponse response) : base(InternalResponsesResponseStreamEventType.ResponseIncomplete) + internal StreamingResponseIncompleteUpdate(int sequenceNumber, OpenAIResponse response) : base(InternalResponseStreamEventType.ResponseIncomplete, sequenceNumber) { Response = response; } - internal StreamingResponseIncompleteUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseIncompleteUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, sequenceNumber, additionalBinaryDataProperties) { Response = response; } diff --git a/src/Generated/Models/StreamingResponseOutputItemAddedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseOutputItemAddedUpdate.Serialization.cs index 440402d42..39c16d2cb 100644 --- a/src/Generated/Models/StreamingResponseOutputItemAddedUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseOutputItemAddedUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseOutputItemAddedUpdate : IJsonModel { - internal StreamingResponseOutputItemAddedUpdate() + internal StreamingResponseOutputItemAddedUpdate() : this(InternalResponseStreamEventType.ResponseOutputItemAdded, default, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseOutputItemAddedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseOutputItemAddedUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,7 +65,8 @@ internal static StreamingResponseOutputItemAddedUpdate DeserializeStreamingRespo { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int outputIndex = default; ResponseItem item = default; @@ -71,7 +74,12 @@ internal static StreamingResponseOutputItemAddedUpdate DeserializeStreamingRespo { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("output_index"u8)) @@ -84,20 +92,22 @@ internal static StreamingResponseOutputItemAddedUpdate DeserializeStreamingRespo item = ResponseItem.DeserializeResponseItem(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseOutputItemAddedUpdate(@type, additionalBinaryDataProperties, outputIndex, item); + return new StreamingResponseOutputItemAddedUpdate(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, item); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseOutputItemAddedUpdate)} does not support writing '{options.Format}' format."); } @@ -105,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseOutputItemAddedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseOutputItemAddedUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +132,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseOutputItemAddedUpdate streamingResponseOutputItemAddedUpdate) - { - if (streamingResponseOutputItemAddedUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseOutputItemAddedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseOutputItemAddedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseOutputItemAddedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseOutputItemAddedUpdate.cs b/src/Generated/Models/StreamingResponseOutputItemAddedUpdate.cs index d782a381a..415e8856a 100644 --- a/src/Generated/Models/StreamingResponseOutputItemAddedUpdate.cs +++ b/src/Generated/Models/StreamingResponseOutputItemAddedUpdate.cs @@ -9,13 +9,13 @@ namespace OpenAI.Responses { public partial class StreamingResponseOutputItemAddedUpdate : StreamingResponseUpdate { - internal StreamingResponseOutputItemAddedUpdate(int outputIndex, ResponseItem item) : base(InternalResponsesResponseStreamEventType.ResponseOutputItemAdded) + internal StreamingResponseOutputItemAddedUpdate(int sequenceNumber, int outputIndex, ResponseItem item) : base(InternalResponseStreamEventType.ResponseOutputItemAdded, sequenceNumber) { OutputIndex = outputIndex; Item = item; } - internal StreamingResponseOutputItemAddedUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, int outputIndex, ResponseItem item) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseOutputItemAddedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, ResponseItem item) : base(kind, sequenceNumber, additionalBinaryDataProperties) { OutputIndex = outputIndex; Item = item; diff --git a/src/Generated/Models/StreamingResponseOutputItemDoneUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseOutputItemDoneUpdate.Serialization.cs index cbee82b90..89e415d97 100644 --- a/src/Generated/Models/StreamingResponseOutputItemDoneUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseOutputItemDoneUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseOutputItemDoneUpdate : IJsonModel { - internal StreamingResponseOutputItemDoneUpdate() + internal StreamingResponseOutputItemDoneUpdate() : this(InternalResponseStreamEventType.ResponseOutputItemDone, default, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseOutputItemDoneUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseOutputItemDoneUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,7 +65,8 @@ internal static StreamingResponseOutputItemDoneUpdate DeserializeStreamingRespon { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); int outputIndex = default; ResponseItem item = default; @@ -71,7 +74,12 @@ internal static StreamingResponseOutputItemDoneUpdate DeserializeStreamingRespon { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("output_index"u8)) @@ -84,20 +92,22 @@ internal static StreamingResponseOutputItemDoneUpdate DeserializeStreamingRespon item = ResponseItem.DeserializeResponseItem(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseOutputItemDoneUpdate(@type, additionalBinaryDataProperties, outputIndex, item); + return new StreamingResponseOutputItemDoneUpdate(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, item); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseOutputItemDoneUpdate)} does not support writing '{options.Format}' format."); } @@ -105,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseOutputItemDoneUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseOutputItemDoneUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +132,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseOutputItemDoneUpdate streamingResponseOutputItemDoneUpdate) - { - if (streamingResponseOutputItemDoneUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseOutputItemDoneUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseOutputItemDoneUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseOutputItemDoneUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseOutputItemDoneUpdate.cs b/src/Generated/Models/StreamingResponseOutputItemDoneUpdate.cs index 978126a87..14c99c6ca 100644 --- a/src/Generated/Models/StreamingResponseOutputItemDoneUpdate.cs +++ b/src/Generated/Models/StreamingResponseOutputItemDoneUpdate.cs @@ -9,13 +9,13 @@ namespace OpenAI.Responses { public partial class StreamingResponseOutputItemDoneUpdate : StreamingResponseUpdate { - internal StreamingResponseOutputItemDoneUpdate(int outputIndex, ResponseItem item) : base(InternalResponsesResponseStreamEventType.ResponseOutputItemDone) + internal StreamingResponseOutputItemDoneUpdate(int sequenceNumber, int outputIndex, ResponseItem item) : base(InternalResponseStreamEventType.ResponseOutputItemDone, sequenceNumber) { OutputIndex = outputIndex; Item = item; } - internal StreamingResponseOutputItemDoneUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, int outputIndex, ResponseItem item) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseOutputItemDoneUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, ResponseItem item) : base(kind, sequenceNumber, additionalBinaryDataProperties) { OutputIndex = outputIndex; Item = item; diff --git a/src/Generated/Models/StreamingResponseOutputTextDeltaUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseOutputTextDeltaUpdate.Serialization.cs index ccb4552e1..1df4f7ad8 100644 --- a/src/Generated/Models/StreamingResponseOutputTextDeltaUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseOutputTextDeltaUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseOutputTextDeltaUpdate : IJsonModel { - internal StreamingResponseOutputTextDeltaUpdate() + internal StreamingResponseOutputTextDeltaUpdate() : this(InternalResponseStreamEventType.ResponseOutputTextDelta, default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter wri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseOutputTextDeltaUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseOutputTextDeltaUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,7 +75,8 @@ internal static StreamingResponseOutputTextDeltaUpdate DeserializeStreamingRespo { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int outputIndex = default; @@ -83,7 +86,12 @@ internal static StreamingResponseOutputTextDeltaUpdate DeserializeStreamingRespo { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("item_id"u8)) @@ -106,10 +114,12 @@ internal static StreamingResponseOutputTextDeltaUpdate DeserializeStreamingRespo delta = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingResponseOutputTextDeltaUpdate( - @type, + kind, + sequenceNumber, additionalBinaryDataProperties, itemId, outputIndex, @@ -119,13 +129,14 @@ internal static StreamingResponseOutputTextDeltaUpdate DeserializeStreamingRespo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseOutputTextDeltaUpdate)} does not support writing '{options.Format}' format."); } @@ -133,6 +144,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseOutputTextDeltaUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseOutputTextDeltaUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,21 +161,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseOutputTextDeltaUpdate streamingResponseOutputTextDeltaUpdate) - { - if (streamingResponseOutputTextDeltaUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseOutputTextDeltaUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseOutputTextDeltaUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseOutputTextDeltaUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseOutputTextDeltaUpdate.cs b/src/Generated/Models/StreamingResponseOutputTextDeltaUpdate.cs index 1c1cce7aa..07408f233 100644 --- a/src/Generated/Models/StreamingResponseOutputTextDeltaUpdate.cs +++ b/src/Generated/Models/StreamingResponseOutputTextDeltaUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseOutputTextDeltaUpdate : StreamingResponseUpdate { - internal StreamingResponseOutputTextDeltaUpdate(string itemId, int outputIndex, int contentIndex, string delta) : base(InternalResponsesResponseStreamEventType.ResponseOutputTextDelta) + internal StreamingResponseOutputTextDeltaUpdate(int sequenceNumber, string itemId, int outputIndex, int contentIndex, string delta) : base(InternalResponseStreamEventType.ResponseOutputTextDelta, sequenceNumber) { ItemId = itemId; OutputIndex = outputIndex; @@ -17,7 +17,7 @@ internal StreamingResponseOutputTextDeltaUpdate(string itemId, int outputIndex, Delta = delta; } - internal StreamingResponseOutputTextDeltaUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string delta) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseOutputTextDeltaUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string delta) : base(kind, sequenceNumber, additionalBinaryDataProperties) { ItemId = itemId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/StreamingResponseOutputTextDoneUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseOutputTextDoneUpdate.Serialization.cs index 29fa49431..fc17073c8 100644 --- a/src/Generated/Models/StreamingResponseOutputTextDoneUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseOutputTextDoneUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseOutputTextDoneUpdate : IJsonModel { - internal StreamingResponseOutputTextDoneUpdate() + internal StreamingResponseOutputTextDoneUpdate() : this(InternalResponseStreamEventType.ResponseOutputTextDone, default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writ writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseOutputTextDoneUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseOutputTextDoneUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,7 +75,8 @@ internal static StreamingResponseOutputTextDoneUpdate DeserializeStreamingRespon { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int outputIndex = default; @@ -83,7 +86,12 @@ internal static StreamingResponseOutputTextDoneUpdate DeserializeStreamingRespon { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("item_id"u8)) @@ -106,10 +114,12 @@ internal static StreamingResponseOutputTextDoneUpdate DeserializeStreamingRespon text = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingResponseOutputTextDoneUpdate( - @type, + kind, + sequenceNumber, additionalBinaryDataProperties, itemId, outputIndex, @@ -119,13 +129,14 @@ internal static StreamingResponseOutputTextDoneUpdate DeserializeStreamingRespon BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseOutputTextDoneUpdate)} does not support writing '{options.Format}' format."); } @@ -133,6 +144,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseOutputTextDoneUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseOutputTextDoneUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,21 +161,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseOutputTextDoneUpdate streamingResponseOutputTextDoneUpdate) - { - if (streamingResponseOutputTextDoneUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseOutputTextDoneUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseOutputTextDoneUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseOutputTextDoneUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseOutputTextDoneUpdate.cs b/src/Generated/Models/StreamingResponseOutputTextDoneUpdate.cs index fd09cc55f..2298f2c7f 100644 --- a/src/Generated/Models/StreamingResponseOutputTextDoneUpdate.cs +++ b/src/Generated/Models/StreamingResponseOutputTextDoneUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseOutputTextDoneUpdate : StreamingResponseUpdate { - internal StreamingResponseOutputTextDoneUpdate(string itemId, int outputIndex, int contentIndex, string text) : base(InternalResponsesResponseStreamEventType.ResponseOutputTextDone) + internal StreamingResponseOutputTextDoneUpdate(int sequenceNumber, string itemId, int outputIndex, int contentIndex, string text) : base(InternalResponseStreamEventType.ResponseOutputTextDone, sequenceNumber) { ItemId = itemId; OutputIndex = outputIndex; @@ -17,7 +17,7 @@ internal StreamingResponseOutputTextDoneUpdate(string itemId, int outputIndex, i Text = text; } - internal StreamingResponseOutputTextDoneUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string text) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseOutputTextDoneUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string text) : base(kind, sequenceNumber, additionalBinaryDataProperties) { ItemId = itemId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/StreamingResponseQueuedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseQueuedUpdate.Serialization.cs new file mode 100644 index 000000000..54e3745c4 --- /dev/null +++ b/src/Generated/Models/StreamingResponseQueuedUpdate.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + public partial class StreamingResponseQueuedUpdate : IJsonModel + { + internal StreamingResponseQueuedUpdate() : this(InternalResponseStreamEventType.ResponseQueued, default, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingResponseQueuedUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("response") != true) + { + writer.WritePropertyName("response"u8); + writer.WriteObjectValue(Response, options); + } + } + + StreamingResponseQueuedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseQueuedUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingResponseQueuedUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeStreamingResponseQueuedUpdate(document.RootElement, options); + } + + internal static StreamingResponseQueuedUpdate DeserializeStreamingResponseQueuedUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + OpenAIResponse response = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + if (prop.NameEquals("response"u8)) + { + response = OpenAIResponse.DeserializeOpenAIResponse(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new StreamingResponseQueuedUpdate(kind, sequenceNumber, additionalBinaryDataProperties, response); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(StreamingResponseQueuedUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingResponseQueuedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseQueuedUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeStreamingResponseQueuedUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(StreamingResponseQueuedUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/StreamingResponseQueuedUpdate.cs b/src/Generated/Models/StreamingResponseQueuedUpdate.cs new file mode 100644 index 000000000..d8c8a12e2 --- /dev/null +++ b/src/Generated/Models/StreamingResponseQueuedUpdate.cs @@ -0,0 +1,24 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class StreamingResponseQueuedUpdate : StreamingResponseUpdate + { + internal StreamingResponseQueuedUpdate(int sequenceNumber, OpenAIResponse response) : base(InternalResponseStreamEventType.ResponseQueued, sequenceNumber) + { + Response = response; + } + + internal StreamingResponseQueuedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, OpenAIResponse response) : base(kind, sequenceNumber, additionalBinaryDataProperties) + { + Response = response; + } + + public OpenAIResponse Response { get; } + } +} diff --git a/src/Generated/Models/StreamingResponseRefusalDeltaUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseRefusalDeltaUpdate.Serialization.cs index 0dab5d7c3..7d5f6fb47 100644 --- a/src/Generated/Models/StreamingResponseRefusalDeltaUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseRefusalDeltaUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseRefusalDeltaUpdate : IJsonModel { - internal StreamingResponseRefusalDeltaUpdate() + internal StreamingResponseRefusalDeltaUpdate() : this(InternalResponseStreamEventType.ResponseRefusalDelta, default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseRefusalDeltaUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseRefusalDeltaUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,7 +75,8 @@ internal static StreamingResponseRefusalDeltaUpdate DeserializeStreamingResponse { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int outputIndex = default; @@ -83,7 +86,12 @@ internal static StreamingResponseRefusalDeltaUpdate DeserializeStreamingResponse { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("item_id"u8)) @@ -106,10 +114,12 @@ internal static StreamingResponseRefusalDeltaUpdate DeserializeStreamingResponse delta = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingResponseRefusalDeltaUpdate( - @type, + kind, + sequenceNumber, additionalBinaryDataProperties, itemId, outputIndex, @@ -119,13 +129,14 @@ internal static StreamingResponseRefusalDeltaUpdate DeserializeStreamingResponse BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseRefusalDeltaUpdate)} does not support writing '{options.Format}' format."); } @@ -133,6 +144,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseRefusalDeltaUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseRefusalDeltaUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,21 +161,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseRefusalDeltaUpdate streamingResponseRefusalDeltaUpdate) - { - if (streamingResponseRefusalDeltaUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseRefusalDeltaUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseRefusalDeltaUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseRefusalDeltaUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseRefusalDeltaUpdate.cs b/src/Generated/Models/StreamingResponseRefusalDeltaUpdate.cs index 887e685e1..ff5152852 100644 --- a/src/Generated/Models/StreamingResponseRefusalDeltaUpdate.cs +++ b/src/Generated/Models/StreamingResponseRefusalDeltaUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseRefusalDeltaUpdate : StreamingResponseUpdate { - internal StreamingResponseRefusalDeltaUpdate(string itemId, int outputIndex, int contentIndex, string delta) : base(InternalResponsesResponseStreamEventType.ResponseRefusalDelta) + internal StreamingResponseRefusalDeltaUpdate(int sequenceNumber, string itemId, int outputIndex, int contentIndex, string delta) : base(InternalResponseStreamEventType.ResponseRefusalDelta, sequenceNumber) { ItemId = itemId; OutputIndex = outputIndex; @@ -17,7 +17,7 @@ internal StreamingResponseRefusalDeltaUpdate(string itemId, int outputIndex, int Delta = delta; } - internal StreamingResponseRefusalDeltaUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string delta) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseRefusalDeltaUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string delta) : base(kind, sequenceNumber, additionalBinaryDataProperties) { ItemId = itemId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/StreamingResponseRefusalDoneUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseRefusalDoneUpdate.Serialization.cs index 1cbfe17a6..1ff78a4dd 100644 --- a/src/Generated/Models/StreamingResponseRefusalDoneUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseRefusalDoneUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseRefusalDoneUpdate : IJsonModel { - internal StreamingResponseRefusalDoneUpdate() + internal StreamingResponseRefusalDoneUpdate() : this(InternalResponseStreamEventType.ResponseRefusalDone, default, null, null, default, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri StreamingResponseRefusalDoneUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseRefusalDoneUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,7 +75,8 @@ internal static StreamingResponseRefusalDoneUpdate DeserializeStreamingResponseR { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); string itemId = default; int outputIndex = default; @@ -83,7 +86,12 @@ internal static StreamingResponseRefusalDoneUpdate DeserializeStreamingResponseR { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("item_id"u8)) @@ -106,10 +114,12 @@ internal static StreamingResponseRefusalDoneUpdate DeserializeStreamingResponseR refusal = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new StreamingResponseRefusalDoneUpdate( - @type, + kind, + sequenceNumber, additionalBinaryDataProperties, itemId, outputIndex, @@ -119,13 +129,14 @@ internal static StreamingResponseRefusalDoneUpdate DeserializeStreamingResponseR BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseRefusalDoneUpdate)} does not support writing '{options.Format}' format."); } @@ -133,6 +144,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseRefusalDoneUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseRefusalDoneUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,21 +161,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseRefusalDoneUpdate streamingResponseRefusalDoneUpdate) - { - if (streamingResponseRefusalDoneUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseRefusalDoneUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseRefusalDoneUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseRefusalDoneUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseRefusalDoneUpdate.cs b/src/Generated/Models/StreamingResponseRefusalDoneUpdate.cs index 6fa0047a9..1ef1fb020 100644 --- a/src/Generated/Models/StreamingResponseRefusalDoneUpdate.cs +++ b/src/Generated/Models/StreamingResponseRefusalDoneUpdate.cs @@ -9,7 +9,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseRefusalDoneUpdate : StreamingResponseUpdate { - internal StreamingResponseRefusalDoneUpdate(string itemId, int outputIndex, int contentIndex, string refusal) : base(InternalResponsesResponseStreamEventType.ResponseRefusalDone) + internal StreamingResponseRefusalDoneUpdate(int sequenceNumber, string itemId, int outputIndex, int contentIndex, string refusal) : base(InternalResponseStreamEventType.ResponseRefusalDone, sequenceNumber) { ItemId = itemId; OutputIndex = outputIndex; @@ -17,7 +17,7 @@ internal StreamingResponseRefusalDoneUpdate(string itemId, int outputIndex, int Refusal = refusal; } - internal StreamingResponseRefusalDoneUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string refusal) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseRefusalDoneUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, string refusal) : base(kind, sequenceNumber, additionalBinaryDataProperties) { ItemId = itemId; OutputIndex = outputIndex; diff --git a/src/Generated/Models/StreamingResponseTextAnnotationAddedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseTextAnnotationAddedUpdate.Serialization.cs deleted file mode 100644 index 603c1d471..000000000 --- a/src/Generated/Models/StreamingResponseTextAnnotationAddedUpdate.Serialization.cs +++ /dev/null @@ -1,169 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - public partial class StreamingResponseTextAnnotationAddedUpdate : IJsonModel - { - internal StreamingResponseTextAnnotationAddedUpdate() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationAddedUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } - if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) - { - writer.WritePropertyName("output_index"u8); - writer.WriteNumberValue(OutputIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("content_index") != true) - { - writer.WritePropertyName("content_index"u8); - writer.WriteNumberValue(ContentIndex); - } - if (_additionalBinaryDataProperties?.ContainsKey("annotation") != true) - { - writer.WritePropertyName("annotation"u8); - writer.WriteObjectValue(Annotation, options); - } - } - - StreamingResponseTextAnnotationAddedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseTextAnnotationAddedUpdate)JsonModelCreateCore(ref reader, options); - - protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationAddedUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeStreamingResponseTextAnnotationAddedUpdate(document.RootElement, options); - } - - internal static StreamingResponseTextAnnotationAddedUpdate DeserializeStreamingResponseTextAnnotationAddedUpdate(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesResponseStreamEventType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; - int outputIndex = default; - int contentIndex = default; - ResponseMessageAnnotation annotation = default; - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); - continue; - } - if (prop.NameEquals("item_id"u8)) - { - itemId = prop.Value.GetString(); - continue; - } - if (prop.NameEquals("output_index"u8)) - { - outputIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("content_index"u8)) - { - contentIndex = prop.Value.GetInt32(); - continue; - } - if (prop.NameEquals("annotation"u8)) - { - annotation = ResponseMessageAnnotation.DeserializeResponseMessageAnnotation(prop.Value, options); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new StreamingResponseTextAnnotationAddedUpdate( - @type, - additionalBinaryDataProperties, - itemId, - outputIndex, - contentIndex, - annotation); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationAddedUpdate)} does not support writing '{options.Format}' format."); - } - } - - StreamingResponseTextAnnotationAddedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseTextAnnotationAddedUpdate)PersistableModelCreateCore(data, options); - - protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeStreamingResponseTextAnnotationAddedUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(StreamingResponseTextAnnotationAddedUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseTextAnnotationAddedUpdate streamingResponseTextAnnotationAddedUpdate) - { - if (streamingResponseTextAnnotationAddedUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseTextAnnotationAddedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseTextAnnotationAddedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseTextAnnotationAddedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/StreamingResponseTextAnnotationAddedUpdate.cs b/src/Generated/Models/StreamingResponseTextAnnotationAddedUpdate.cs deleted file mode 100644 index 6177ff79f..000000000 --- a/src/Generated/Models/StreamingResponseTextAnnotationAddedUpdate.cs +++ /dev/null @@ -1,36 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - public partial class StreamingResponseTextAnnotationAddedUpdate : StreamingResponseUpdate - { - internal StreamingResponseTextAnnotationAddedUpdate(string itemId, int outputIndex, int contentIndex, ResponseMessageAnnotation annotation) : base(InternalResponsesResponseStreamEventType.ResponseOutputTextAnnotationAdded) - { - ItemId = itemId; - OutputIndex = outputIndex; - ContentIndex = contentIndex; - Annotation = annotation; - } - - internal StreamingResponseTextAnnotationAddedUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex, int contentIndex, ResponseMessageAnnotation annotation) : base(@type, additionalBinaryDataProperties) - { - ItemId = itemId; - OutputIndex = outputIndex; - ContentIndex = contentIndex; - Annotation = annotation; - } - - public string ItemId { get; } - - public int OutputIndex { get; } - - public int ContentIndex { get; } - - public ResponseMessageAnnotation Annotation { get; } - } -} diff --git a/src/Generated/Models/StreamingResponseUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseUpdate.Serialization.cs index 503fda64b..8e3be952f 100644 --- a/src/Generated/Models/StreamingResponseUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseUpdate.Serialization.cs @@ -3,13 +3,14 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Responses { + [PersistableModelProxy(typeof(UnknownResponseStreamEvent))] public partial class StreamingResponseUpdate : IJsonModel { internal StreamingResponseUpdate() @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -33,8 +35,14 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type.ToString()); + writer.WriteStringValue(Kind.ToString()); } + if (_additionalBinaryDataProperties?.ContainsKey("sequence_number") != true) + { + writer.WritePropertyName("sequence_number"u8); + writer.WriteNumberValue(SequenceNumber); + } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -58,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit StreamingResponseUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -79,8 +88,6 @@ internal static StreamingResponseUpdate DeserializeStreamingResponseUpdate(JsonE { switch (discriminator.GetString()) { - case "error": - return StreamingResponseErrorUpdate.DeserializeStreamingResponseErrorUpdate(element, options); case "response.completed": return StreamingResponseCompletedUpdate.DeserializeStreamingResponseCompletedUpdate(element, options); case "response.content_part.added": @@ -89,11 +96,11 @@ internal static StreamingResponseUpdate DeserializeStreamingResponseUpdate(JsonE return StreamingResponseContentPartDoneUpdate.DeserializeStreamingResponseContentPartDoneUpdate(element, options); case "response.created": return StreamingResponseCreatedUpdate.DeserializeStreamingResponseCreatedUpdate(element, options); - case "response.failed": - return StreamingResponseFailedUpdate.DeserializeStreamingResponseFailedUpdate(element, options); + case "error": + return StreamingResponseErrorUpdate.DeserializeStreamingResponseErrorUpdate(element, options); case "response.file_search_call.completed": return StreamingResponseFileSearchCallCompletedUpdate.DeserializeStreamingResponseFileSearchCallCompletedUpdate(element, options); - case "response.file_search_call.in.progress": + case "response.file_search_call.in_progress": return StreamingResponseFileSearchCallInProgressUpdate.DeserializeStreamingResponseFileSearchCallInProgressUpdate(element, options); case "response.file_search_call.searching": return StreamingResponseFileSearchCallSearchingUpdate.DeserializeStreamingResponseFileSearchCallSearchingUpdate(element, options); @@ -101,44 +108,97 @@ internal static StreamingResponseUpdate DeserializeStreamingResponseUpdate(JsonE return StreamingResponseFunctionCallArgumentsDeltaUpdate.DeserializeStreamingResponseFunctionCallArgumentsDeltaUpdate(element, options); case "response.function_call_arguments.done": return StreamingResponseFunctionCallArgumentsDoneUpdate.DeserializeStreamingResponseFunctionCallArgumentsDoneUpdate(element, options); - case "response.incomplete": - return StreamingResponseIncompleteUpdate.DeserializeStreamingResponseIncompleteUpdate(element, options); case "response.in_progress": return StreamingResponseInProgressUpdate.DeserializeStreamingResponseInProgressUpdate(element, options); + case "response.failed": + return StreamingResponseFailedUpdate.DeserializeStreamingResponseFailedUpdate(element, options); + case "response.incomplete": + return StreamingResponseIncompleteUpdate.DeserializeStreamingResponseIncompleteUpdate(element, options); case "response.output_item.added": return StreamingResponseOutputItemAddedUpdate.DeserializeStreamingResponseOutputItemAddedUpdate(element, options); case "response.output_item.done": return StreamingResponseOutputItemDoneUpdate.DeserializeStreamingResponseOutputItemDoneUpdate(element, options); - case "response.output_text.annotation.added": - return StreamingResponseTextAnnotationAddedUpdate.DeserializeStreamingResponseTextAnnotationAddedUpdate(element, options); - case "response.output_text.delta": - return StreamingResponseOutputTextDeltaUpdate.DeserializeStreamingResponseOutputTextDeltaUpdate(element, options); - case "response.output_text.done": - return StreamingResponseOutputTextDoneUpdate.DeserializeStreamingResponseOutputTextDoneUpdate(element, options); case "response.refusal.delta": return StreamingResponseRefusalDeltaUpdate.DeserializeStreamingResponseRefusalDeltaUpdate(element, options); case "response.refusal.done": return StreamingResponseRefusalDoneUpdate.DeserializeStreamingResponseRefusalDoneUpdate(element, options); + case "response.output_text.delta": + return StreamingResponseOutputTextDeltaUpdate.DeserializeStreamingResponseOutputTextDeltaUpdate(element, options); + case "response.output_text.done": + return StreamingResponseOutputTextDoneUpdate.DeserializeStreamingResponseOutputTextDoneUpdate(element, options); + case "response.reasoning_summary_part.added": + return InternalResponseReasoningSummaryPartAddedEvent.DeserializeInternalResponseReasoningSummaryPartAddedEvent(element, options); + case "response.reasoning_summary_part.done": + return InternalResponseReasoningSummaryPartDoneEvent.DeserializeInternalResponseReasoningSummaryPartDoneEvent(element, options); + case "response.reasoning_summary_text.delta": + return InternalResponseReasoningSummaryTextDeltaEvent.DeserializeInternalResponseReasoningSummaryTextDeltaEvent(element, options); + case "response.reasoning_summary_text.done": + return InternalResponseReasoningSummaryTextDoneEvent.DeserializeInternalResponseReasoningSummaryTextDoneEvent(element, options); case "response.web_search_call.completed": return StreamingResponseWebSearchCallCompletedUpdate.DeserializeStreamingResponseWebSearchCallCompletedUpdate(element, options); case "response.web_search_call.in_progress": return StreamingResponseWebSearchCallInProgressUpdate.DeserializeStreamingResponseWebSearchCallInProgressUpdate(element, options); case "response.web_search_call.searching": return StreamingResponseWebSearchCallSearchingUpdate.DeserializeStreamingResponseWebSearchCallSearchingUpdate(element, options); + case "response.image_generation_call.completed": + return InternalResponseImageGenCallCompletedEvent.DeserializeInternalResponseImageGenCallCompletedEvent(element, options); + case "response.image_generation_call.generating": + return InternalResponseImageGenCallGeneratingEvent.DeserializeInternalResponseImageGenCallGeneratingEvent(element, options); + case "response.image_generation_call.in_progress": + return InternalResponseImageGenCallInProgressEvent.DeserializeInternalResponseImageGenCallInProgressEvent(element, options); + case "response.image_generation_call.partial_image": + return InternalResponseImageGenCallPartialImageEvent.DeserializeInternalResponseImageGenCallPartialImageEvent(element, options); + case "response.mcp_call.arguments_delta": + return InternalResponseMCPCallArgumentsDeltaEvent.DeserializeInternalResponseMCPCallArgumentsDeltaEvent(element, options); + case "response.mcp_call.arguments_done": + return InternalResponseMCPCallArgumentsDoneEvent.DeserializeInternalResponseMCPCallArgumentsDoneEvent(element, options); + case "response.mcp_call.completed": + return InternalResponseMCPCallCompletedEvent.DeserializeInternalResponseMCPCallCompletedEvent(element, options); + case "response.mcp_call.failed": + return InternalResponseMCPCallFailedEvent.DeserializeInternalResponseMCPCallFailedEvent(element, options); + case "response.mcp_call.in_progress": + return InternalResponseMCPCallInProgressEvent.DeserializeInternalResponseMCPCallInProgressEvent(element, options); + case "response.mcp_list_tools.completed": + return InternalResponseMCPListToolsCompletedEvent.DeserializeInternalResponseMCPListToolsCompletedEvent(element, options); + case "response.mcp_list_tools.failed": + return InternalResponseMCPListToolsFailedEvent.DeserializeInternalResponseMCPListToolsFailedEvent(element, options); + case "response.mcp_list_tools.in_progress": + return InternalResponseMCPListToolsInProgressEvent.DeserializeInternalResponseMCPListToolsInProgressEvent(element, options); + case "response.queued": + return StreamingResponseQueuedUpdate.DeserializeStreamingResponseQueuedUpdate(element, options); + case "response.reasoning.delta": + return InternalResponseReasoningDeltaEvent.DeserializeInternalResponseReasoningDeltaEvent(element, options); + case "response.reasoning.done": + return InternalResponseReasoningDoneEvent.DeserializeInternalResponseReasoningDoneEvent(element, options); + case "response.reasoning_summary.delta": + return InternalResponseReasoningSummaryDeltaEvent.DeserializeInternalResponseReasoningSummaryDeltaEvent(element, options); + case "response.reasoning_summary.done": + return InternalResponseReasoningSummaryDoneEvent.DeserializeInternalResponseReasoningSummaryDoneEvent(element, options); + case "response.code_interpreter_call_code.delta": + return InternalResponseCodeInterpreterCallCodeDeltaEvent.DeserializeInternalResponseCodeInterpreterCallCodeDeltaEvent(element, options); + case "response.code_interpreter_call_code.done": + return InternalResponseCodeInterpreterCallCodeDoneEvent.DeserializeInternalResponseCodeInterpreterCallCodeDoneEvent(element, options); + case "response.code_interpreter_call.completed": + return InternalResponseCodeInterpreterCallCompletedEvent.DeserializeInternalResponseCodeInterpreterCallCompletedEvent(element, options); + case "response.code_interpreter_call.in_progress": + return InternalResponseCodeInterpreterCallInProgressEvent.DeserializeInternalResponseCodeInterpreterCallInProgressEvent(element, options); + case "response.code_interpreter_call.interpreting": + return InternalResponseCodeInterpreterCallInterpretingEvent.DeserializeInternalResponseCodeInterpreterCallInterpretingEvent(element, options); } } - return UnknownResponsesResponseStreamEvent.DeserializeUnknownResponsesResponseStreamEvent(element, options); + return UnknownResponseStreamEvent.DeserializeUnknownResponseStreamEvent(element, options); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseUpdate)} does not support writing '{options.Format}' format."); } @@ -146,6 +206,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -162,21 +223,5 @@ protected virtual StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseUpdate streamingResponseUpdate) - { - if (streamingResponseUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseUpdate.cs b/src/Generated/Models/StreamingResponseUpdate.cs index 179cb11c2..2a709714a 100644 --- a/src/Generated/Models/StreamingResponseUpdate.cs +++ b/src/Generated/Models/StreamingResponseUpdate.cs @@ -11,18 +11,22 @@ public partial class StreamingResponseUpdate { private protected IDictionary _additionalBinaryDataProperties; - private protected StreamingResponseUpdate(InternalResponsesResponseStreamEventType @type) + private protected StreamingResponseUpdate(InternalResponseStreamEventType kind, int sequenceNumber) { - Type = @type; + Kind = kind; + SequenceNumber = sequenceNumber; } - internal StreamingResponseUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties) + internal StreamingResponseUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties) { - Type = @type; + Kind = kind; + SequenceNumber = sequenceNumber; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal InternalResponsesResponseStreamEventType Type { get; set; } + internal InternalResponseStreamEventType Kind { get; set; } + + public int SequenceNumber { get; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/StreamingResponseWebSearchCallCompletedUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseWebSearchCallCompletedUpdate.Serialization.cs index da5c54a47..f25172cd8 100644 --- a/src/Generated/Models/StreamingResponseWebSearchCallCompletedUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseWebSearchCallCompletedUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseWebSearchCallCompletedUpdate : IJsonModel { - internal StreamingResponseWebSearchCallCompletedUpdate() + internal StreamingResponseWebSearchCallCompletedUpdate() : this(InternalResponseStreamEventType.ResponseWebSearchCallCompleted, default, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,20 +33,21 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(StreamingResponseWebSearchCallCompletedUpdate)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) { writer.WritePropertyName("output_index"u8); writer.WriteNumberValue(OutputIndex); } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } } StreamingResponseWebSearchCallCompletedUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseWebSearchCallCompletedUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,20 +65,21 @@ internal static StreamingResponseWebSearchCallCompletedUpdate DeserializeStreami { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; int outputIndex = default; + string itemId = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); continue; } - if (prop.NameEquals("item_id"u8)) + if (prop.NameEquals("sequence_number"u8)) { - itemId = prop.Value.GetString(); + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("output_index"u8)) @@ -84,20 +87,27 @@ internal static StreamingResponseWebSearchCallCompletedUpdate DeserializeStreami outputIndex = prop.Value.GetInt32(); continue; } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseWebSearchCallCompletedUpdate(@type, additionalBinaryDataProperties, itemId, outputIndex); + return new StreamingResponseWebSearchCallCompletedUpdate(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseWebSearchCallCompletedUpdate)} does not support writing '{options.Format}' format."); } @@ -105,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseWebSearchCallCompletedUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseWebSearchCallCompletedUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +132,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseWebSearchCallCompletedUpdate streamingResponseWebSearchCallCompletedUpdate) - { - if (streamingResponseWebSearchCallCompletedUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseWebSearchCallCompletedUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseWebSearchCallCompletedUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseWebSearchCallCompletedUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseWebSearchCallCompletedUpdate.cs b/src/Generated/Models/StreamingResponseWebSearchCallCompletedUpdate.cs index 7e734e090..9faf49564 100644 --- a/src/Generated/Models/StreamingResponseWebSearchCallCompletedUpdate.cs +++ b/src/Generated/Models/StreamingResponseWebSearchCallCompletedUpdate.cs @@ -9,20 +9,20 @@ namespace OpenAI.Responses { public partial class StreamingResponseWebSearchCallCompletedUpdate : StreamingResponseUpdate { - internal StreamingResponseWebSearchCallCompletedUpdate(string itemId, int outputIndex) : base(InternalResponsesResponseStreamEventType.ResponseWebSearchCallCompleted) + internal StreamingResponseWebSearchCallCompletedUpdate(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseWebSearchCallCompleted, sequenceNumber) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - internal StreamingResponseWebSearchCallCompletedUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseWebSearchCallCompletedUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - public string ItemId { get; } - public int OutputIndex { get; } + + public string ItemId { get; } } } diff --git a/src/Generated/Models/StreamingResponseWebSearchCallInProgressUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseWebSearchCallInProgressUpdate.Serialization.cs index 6086b8309..bece419cb 100644 --- a/src/Generated/Models/StreamingResponseWebSearchCallInProgressUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseWebSearchCallInProgressUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseWebSearchCallInProgressUpdate : IJsonModel { - internal StreamingResponseWebSearchCallInProgressUpdate() + internal StreamingResponseWebSearchCallInProgressUpdate() : this(InternalResponseStreamEventType.ResponseWebSearchCallInProgress, default, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,20 +33,21 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(StreamingResponseWebSearchCallInProgressUpdate)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) { writer.WritePropertyName("output_index"u8); writer.WriteNumberValue(OutputIndex); } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } } StreamingResponseWebSearchCallInProgressUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseWebSearchCallInProgressUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,20 +65,21 @@ internal static StreamingResponseWebSearchCallInProgressUpdate DeserializeStream { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; int outputIndex = default; + string itemId = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); continue; } - if (prop.NameEquals("item_id"u8)) + if (prop.NameEquals("sequence_number"u8)) { - itemId = prop.Value.GetString(); + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("output_index"u8)) @@ -84,20 +87,27 @@ internal static StreamingResponseWebSearchCallInProgressUpdate DeserializeStream outputIndex = prop.Value.GetInt32(); continue; } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseWebSearchCallInProgressUpdate(@type, additionalBinaryDataProperties, itemId, outputIndex); + return new StreamingResponseWebSearchCallInProgressUpdate(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseWebSearchCallInProgressUpdate)} does not support writing '{options.Format}' format."); } @@ -105,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseWebSearchCallInProgressUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseWebSearchCallInProgressUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +132,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseWebSearchCallInProgressUpdate streamingResponseWebSearchCallInProgressUpdate) - { - if (streamingResponseWebSearchCallInProgressUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseWebSearchCallInProgressUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseWebSearchCallInProgressUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseWebSearchCallInProgressUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseWebSearchCallInProgressUpdate.cs b/src/Generated/Models/StreamingResponseWebSearchCallInProgressUpdate.cs index 4ab162e76..84ab64722 100644 --- a/src/Generated/Models/StreamingResponseWebSearchCallInProgressUpdate.cs +++ b/src/Generated/Models/StreamingResponseWebSearchCallInProgressUpdate.cs @@ -9,20 +9,20 @@ namespace OpenAI.Responses { public partial class StreamingResponseWebSearchCallInProgressUpdate : StreamingResponseUpdate { - internal StreamingResponseWebSearchCallInProgressUpdate(string itemId, int outputIndex) : base(InternalResponsesResponseStreamEventType.ResponseWebSearchCallInProgress) + internal StreamingResponseWebSearchCallInProgressUpdate(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseWebSearchCallInProgress, sequenceNumber) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - internal StreamingResponseWebSearchCallInProgressUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseWebSearchCallInProgressUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - public string ItemId { get; } - public int OutputIndex { get; } + + public string ItemId { get; } } } diff --git a/src/Generated/Models/StreamingResponseWebSearchCallSearchingUpdate.Serialization.cs b/src/Generated/Models/StreamingResponseWebSearchCallSearchingUpdate.Serialization.cs index 6f3f9691b..7ae95ee22 100644 --- a/src/Generated/Models/StreamingResponseWebSearchCallSearchingUpdate.Serialization.cs +++ b/src/Generated/Models/StreamingResponseWebSearchCallSearchingUpdate.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Responses { public partial class StreamingResponseWebSearchCallSearchingUpdate : IJsonModel { - internal StreamingResponseWebSearchCallSearchingUpdate() + internal StreamingResponseWebSearchCallSearchingUpdate() : this(InternalResponseStreamEventType.ResponseWebSearchCallSearching, default, null, default, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWri writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -32,20 +33,21 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(StreamingResponseWebSearchCallSearchingUpdate)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) - { - writer.WritePropertyName("item_id"u8); - writer.WriteStringValue(ItemId); - } if (_additionalBinaryDataProperties?.ContainsKey("output_index") != true) { writer.WritePropertyName("output_index"u8); writer.WriteNumberValue(OutputIndex); } + if (_additionalBinaryDataProperties?.ContainsKey("item_id") != true) + { + writer.WritePropertyName("item_id"u8); + writer.WriteStringValue(ItemId); + } } StreamingResponseWebSearchCallSearchingUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (StreamingResponseWebSearchCallSearchingUpdate)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -63,20 +65,21 @@ internal static StreamingResponseWebSearchCallSearchingUpdate DeserializeStreami { return null; } - InternalResponsesResponseStreamEventType @type = default; + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - string itemId = default; int outputIndex = default; + string itemId = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); + kind = new InternalResponseStreamEventType(prop.Value.GetString()); continue; } - if (prop.NameEquals("item_id"u8)) + if (prop.NameEquals("sequence_number"u8)) { - itemId = prop.Value.GetString(); + sequenceNumber = prop.Value.GetInt32(); continue; } if (prop.NameEquals("output_index"u8)) @@ -84,20 +87,27 @@ internal static StreamingResponseWebSearchCallSearchingUpdate DeserializeStreami outputIndex = prop.Value.GetInt32(); continue; } + if (prop.NameEquals("item_id"u8)) + { + itemId = prop.Value.GetString(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new StreamingResponseWebSearchCallSearchingUpdate(@type, additionalBinaryDataProperties, itemId, outputIndex); + return new StreamingResponseWebSearchCallSearchingUpdate(kind, sequenceNumber, additionalBinaryDataProperties, outputIndex, itemId); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(StreamingResponseWebSearchCallSearchingUpdate)} does not support writing '{options.Format}' format."); } @@ -105,6 +115,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions StreamingResponseWebSearchCallSearchingUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (StreamingResponseWebSearchCallSearchingUpdate)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -121,21 +132,5 @@ protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(StreamingResponseWebSearchCallSearchingUpdate streamingResponseWebSearchCallSearchingUpdate) - { - if (streamingResponseWebSearchCallSearchingUpdate == null) - { - return null; - } - return BinaryContent.Create(streamingResponseWebSearchCallSearchingUpdate, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator StreamingResponseWebSearchCallSearchingUpdate(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeStreamingResponseWebSearchCallSearchingUpdate(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/StreamingResponseWebSearchCallSearchingUpdate.cs b/src/Generated/Models/StreamingResponseWebSearchCallSearchingUpdate.cs index 83dc6bd82..f112f7f96 100644 --- a/src/Generated/Models/StreamingResponseWebSearchCallSearchingUpdate.cs +++ b/src/Generated/Models/StreamingResponseWebSearchCallSearchingUpdate.cs @@ -9,20 +9,20 @@ namespace OpenAI.Responses { public partial class StreamingResponseWebSearchCallSearchingUpdate : StreamingResponseUpdate { - internal StreamingResponseWebSearchCallSearchingUpdate(string itemId, int outputIndex) : base(InternalResponsesResponseStreamEventType.ResponseWebSearchCallSearching) + internal StreamingResponseWebSearchCallSearchingUpdate(int sequenceNumber, int outputIndex, string itemId) : base(InternalResponseStreamEventType.ResponseWebSearchCallSearching, sequenceNumber) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - internal StreamingResponseWebSearchCallSearchingUpdate(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties, string itemId, int outputIndex) : base(@type, additionalBinaryDataProperties) + internal StreamingResponseWebSearchCallSearchingUpdate(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties, int outputIndex, string itemId) : base(kind, sequenceNumber, additionalBinaryDataProperties) { - ItemId = itemId; OutputIndex = outputIndex; + ItemId = itemId; } - public string ItemId { get; } - public int OutputIndex { get; } + + public string ItemId { get; } } } diff --git a/src/Generated/Models/SystemChatMessage.Serialization.cs b/src/Generated/Models/SystemChatMessage.Serialization.cs index 28b285fce..9f1487984 100644 --- a/src/Generated/Models/SystemChatMessage.Serialization.cs +++ b/src/Generated/Models/SystemChatMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,7 @@ namespace OpenAI.Chat { public partial class SystemChatMessage : IJsonModel { + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -30,6 +31,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri SystemChatMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (SystemChatMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,6 +70,7 @@ internal static SystemChatMessage DeserializeSystemChatMessage(JsonElement eleme participantName = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new SystemChatMessage(content, role, additionalBinaryDataProperties, participantName); @@ -75,13 +78,14 @@ internal static SystemChatMessage DeserializeSystemChatMessage(JsonElement eleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(SystemChatMessage)} does not support writing '{options.Format}' format."); } @@ -89,6 +93,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions SystemChatMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (SystemChatMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -105,21 +110,5 @@ protected override ChatMessage PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(SystemChatMessage systemChatMessage) - { - if (systemChatMessage == null) - { - return null; - } - return BinaryContent.Create(systemChatMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator SystemChatMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeSystemChatMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/SystemChatMessage.cs b/src/Generated/Models/SystemChatMessage.cs index e4aabc90d..3ce3ffbd7 100644 --- a/src/Generated/Models/SystemChatMessage.cs +++ b/src/Generated/Models/SystemChatMessage.cs @@ -9,6 +9,10 @@ namespace OpenAI.Chat { public partial class SystemChatMessage : ChatMessage { + internal SystemChatMessage() : this(null, ChatMessageRole.System, null, null) + { + } + internal SystemChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties, string participantName) : base(content, role, additionalBinaryDataProperties) { ParticipantName = participantName; diff --git a/src/Generated/Models/ThreadCreationOptions.Serialization.cs b/src/Generated/Models/ThreadCreationOptions.Serialization.cs index 042dc5857..40330e87f 100644 --- a/src/Generated/Models/ThreadCreationOptions.Serialization.cs +++ b/src/Generated/Models/ThreadCreationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,6 +59,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -81,6 +83,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ThreadCreationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ThreadCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -149,6 +152,7 @@ internal static ThreadCreationOptions DeserializeThreadCreationOptions(JsonEleme internalMessages = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadCreationOptions(metadata ?? new ChangeTrackingDictionary(), toolResources, internalMessages ?? new ChangeTrackingList(), additionalBinaryDataProperties); @@ -156,13 +160,14 @@ internal static ThreadCreationOptions DeserializeThreadCreationOptions(JsonEleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ThreadCreationOptions)} does not support writing '{options.Format}' format."); } @@ -170,6 +175,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ThreadCreationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ThreadCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -186,21 +192,5 @@ protected virtual ThreadCreationOptions PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ThreadCreationOptions threadCreationOptions) - { - if (threadCreationOptions == null) - { - return null; - } - return BinaryContent.Create(threadCreationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ThreadCreationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeThreadCreationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ThreadCreationOptions.cs b/src/Generated/Models/ThreadCreationOptions.cs index c667f5dff..4a72b3605 100644 --- a/src/Generated/Models/ThreadCreationOptions.cs +++ b/src/Generated/Models/ThreadCreationOptions.cs @@ -12,17 +12,16 @@ public partial class ThreadCreationOptions { private protected IDictionary _additionalBinaryDataProperties; - public ThreadCreationOptions() + public ThreadCreationOptions() : this(null, null, null, null) { - Metadata = new ChangeTrackingDictionary(); - InternalMessages = new ChangeTrackingList(); } internal ThreadCreationOptions(IDictionary metadata, ToolResources toolResources, IList internalMessages, IDictionary additionalBinaryDataProperties) { - Metadata = metadata; + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); ToolResources = toolResources; - InternalMessages = internalMessages; + InternalMessages = internalMessages ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ThreadDeletionResult.Serialization.cs b/src/Generated/Models/ThreadDeletionResult.Serialization.cs index df4529f20..f1fa84111 100644 --- a/src/Generated/Models/ThreadDeletionResult.Serialization.cs +++ b/src/Generated/Models/ThreadDeletionResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWr writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,8 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ThreadDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ThreadDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,7 +91,7 @@ internal static ThreadDeletionResult DeserializeThreadDeletionResult(JsonElement } bool deleted = default; string threadId = default; - InternalDeleteThreadResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -104,9 +107,10 @@ internal static ThreadDeletionResult DeserializeThreadDeletionResult(JsonElement } if (prop.NameEquals("object"u8)) { - @object = new InternalDeleteThreadResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadDeletionResult(deleted, threadId, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static ThreadDeletionResult DeserializeThreadDeletionResult(JsonElement BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ThreadDeletionResult)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ThreadDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ThreadDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual ThreadDeletionResult PersistableModelCreateCore(BinaryData dat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ThreadDeletionResult threadDeletionResult) - { - if (threadDeletionResult == null) - { - return null; - } - return BinaryContent.Create(threadDeletionResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ThreadDeletionResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeThreadDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ThreadDeletionResult.cs b/src/Generated/Models/ThreadDeletionResult.cs index afaa8fb1b..d0cb2643e 100644 --- a/src/Generated/Models/ThreadDeletionResult.cs +++ b/src/Generated/Models/ThreadDeletionResult.cs @@ -17,7 +17,7 @@ internal ThreadDeletionResult(bool deleted, string threadId) ThreadId = threadId; } - internal ThreadDeletionResult(bool deleted, string threadId, InternalDeleteThreadResponseObject @object, IDictionary additionalBinaryDataProperties) + internal ThreadDeletionResult(bool deleted, string threadId, string @object, IDictionary additionalBinaryDataProperties) { Deleted = deleted; ThreadId = threadId; diff --git a/src/Generated/Models/ThreadMessage.Serialization.cs b/src/Generated/Models/ThreadMessage.Serialization.cs index 72b7ff3ad..205d4efd4 100644 --- a/src/Generated/Models/ThreadMessage.Serialization.cs +++ b/src/Generated/Models/ThreadMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { public partial class ThreadMessage : IJsonModel { - internal ThreadMessage() + internal ThreadMessage() : this(null, default, null, default, null, default, default, null, null, null, null, null, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpt writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -87,6 +88,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("incomplete_at"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("content") != true) { writer.WritePropertyName("content"u8); @@ -121,33 +123,27 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("run_id"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + writer.WritePropertyName(item.Key); + if (item.Value == null) { - writer.WritePropertyName(item.Key); - if (item.Value == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item.Value); + writer.WriteNullValue(); + continue; } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"u8); + writer.WriteStringValue(item.Value); } + writer.WriteEndObject(); } if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("role") != true) { @@ -171,6 +167,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("attachments"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -194,6 +191,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ThreadMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ThreadMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -222,7 +220,7 @@ internal static ThreadMessage DeserializeThreadMessage(JsonElement element, Mode string assistantId = default; string runId = default; IReadOnlyDictionary metadata = default; - InternalMessageObjectObject @object = default; + string @object = default; MessageRole role = default; IReadOnlyList attachments = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); @@ -332,7 +330,7 @@ internal static ThreadMessage DeserializeThreadMessage(JsonElement element, Mode } if (prop.NameEquals("object"u8)) { - @object = new InternalMessageObjectObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("role"u8)) @@ -355,6 +353,7 @@ internal static ThreadMessage DeserializeThreadMessage(JsonElement element, Mode attachments = array; continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadMessage( @@ -377,13 +376,14 @@ internal static ThreadMessage DeserializeThreadMessage(JsonElement element, Mode BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ThreadMessage)} does not support writing '{options.Format}' format."); } @@ -391,6 +391,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ThreadMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ThreadMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -407,21 +408,5 @@ protected virtual ThreadMessage PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ThreadMessage threadMessage) - { - if (threadMessage == null) - { - return null; - } - return BinaryContent.Create(threadMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ThreadMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeThreadMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ThreadMessage.cs b/src/Generated/Models/ThreadMessage.cs index 95ceaf0d5..2078ef837 100644 --- a/src/Generated/Models/ThreadMessage.cs +++ b/src/Generated/Models/ThreadMessage.cs @@ -30,8 +30,9 @@ internal ThreadMessage(string id, DateTimeOffset createdAt, string threadId, Mes Attachments = attachments.ToList(); } - internal ThreadMessage(string id, DateTimeOffset createdAt, string threadId, MessageStatus status, MessageFailureDetails incompleteDetails, DateTimeOffset? completedAt, DateTimeOffset? incompleteAt, IReadOnlyList content, string assistantId, string runId, IReadOnlyDictionary metadata, InternalMessageObjectObject @object, MessageRole role, IReadOnlyList attachments, IDictionary additionalBinaryDataProperties) + internal ThreadMessage(string id, DateTimeOffset createdAt, string threadId, MessageStatus status, MessageFailureDetails incompleteDetails, DateTimeOffset? completedAt, DateTimeOffset? incompleteAt, IReadOnlyList content, string assistantId, string runId, IReadOnlyDictionary metadata, string @object, MessageRole role, IReadOnlyList attachments, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; CreatedAt = createdAt; ThreadId = threadId; @@ -39,13 +40,13 @@ internal ThreadMessage(string id, DateTimeOffset createdAt, string threadId, Mes IncompleteDetails = incompleteDetails; CompletedAt = completedAt; IncompleteAt = incompleteAt; - Content = content; + Content = content ?? new ChangeTrackingList(); AssistantId = assistantId; RunId = runId; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); Object = @object; Role = role; - Attachments = attachments; + Attachments = attachments ?? new ChangeTrackingList(); _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ThreadModificationOptions.Serialization.cs b/src/Generated/Models/ThreadModificationOptions.Serialization.cs index a5658f709..7a9cf4106 100644 --- a/src/Generated/Models/ThreadModificationOptions.Serialization.cs +++ b/src/Generated/Models/ThreadModificationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -48,6 +49,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("tool_resources"u8); writer.WriteObjectValue(ToolResources, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -71,6 +73,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ThreadModificationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ThreadModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -124,6 +127,7 @@ internal static ThreadModificationOptions DeserializeThreadModificationOptions(J toolResources = ToolResources.DeserializeToolResources(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadModificationOptions(metadata ?? new ChangeTrackingDictionary(), toolResources, additionalBinaryDataProperties); @@ -131,13 +135,14 @@ internal static ThreadModificationOptions DeserializeThreadModificationOptions(J BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ThreadModificationOptions)} does not support writing '{options.Format}' format."); } @@ -145,6 +150,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ThreadModificationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ThreadModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -161,21 +167,5 @@ protected virtual ThreadModificationOptions PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ThreadModificationOptions threadModificationOptions) - { - if (threadModificationOptions == null) - { - return null; - } - return BinaryContent.Create(threadModificationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ThreadModificationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeThreadModificationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ThreadModificationOptions.cs b/src/Generated/Models/ThreadModificationOptions.cs index ee4e2f169..5706a38a9 100644 --- a/src/Generated/Models/ThreadModificationOptions.cs +++ b/src/Generated/Models/ThreadModificationOptions.cs @@ -12,14 +12,14 @@ public partial class ThreadModificationOptions { private protected IDictionary _additionalBinaryDataProperties; - public ThreadModificationOptions() + public ThreadModificationOptions() : this(null, null, null) { - Metadata = new ChangeTrackingDictionary(); } internal ThreadModificationOptions(IDictionary metadata, ToolResources toolResources, IDictionary additionalBinaryDataProperties) { - Metadata = metadata; + // Plugin customization: ensure initialization of collections + Metadata = metadata ?? new ChangeTrackingDictionary(); ToolResources = toolResources; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ThreadRun.Serialization.cs b/src/Generated/Models/ThreadRun.Serialization.cs index 2b320a41c..e4d21839c 100644 --- a/src/Generated/Models/ThreadRun.Serialization.cs +++ b/src/Generated/Models/ThreadRun.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.Assistants { public partial class ThreadRun : IJsonModel { - internal ThreadRun() + internal ThreadRun() : this(null, default, null, null, default, null, default, default, default, default, default, null, null, null, null, null, null, default, null, null, null, null, default, default, default, default, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -150,6 +151,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("instructions"u8); writer.WriteStringValue(Instructions); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("tools") != true) { writer.WritePropertyName("tools"u8); @@ -160,28 +162,22 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } writer.WriteEndArray(); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + writer.WritePropertyName(item.Key); + if (item.Value == null) { - writer.WritePropertyName(item.Key); - if (item.Value == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item.Value); + writer.WriteNullValue(); + continue; } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"u8); + writer.WriteStringValue(item.Value); } + writer.WriteEndObject(); } if (_additionalBinaryDataProperties?.ContainsKey("usage") != true) { @@ -215,7 +211,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("response_format") != true) { @@ -287,6 +283,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("required_action"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -310,6 +307,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ThreadRun IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ThreadRun JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -346,7 +344,7 @@ internal static ThreadRun DeserializeThreadRun(JsonElement element, ModelReaderW RunTokenUsage usage = default; float? temperature = default; RunTruncationStrategy truncationStrategy = default; - InternalRunObjectObject @object = default; + string @object = default; AssistantResponseFormat responseFormat = default; ToolConstraint toolConstraint = default; float? nucleusSamplingFactor = default; @@ -526,7 +524,7 @@ internal static ThreadRun DeserializeThreadRun(JsonElement element, ModelReaderW } if (prop.NameEquals("object"u8)) { - @object = new InternalRunObjectObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("response_format"u8)) @@ -594,6 +592,7 @@ internal static ThreadRun DeserializeThreadRun(JsonElement element, ModelReaderW internalRequiredAction = InternalRunRequiredAction.DeserializeInternalRunRequiredAction(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ThreadRun( @@ -629,13 +628,14 @@ internal static ThreadRun DeserializeThreadRun(JsonElement element, ModelReaderW BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ThreadRun)} does not support writing '{options.Format}' format."); } @@ -643,6 +643,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ThreadRun IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ThreadRun PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -659,21 +660,5 @@ protected virtual ThreadRun PersistableModelCreateCore(BinaryData data, ModelRea } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ThreadRun threadRun) - { - if (threadRun == null) - { - return null; - } - return BinaryContent.Create(threadRun, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ThreadRun(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeThreadRun(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ThreadRun.cs b/src/Generated/Models/ThreadRun.cs index c59cd845a..2efc6cf73 100644 --- a/src/Generated/Models/ThreadRun.cs +++ b/src/Generated/Models/ThreadRun.cs @@ -40,8 +40,9 @@ internal ThreadRun(string id, DateTimeOffset createdAt, string threadId, string _internalRequiredAction = internalRequiredAction; } - internal ThreadRun(string id, DateTimeOffset createdAt, string threadId, string assistantId, RunStatus status, RunError lastError, DateTimeOffset? expiresAt, DateTimeOffset? startedAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, RunIncompleteDetails incompleteDetails, string model, string instructions, IReadOnlyList tools, IReadOnlyDictionary metadata, RunTokenUsage usage, float? temperature, RunTruncationStrategy truncationStrategy, InternalRunObjectObject @object, AssistantResponseFormat responseFormat, ToolConstraint toolConstraint, float? nucleusSamplingFactor, bool? allowParallelToolCalls, int? maxInputTokenCount, int? maxOutputTokenCount, InternalRunRequiredAction internalRequiredAction, IDictionary additionalBinaryDataProperties) + internal ThreadRun(string id, DateTimeOffset createdAt, string threadId, string assistantId, RunStatus status, RunError lastError, DateTimeOffset? expiresAt, DateTimeOffset? startedAt, DateTimeOffset? cancelledAt, DateTimeOffset? failedAt, DateTimeOffset? completedAt, RunIncompleteDetails incompleteDetails, string model, string instructions, IReadOnlyList tools, IReadOnlyDictionary metadata, RunTokenUsage usage, float? temperature, RunTruncationStrategy truncationStrategy, string @object, AssistantResponseFormat responseFormat, ToolConstraint toolConstraint, float? nucleusSamplingFactor, bool? allowParallelToolCalls, int? maxInputTokenCount, int? maxOutputTokenCount, InternalRunRequiredAction internalRequiredAction, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; CreatedAt = createdAt; ThreadId = threadId; @@ -56,8 +57,8 @@ internal ThreadRun(string id, DateTimeOffset createdAt, string threadId, string IncompleteDetails = incompleteDetails; Model = model; Instructions = instructions; - Tools = tools; - Metadata = metadata; + Tools = tools ?? new ChangeTrackingList(); + Metadata = metadata ?? new ChangeTrackingDictionary(); Usage = usage; Temperature = temperature; TruncationStrategy = truncationStrategy; diff --git a/src/Generated/Models/ToolChatMessage.Serialization.cs b/src/Generated/Models/ToolChatMessage.Serialization.cs index b1fad4081..7709f507c 100644 --- a/src/Generated/Models/ToolChatMessage.Serialization.cs +++ b/src/Generated/Models/ToolChatMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,10 +13,11 @@ namespace OpenAI.Chat { public partial class ToolChatMessage : IJsonModel { - internal ToolChatMessage() + internal ToolChatMessage() : this(null, ChatMessageRole.Tool, null, null) { } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -34,6 +35,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ToolChatMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (ToolChatMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -72,6 +74,7 @@ internal static ToolChatMessage DeserializeToolChatMessage(JsonElement element, toolCallId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ToolChatMessage(content, role, additionalBinaryDataProperties, toolCallId); @@ -79,13 +82,14 @@ internal static ToolChatMessage DeserializeToolChatMessage(JsonElement element, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ToolChatMessage)} does not support writing '{options.Format}' format."); } @@ -93,6 +97,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ToolChatMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (ToolChatMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -109,21 +114,5 @@ protected override ChatMessage PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ToolChatMessage toolChatMessage) - { - if (toolChatMessage == null) - { - return null; - } - return BinaryContent.Create(toolChatMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ToolChatMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeToolChatMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ToolConstraint.Serialization.cs b/src/Generated/Models/ToolConstraint.Serialization.cs index cf3897d34..2e33733d9 100644 --- a/src/Generated/Models/ToolConstraint.Serialization.cs +++ b/src/Generated/Models/ToolConstraint.Serialization.cs @@ -3,8 +3,8 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -16,6 +16,7 @@ internal ToolConstraint() { } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -23,16 +24,17 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit { throw new FormatException($"The model {nameof(ToolConstraint)} does not support writing '{format}' format."); } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.Value.ToString()); + } if (Optional.IsDefined(Function) && _additionalBinaryDataProperties?.ContainsKey("function") != true) { writer.WritePropertyName("function"u8); writer.WriteObjectValue(Function, options); } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(_objectType); - } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -54,6 +56,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit } } + [Experimental("OPENAI001")] protected virtual ToolConstraint JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -65,18 +68,20 @@ protected virtual ToolConstraint JsonModelCreateCore(ref Utf8JsonReader reader, return DeserializeToolConstraint(document.RootElement, options); } + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ToolConstraint)} does not support writing '{options.Format}' format."); } } + [Experimental("OPENAI001")] protected virtual ToolConstraint PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -93,21 +98,5 @@ protected virtual ToolConstraint PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ToolConstraint toolConstraint) - { - if (toolConstraint == null) - { - return null; - } - return BinaryContent.Create(toolConstraint, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ToolConstraint(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeToolConstraint(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ToolConstraint.cs b/src/Generated/Models/ToolConstraint.cs index 56d7f7543..f67ce426e 100644 --- a/src/Generated/Models/ToolConstraint.cs +++ b/src/Generated/Models/ToolConstraint.cs @@ -11,10 +11,15 @@ public partial class ToolConstraint { private protected IDictionary _additionalBinaryDataProperties; - internal ToolConstraint(InternalAssistantsNamedToolChoiceFunction function, string objectType, IDictionary additionalBinaryDataProperties) + internal ToolConstraint(InternalAssistantsNamedToolChoiceType? kind) { + Kind = kind; + } + + internal ToolConstraint(InternalAssistantsNamedToolChoiceType? kind, InternalAssistantsNamedToolChoiceFunction function, IDictionary additionalBinaryDataProperties) + { + Kind = kind; Function = function; - _objectType = objectType; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/ToolDefinition.Serialization.cs b/src/Generated/Models/ToolDefinition.Serialization.cs index 378bb50cb..950b4a1f9 100644 --- a/src/Generated/Models/ToolDefinition.Serialization.cs +++ b/src/Generated/Models/ToolDefinition.Serialization.cs @@ -3,16 +3,28 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.Assistants { [PersistableModelProxy(typeof(UnknownAssistantToolDefinition))] - public abstract partial class ToolDefinition : IJsonModel + public partial class ToolDefinition : IJsonModel { + internal ToolDefinition() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -23,8 +35,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("type") != true) { writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); + writer.WriteStringValue(Kind.ToString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -48,6 +61,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ToolDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -82,13 +96,14 @@ internal static ToolDefinition DeserializeToolDefinition(JsonElement element, Mo BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ToolDefinition)} does not support writing '{options.Format}' format."); } @@ -96,6 +111,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ToolDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -112,21 +128,5 @@ protected virtual ToolDefinition PersistableModelCreateCore(BinaryData data, Mod } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ToolDefinition toolDefinition) - { - if (toolDefinition == null) - { - return null; - } - return BinaryContent.Create(toolDefinition, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ToolDefinition(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeToolDefinition(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ToolDefinition.cs b/src/Generated/Models/ToolDefinition.cs index a257dfa11..5c4de0d67 100644 --- a/src/Generated/Models/ToolDefinition.cs +++ b/src/Generated/Models/ToolDefinition.cs @@ -7,17 +7,22 @@ namespace OpenAI.Assistants { - public abstract partial class ToolDefinition + public partial class ToolDefinition { private protected IDictionary _additionalBinaryDataProperties; - internal ToolDefinition(string @type, IDictionary additionalBinaryDataProperties) + private protected ToolDefinition(InternalAssistantToolDefinitionType kind) { - Type = @type; + Kind = kind; + } + + internal ToolDefinition(InternalAssistantToolDefinitionType kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; _additionalBinaryDataProperties = additionalBinaryDataProperties; } - internal string Type { get; set; } + internal InternalAssistantToolDefinitionType Kind { get; set; } internal IDictionary SerializedAdditionalRawData { diff --git a/src/Generated/Models/ToolOutput.Serialization.cs b/src/Generated/Models/ToolOutput.Serialization.cs index b20587b46..5bde3aa3e 100644 --- a/src/Generated/Models/ToolOutput.Serialization.cs +++ b/src/Generated/Models/ToolOutput.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOption writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -37,6 +38,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("output"u8); writer.WriteStringValue(Output); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ToolOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ToolOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -92,6 +95,7 @@ internal static ToolOutput DeserializeToolOutput(JsonElement element, ModelReade output = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ToolOutput(toolCallId, output, additionalBinaryDataProperties); @@ -99,13 +103,14 @@ internal static ToolOutput DeserializeToolOutput(JsonElement element, ModelReade BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ToolOutput)} does not support writing '{options.Format}' format."); } @@ -113,6 +118,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ToolOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ToolOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,21 +135,5 @@ protected virtual ToolOutput PersistableModelCreateCore(BinaryData data, ModelRe } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ToolOutput toolOutput) - { - if (toolOutput == null) - { - return null; - } - return BinaryContent.Create(toolOutput, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ToolOutput(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeToolOutput(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ToolResources.Serialization.cs b/src/Generated/Models/ToolResources.Serialization.cs index ff33e5a6c..89952017f 100644 --- a/src/Generated/Models/ToolResources.Serialization.cs +++ b/src/Generated/Models/ToolResources.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOpt writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,8 +36,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (Optional.IsDefined(FileSearch) && _additionalBinaryDataProperties?.ContainsKey("file_search") != true) { writer.WritePropertyName("file_search"u8); - SerializeFileSearch(writer, options); + writer.WriteObjectValue(FileSearch, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -60,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit ToolResources IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual ToolResources JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -100,6 +103,7 @@ internal static ToolResources DeserializeToolResources(JsonElement element, Mode fileSearch = FileSearchToolResources.DeserializeFileSearchToolResources(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new ToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties); @@ -107,13 +111,14 @@ internal static ToolResources DeserializeToolResources(JsonElement element, Mode BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ToolResources)} does not support writing '{options.Format}' format."); } @@ -121,6 +126,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ToolResources IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual ToolResources PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -137,21 +143,5 @@ protected virtual ToolResources PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(ToolResources toolResources) - { - if (toolResources == null) - { - return null; - } - return BinaryContent.Create(toolResources, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator ToolResources(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeToolResources(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/ToolResources.cs b/src/Generated/Models/ToolResources.cs index 5a2c85c10..14fd3aeed 100644 --- a/src/Generated/Models/ToolResources.cs +++ b/src/Generated/Models/ToolResources.cs @@ -11,6 +11,10 @@ public partial class ToolResources { private protected IDictionary _additionalBinaryDataProperties; + public ToolResources() + { + } + internal ToolResources(CodeInterpreterToolResources codeInterpreter, FileSearchToolResources fileSearch, IDictionary additionalBinaryDataProperties) { CodeInterpreter = codeInterpreter; diff --git a/src/Generated/Models/TranscribedSegment.Serialization.cs b/src/Generated/Models/TranscribedSegment.Serialization.cs index c443b1f14..f104f5012 100644 --- a/src/Generated/Models/TranscribedSegment.Serialization.cs +++ b/src/Generated/Models/TranscribedSegment.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWrit writer.WriteEndObject(); } + [Experimental("OPENAI001")] private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -86,6 +87,7 @@ private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WritePropertyName("no_speech_prob"u8); writer.WriteNumberValue(NoSpeechProbability); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -109,6 +111,7 @@ private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions TranscribedSegment IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] private TranscribedSegment JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -200,6 +203,7 @@ internal static TranscribedSegment DeserializeTranscribedSegment(JsonElement ele noSpeechProbability = prop.Value.GetSingle(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new TranscribedSegment( @@ -218,13 +222,14 @@ internal static TranscribedSegment DeserializeTranscribedSegment(JsonElement ele BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] private BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(TranscribedSegment)} does not support writing '{options.Format}' format."); } @@ -232,6 +237,7 @@ private BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) TranscribedSegment IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] private TranscribedSegment PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -249,18 +255,6 @@ private TranscribedSegment PersistableModelCreateCore(BinaryData data, ModelRead string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - public static implicit operator BinaryContent(TranscribedSegment transcribedSegment) - { - return BinaryContent.Create(transcribedSegment, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator TranscribedSegment(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeTranscribedSegment(document.RootElement, ModelSerializationExtensions.WireOptions); - } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => ((IJsonModel)this).Write(writer, options); object IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => ((IJsonModel)this).Create(ref reader, options); diff --git a/src/Generated/Models/TranscribedWord.Serialization.cs b/src/Generated/Models/TranscribedWord.Serialization.cs index c6ccf2ec2..f67d2db34 100644 --- a/src/Generated/Models/TranscribedWord.Serialization.cs +++ b/src/Generated/Models/TranscribedWord.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO writer.WriteEndObject(); } + [Experimental("OPENAI001")] private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -46,6 +47,7 @@ private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions writer.WritePropertyName("end"u8); writer.WriteNumberValue(Convert.ToDouble(EndTime.ToString("s\\.FFF"))); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ private void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions TranscribedWord IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] private TranscribedWord JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -107,6 +110,7 @@ internal static TranscribedWord DeserializeTranscribedWord(JsonElement element, endTime = TimeSpan.FromSeconds(prop.Value.GetDouble()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new TranscribedWord(word, startTime, endTime, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static TranscribedWord DeserializeTranscribedWord(JsonElement element, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] private BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(TranscribedWord)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ private BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) TranscribedWord IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] private TranscribedWord PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -145,18 +151,6 @@ private TranscribedWord PersistableModelCreateCore(BinaryData data, ModelReaderW string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - public static implicit operator BinaryContent(TranscribedWord transcribedWord) - { - return BinaryContent.Create(transcribedWord, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator TranscribedWord(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeTranscribedWord(document.RootElement, ModelSerializationExtensions.WireOptions); - } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) => ((IJsonModel)this).Write(writer, options); object IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => ((IJsonModel)this).Create(ref reader, options); diff --git a/src/Generated/Models/TranscriptionSessionConfiguredUpdate.Serialization.cs b/src/Generated/Models/TranscriptionSessionConfiguredUpdate.Serialization.cs new file mode 100644 index 000000000..3d43d16e3 --- /dev/null +++ b/src/Generated/Models/TranscriptionSessionConfiguredUpdate.Serialization.cs @@ -0,0 +1,125 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class TranscriptionSessionConfiguredUpdate : IJsonModel + { + internal TranscriptionSessionConfiguredUpdate() : this(RealtimeUpdateKind.TranscriptionSessionConfigured, null, null, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(TranscriptionSessionConfiguredUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + if (_additionalBinaryDataProperties?.ContainsKey("session") != true) + { + writer.WritePropertyName("session"u8); + writer.WriteObjectValue(_internalSession, options); + } + } + + TranscriptionSessionConfiguredUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (TranscriptionSessionConfiguredUpdate)JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(TranscriptionSessionConfiguredUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeTranscriptionSessionConfiguredUpdate(document.RootElement, options); + } + + internal static TranscriptionSessionConfiguredUpdate DeserializeTranscriptionSessionConfiguredUpdate(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + RealtimeUpdateKind kind = default; + string eventId = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + InternalRealtimeTranscriptionSessionCreateResponse internalSession = default; + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = prop.Value.GetString().ToRealtimeUpdateKind(); + continue; + } + if (prop.NameEquals("event_id"u8)) + { + eventId = prop.Value.GetString(); + continue; + } + if (prop.NameEquals("session"u8)) + { + internalSession = InternalRealtimeTranscriptionSessionCreateResponse.DeserializeInternalRealtimeTranscriptionSessionCreateResponse(prop.Value, options); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new TranscriptionSessionConfiguredUpdate(kind, eventId, additionalBinaryDataProperties, internalSession); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(TranscriptionSessionConfiguredUpdate)} does not support writing '{options.Format}' format."); + } + } + + TranscriptionSessionConfiguredUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (TranscriptionSessionConfiguredUpdate)PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override RealtimeUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeTranscriptionSessionConfiguredUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(TranscriptionSessionConfiguredUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/TranscriptionSessionConfiguredUpdate.cs b/src/Generated/Models/TranscriptionSessionConfiguredUpdate.cs new file mode 100644 index 000000000..27e66d73c --- /dev/null +++ b/src/Generated/Models/TranscriptionSessionConfiguredUpdate.cs @@ -0,0 +1,22 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class TranscriptionSessionConfiguredUpdate : RealtimeUpdate + { + internal TranscriptionSessionConfiguredUpdate(InternalRealtimeTranscriptionSessionCreateResponse internalSession) : base(RealtimeUpdateKind.TranscriptionSessionConfigured) + { + _internalSession = internalSession; + } + + internal TranscriptionSessionConfiguredUpdate(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties, InternalRealtimeTranscriptionSessionCreateResponse internalSession) : base(kind, eventId, additionalBinaryDataProperties) + { + _internalSession = internalSession; + } + } +} diff --git a/src/Generated/Models/TranscriptionSessionOptions.Serialization.cs b/src/Generated/Models/TranscriptionSessionOptions.Serialization.cs new file mode 100644 index 000000000..1d937ae5e --- /dev/null +++ b/src/Generated/Models/TranscriptionSessionOptions.Serialization.cs @@ -0,0 +1,263 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class TranscriptionSessionOptions : IJsonModel + { + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(TranscriptionSessionOptions)} does not support writing '{format}' format."); + } + if (Optional.IsDefined(ClientSecret) && _additionalBinaryDataProperties?.ContainsKey("client_secret") != true) + { + writer.WritePropertyName("client_secret"u8); + writer.WriteObjectValue(ClientSecret, options); + } + if (Optional.IsDefined(InputAudioFormat) && _additionalBinaryDataProperties?.ContainsKey("input_audio_format") != true) + { + writer.WritePropertyName("input_audio_format"u8); + writer.WriteStringValue(InputAudioFormat.Value.ToString()); + } + if (Optional.IsDefined(InputTranscriptionOptions) && _additionalBinaryDataProperties?.ContainsKey("input_audio_transcription") != true) + { + writer.WritePropertyName("input_audio_transcription"u8); + writer.WriteObjectValue(InputTranscriptionOptions, options); + } + if (Optional.IsDefined(TurnDetectionOptions) && _additionalBinaryDataProperties?.ContainsKey("turn_detection") != true) + { + writer.WritePropertyName("turn_detection"u8); + writer.WriteObjectValue(TurnDetectionOptions, options); + } + if (Optional.IsDefined(InputNoiseReductionOptions) && _additionalBinaryDataProperties?.ContainsKey("input_audio_noise_reduction") != true) + { + writer.WritePropertyName("input_audio_noise_reduction"u8); + writer.WriteObjectValue(InputNoiseReductionOptions, options); + } + if (Optional.IsCollectionDefined(Include) && _additionalBinaryDataProperties?.ContainsKey("include") != true) + { + writer.WritePropertyName("include"u8); + writer.WriteStartArray(); + foreach (string item in Include) + { + if (item == null) + { + writer.WriteNullValue(); + continue; + } + writer.WriteStringValue(item); + } + writer.WriteEndArray(); + } + if (Optional.IsCollectionDefined(_internalModalities) && _additionalBinaryDataProperties?.ContainsKey("modalities") != true) + { + writer.WritePropertyName("modalities"u8); + writer.WriteStartArray(); + foreach (InternalRealtimeRequestSessionModality item in _internalModalities) + { + writer.WriteStringValue(item.ToString()); + } + writer.WriteEndArray(); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + TranscriptionSessionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual TranscriptionSessionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(TranscriptionSessionOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeTranscriptionSessionOptions(document.RootElement, options); + } + + internal static TranscriptionSessionOptions DeserializeTranscriptionSessionOptions(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalRealtimeTranscriptionSessionCreateRequestClientSecret clientSecret = default; + RealtimeAudioFormat? inputAudioFormat = default; + InputTranscriptionOptions inputTranscriptionOptions = default; + TurnDetectionOptions turnDetectionOptions = default; + InputNoiseReductionOptions inputNoiseReductionOptions = default; + IList include = default; + IList internalModalities = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("client_secret"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + clientSecret = InternalRealtimeTranscriptionSessionCreateRequestClientSecret.DeserializeInternalRealtimeTranscriptionSessionCreateRequestClientSecret(prop.Value, options); + continue; + } + if (prop.NameEquals("input_audio_format"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputAudioFormat = new RealtimeAudioFormat(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("input_audio_transcription"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + inputTranscriptionOptions = InputTranscriptionOptions.DeserializeInputTranscriptionOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("turn_detection"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + turnDetectionOptions = TurnDetectionOptions.DeserializeTurnDetectionOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("input_audio_noise_reduction"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + inputNoiseReductionOptions = null; + continue; + } + inputNoiseReductionOptions = InputNoiseReductionOptions.DeserializeInputNoiseReductionOptions(prop.Value, options); + continue; + } + if (prop.NameEquals("include"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + if (item.ValueKind == JsonValueKind.Null) + { + array.Add(null); + } + else + { + array.Add(item.GetString()); + } + } + include = array; + continue; + } + if (prop.NameEquals("modalities"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + List array = new List(); + foreach (var item in prop.Value.EnumerateArray()) + { + array.Add(new InternalRealtimeRequestSessionModality(item.GetString())); + } + internalModalities = array; + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new TranscriptionSessionOptions( + clientSecret, + inputAudioFormat, + inputTranscriptionOptions, + turnDetectionOptions, + inputNoiseReductionOptions, + include ?? new ChangeTrackingList(), + internalModalities, + additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(TranscriptionSessionOptions)} does not support writing '{options.Format}' format."); + } + } + + TranscriptionSessionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual TranscriptionSessionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeTranscriptionSessionOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(TranscriptionSessionOptions)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/TranscriptionSessionOptions.cs b/src/Generated/Models/TranscriptionSessionOptions.cs new file mode 100644 index 000000000..1f1db675d --- /dev/null +++ b/src/Generated/Models/TranscriptionSessionOptions.cs @@ -0,0 +1,40 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class TranscriptionSessionOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + public TranscriptionSessionOptions() : this(null, default, null, null, null, null, null, null) + { + } + + internal TranscriptionSessionOptions(InternalRealtimeTranscriptionSessionCreateRequestClientSecret clientSecret, RealtimeAudioFormat? inputAudioFormat, InputTranscriptionOptions inputTranscriptionOptions, TurnDetectionOptions turnDetectionOptions, InputNoiseReductionOptions inputNoiseReductionOptions, IList include, IList internalModalities, IDictionary additionalBinaryDataProperties) + { + // Plugin customization: ensure initialization of collections + ClientSecret = clientSecret; + InputAudioFormat = inputAudioFormat; + InputTranscriptionOptions = inputTranscriptionOptions; + TurnDetectionOptions = turnDetectionOptions; + InputNoiseReductionOptions = inputNoiseReductionOptions; + Include = include ?? new ChangeTrackingList(); + _internalModalities = internalModalities ?? new ChangeTrackingList(); + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalRealtimeTranscriptionSessionCreateRequestClientSecret ClientSecret { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/TurnDetectionKind.Serialization.cs b/src/Generated/Models/TurnDetectionKind.Serialization.cs new file mode 100644 index 000000000..64b664a11 --- /dev/null +++ b/src/Generated/Models/TurnDetectionKind.Serialization.cs @@ -0,0 +1,31 @@ +// + +#nullable disable + +using System; + +namespace OpenAI.Realtime +{ + internal static partial class TurnDetectionKindExtensions + { + public static string ToSerialString(this TurnDetectionKind value) => value switch + { + TurnDetectionKind.ServerVoiceActivityDetection => "server_vad", + TurnDetectionKind.SemanticVoiceActivityDetection => "semantic_vad", + _ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown TurnDetectionKind value.") + }; + + public static TurnDetectionKind ToTurnDetectionKind(this string value) + { + if (StringComparer.OrdinalIgnoreCase.Equals(value, "server_vad")) + { + return TurnDetectionKind.ServerVoiceActivityDetection; + } + if (StringComparer.OrdinalIgnoreCase.Equals(value, "semantic_vad")) + { + return TurnDetectionKind.SemanticVoiceActivityDetection; + } + throw new ArgumentOutOfRangeException(nameof(value), value, "Unknown TurnDetectionKind value."); + } + } +} diff --git a/src/Generated/Models/TurnDetectionOptions.Serialization.cs b/src/Generated/Models/TurnDetectionOptions.Serialization.cs new file mode 100644 index 000000000..80bc7f795 --- /dev/null +++ b/src/Generated/Models/TurnDetectionOptions.Serialization.cs @@ -0,0 +1,121 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Realtime +{ + [PersistableModelProxy(typeof(UnknownRealtimeTurnDetection))] + public partial class TurnDetectionOptions : IJsonModel + { + internal TurnDetectionOptions() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(TurnDetectionOptions)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToSerialString()); + } + if (Optional.IsDefined(ResponseCreationEnabled) && _additionalBinaryDataProperties?.ContainsKey("create_response") != true) + { + writer.WritePropertyName("create_response"u8); + writer.WriteBooleanValue(ResponseCreationEnabled.Value); + } + if (Optional.IsDefined(ResponseInterruptionEnabled) && _additionalBinaryDataProperties?.ContainsKey("interrupt_response") != true) + { + writer.WritePropertyName("interrupt_response"u8); + writer.WriteBooleanValue(ResponseInterruptionEnabled.Value); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + TurnDetectionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual TurnDetectionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(TurnDetectionOptions)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeTurnDetectionOptions(document.RootElement, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(TurnDetectionOptions)} does not support writing '{options.Format}' format."); + } + } + + TurnDetectionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual TurnDetectionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeTurnDetectionOptions(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(TurnDetectionOptions)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/TurnDetectionOptions.cs b/src/Generated/Models/TurnDetectionOptions.cs new file mode 100644 index 000000000..d2a6476d6 --- /dev/null +++ b/src/Generated/Models/TurnDetectionOptions.cs @@ -0,0 +1,35 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Realtime +{ + public partial class TurnDetectionOptions + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected TurnDetectionOptions(TurnDetectionKind kind) + { + Kind = kind; + } + + internal TurnDetectionOptions(TurnDetectionKind kind, bool? responseCreationEnabled, bool? responseInterruptionEnabled, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + ResponseCreationEnabled = responseCreationEnabled; + ResponseInterruptionEnabled = responseInterruptionEnabled; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + public TurnDetectionKind Kind { get; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs b/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs index 8cbab500e..c9b82e758 100644 --- a/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs +++ b/src/Generated/Models/UnknownAssistantToolDefinition.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,10 +13,18 @@ namespace OpenAI.Assistants { internal partial class UnknownAssistantToolDefinition : IJsonModel { - internal UnknownAssistantToolDefinition() + internal UnknownAssistantToolDefinition() : this(default, null) { } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -28,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ToolDefinition IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ToolDefinition JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -45,29 +55,31 @@ internal static UnknownAssistantToolDefinition DeserializeUnknownAssistantToolDe { return null; } - string @type = "unknown"; + InternalAssistantToolDefinitionType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalAssistantToolDefinitionType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownAssistantToolDefinition(@type, additionalBinaryDataProperties); + return new UnknownAssistantToolDefinition(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ToolDefinition)} does not support writing '{options.Format}' format."); } @@ -75,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ToolDefinition IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ToolDefinition PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownAssistantToolDefinition.cs b/src/Generated/Models/UnknownAssistantToolDefinition.cs index 9241104cc..40d4a8821 100644 --- a/src/Generated/Models/UnknownAssistantToolDefinition.cs +++ b/src/Generated/Models/UnknownAssistantToolDefinition.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownAssistantToolDefinition : ToolDefinition { - internal UnknownAssistantToolDefinition(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownAssistantToolDefinition(InternalAssistantToolDefinitionType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.Serialization.cs b/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.Serialization.cs index a5a5c1404..3a2d4a911 100644 --- a/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.Serialization.cs +++ b/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.FineTuning { internal partial class UnknownCreateFineTuningJobRequestIntegration : IJsonModel { - internal UnknownCreateFineTuningJobRequestIntegration() + internal UnknownCreateFineTuningJobRequestIntegration() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri FineTuningIntegration IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override FineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownCreateFineTuningJobRequestIntegration DeserializeUnknownC { return null; } - string @type = "unknown"; + InternalCreateFineTuningJobRequestIntegrationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalCreateFineTuningJobRequestIntegrationType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownCreateFineTuningJobRequestIntegration(@type, additionalBinaryDataProperties); + return new UnknownCreateFineTuningJobRequestIntegration(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(FineTuningIntegration)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions FineTuningIntegration IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override FineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.cs b/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.cs index b883407b7..1a214aaae 100644 --- a/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.cs +++ b/src/Generated/Models/UnknownCreateFineTuningJobRequestIntegration.cs @@ -9,7 +9,7 @@ namespace OpenAI.FineTuning { internal partial class UnknownCreateFineTuningJobRequestIntegration : FineTuningIntegration { - internal UnknownCreateFineTuningJobRequestIntegration(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownCreateFineTuningJobRequestIntegration(InternalCreateFineTuningJobRequestIntegrationType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownFineTuningIntegration.Serialization.cs b/src/Generated/Models/UnknownFineTuningIntegration.Serialization.cs index b284b4d5d..3066b3c46 100644 --- a/src/Generated/Models/UnknownFineTuningIntegration.Serialization.cs +++ b/src/Generated/Models/UnknownFineTuningIntegration.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.FineTuning { internal partial class UnknownFineTuningIntegration : IJsonModel { - internal UnknownFineTuningIntegration() + internal UnknownFineTuningIntegration() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mode writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalFineTuningIntegration IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalFineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownFineTuningIntegration DeserializeUnknownFineTuningIntegra { return null; } - string @type = "unknown"; + InternalFineTuningIntegrationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalFineTuningIntegrationType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownFineTuningIntegration(@type, additionalBinaryDataProperties); + return new UnknownFineTuningIntegration(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalFineTuningIntegration)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalFineTuningIntegration IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalFineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownFineTuningIntegration.cs b/src/Generated/Models/UnknownFineTuningIntegration.cs index 8e6fd4d22..86778f4d5 100644 --- a/src/Generated/Models/UnknownFineTuningIntegration.cs +++ b/src/Generated/Models/UnknownFineTuningIntegration.cs @@ -9,7 +9,7 @@ namespace OpenAI.FineTuning { internal partial class UnknownFineTuningIntegration : InternalFineTuningIntegration { - internal UnknownFineTuningIntegration(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownFineTuningIntegration(InternalFineTuningIntegrationType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs b/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs index df3275cc1..7601c9972 100644 --- a/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs +++ b/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownMessageContentTextObjectAnnotation : IJsonModel { - internal UnknownMessageContentTextObjectAnnotation() + internal UnknownMessageContentTextObjectAnnotation() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageContentTextObjectAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageContentTextObjectAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownMessageContentTextObjectAnnotation DeserializeUnknownMess { return null; } - string @type = "unknown"; + InternalMessageContentTextAnnotationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentTextAnnotationType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownMessageContentTextObjectAnnotation(@type, additionalBinaryDataProperties); + return new UnknownMessageContentTextObjectAnnotation(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageContentTextObjectAnnotation)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageContentTextObjectAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageContentTextObjectAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.cs b/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.cs index cdc91cb65..c4d52a851 100644 --- a/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.cs +++ b/src/Generated/Models/UnknownMessageContentTextObjectAnnotation.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownMessageContentTextObjectAnnotation : InternalMessageContentTextObjectAnnotation { - internal UnknownMessageContentTextObjectAnnotation(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownMessageContentTextObjectAnnotation(InternalMessageContentTextAnnotationType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs b/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs index eeb50495d..37c989a3f 100644 --- a/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs +++ b/src/Generated/Models/UnknownMessageDeltaContent.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownMessageDeltaContent : IJsonModel { - internal UnknownMessageDeltaContent() + internal UnknownMessageDeltaContent() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageDeltaContent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownMessageDeltaContent DeserializeUnknownMessageDeltaContent { return null; } - string @type = "unknown"; + InternalMessageContentType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownMessageDeltaContent(@type, additionalBinaryDataProperties); + return new UnknownMessageDeltaContent(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaContent)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaContent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaContent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownMessageDeltaContent.cs b/src/Generated/Models/UnknownMessageDeltaContent.cs index add4753cc..9ea25b4d8 100644 --- a/src/Generated/Models/UnknownMessageDeltaContent.cs +++ b/src/Generated/Models/UnknownMessageDeltaContent.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownMessageDeltaContent : InternalMessageDeltaContent { - internal UnknownMessageDeltaContent(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownMessageDeltaContent(InternalMessageContentType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs b/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs index c008c47ce..d6003724a 100644 --- a/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs +++ b/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownMessageDeltaTextContentAnnotation : IJsonModel { - internal UnknownMessageDeltaTextContentAnnotation() + internal UnknownMessageDeltaTextContentAnnotation() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalMessageDeltaTextContentAnnotation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaTextContentAnnotation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownMessageDeltaTextContentAnnotation DeserializeUnknownMessa { return null; } - string @type = "unknown"; + InternalMessageContentTextAnnotationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalMessageContentTextAnnotationType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownMessageDeltaTextContentAnnotation(@type, additionalBinaryDataProperties); + return new UnknownMessageDeltaTextContentAnnotation(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalMessageDeltaTextContentAnnotation)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalMessageDeltaTextContentAnnotation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalMessageDeltaTextContentAnnotation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.cs b/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.cs index b72e96ef1..391a688e5 100644 --- a/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.cs +++ b/src/Generated/Models/UnknownMessageDeltaTextContentAnnotation.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownMessageDeltaTextContentAnnotation : InternalMessageDeltaTextContentAnnotation { - internal UnknownMessageDeltaTextContentAnnotation(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownMessageDeltaTextContentAnnotation(InternalMessageContentTextAnnotationType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRealtimeClientEvent.Serialization.cs b/src/Generated/Models/UnknownRealtimeClientEvent.Serialization.cs index 1f00a7232..013212cbf 100644 --- a/src/Generated/Models/UnknownRealtimeClientEvent.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeClientEvent.Serialization.cs @@ -5,14 +5,15 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeClientEvent : IJsonModel { - internal UnknownRealtimeClientEvent() + internal UnknownRealtimeClientEvent() : this(default, null, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeClientEvent IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -67,6 +70,7 @@ internal static UnknownRealtimeClientEvent DeserializeUnknownRealtimeClientEvent eventId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeClientEvent(kind, eventId, additionalBinaryDataProperties); @@ -74,13 +78,14 @@ internal static UnknownRealtimeClientEvent DeserializeUnknownRealtimeClientEvent BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeClientEvent)} does not support writing '{options.Format}' format."); } @@ -88,6 +93,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeClientEvent IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeClientEvent PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRealtimeClientEvent.cs b/src/Generated/Models/UnknownRealtimeClientEvent.cs index 9dc2bb8e5..d3540e428 100644 --- a/src/Generated/Models/UnknownRealtimeClientEvent.cs +++ b/src/Generated/Models/UnknownRealtimeClientEvent.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeClientEvent : InternalRealtimeClientEvent { diff --git a/src/Generated/Models/UnknownRealtimeContentPart.Serialization.cs b/src/Generated/Models/UnknownRealtimeContentPart.Serialization.cs index 7ee436310..63b7ecec4 100644 --- a/src/Generated/Models/UnknownRealtimeContentPart.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeContentPart.Serialization.cs @@ -5,14 +5,15 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeContentPart : IJsonModel { - internal UnknownRealtimeContentPart() + internal UnknownRealtimeContentPart() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ConversationContentPart IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ConversationContentPart JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,6 +64,7 @@ internal static UnknownRealtimeContentPart DeserializeUnknownRealtimeContentPart kind = new ConversationContentPartKind(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeContentPart(kind, additionalBinaryDataProperties); @@ -68,13 +72,14 @@ internal static UnknownRealtimeContentPart DeserializeUnknownRealtimeContentPart BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationContentPart)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationContentPart IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ConversationContentPart PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRealtimeContentPart.cs b/src/Generated/Models/UnknownRealtimeContentPart.cs index a46fcddcf..204a3fc5e 100644 --- a/src/Generated/Models/UnknownRealtimeContentPart.cs +++ b/src/Generated/Models/UnknownRealtimeContentPart.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeContentPart : ConversationContentPart { diff --git a/src/Generated/Models/UnknownRealtimeRequestItem.Serialization.cs b/src/Generated/Models/UnknownRealtimeRequestItem.Serialization.cs index 09f58b955..73d9a2ece 100644 --- a/src/Generated/Models/UnknownRealtimeRequestItem.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeRequestItem.Serialization.cs @@ -5,45 +5,48 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class UnknownRealtimeRequestItem : IJsonModel + internal partial class UnknownRealtimeRequestItem : IJsonModel { - internal UnknownRealtimeRequestItem() + internal UnknownRealtimeRequestItem() : this(default, null, null) { } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); JsonModelWriteCore(writer, options); writer.WriteEndObject(); } + [Experimental("OPENAI001")] 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(ConversationItem)} does not support writing '{format}' format."); + throw new FormatException($"The model {nameof(RealtimeItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); } - ConversationItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + RealtimeItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - protected override ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem 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(ConversationItem)} does not support reading '{format}' format."); + throw new FormatException($"The model {nameof(RealtimeItem)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationItem(document.RootElement, options); + return DeserializeRealtimeItem(document.RootElement, options); } internal static UnknownRealtimeRequestItem DeserializeUnknownRealtimeRequestItem(JsonElement element, ModelReaderWriterOptions options) @@ -52,14 +55,14 @@ internal static UnknownRealtimeRequestItem DeserializeUnknownRealtimeRequestItem { return null; } - InternalRealtimeItemType @type = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -67,42 +70,45 @@ internal static UnknownRealtimeRequestItem DeserializeUnknownRealtimeRequestItem id = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRealtimeRequestItem(@type, id, additionalBinaryDataProperties); + return new UnknownRealtimeRequestItem(kind, id, additionalBinaryDataProperties); } - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] 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); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: - throw new FormatException($"The model {nameof(ConversationItem)} does not support writing '{options.Format}' format."); + throw new FormatException($"The model {nameof(RealtimeItem)} does not support writing '{options.Format}' format."); } } - ConversationItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + RealtimeItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - protected override ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem 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)) { - return DeserializeConversationItem(document.RootElement, options); + return DeserializeRealtimeItem(document.RootElement, options); } default: - throw new FormatException($"The model {nameof(ConversationItem)} does not support reading '{options.Format}' format."); + throw new FormatException($"The model {nameof(RealtimeItem)} does not support reading '{options.Format}' format."); } } - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; } } diff --git a/src/Generated/Models/UnknownRealtimeRequestItem.cs b/src/Generated/Models/UnknownRealtimeRequestItem.cs index eceb1f9cd..e506cb186 100644 --- a/src/Generated/Models/UnknownRealtimeRequestItem.cs +++ b/src/Generated/Models/UnknownRealtimeRequestItem.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class UnknownRealtimeRequestItem : ConversationItem + internal partial class UnknownRealtimeRequestItem : RealtimeItem { - internal UnknownRealtimeRequestItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", id, additionalBinaryDataProperties) + internal UnknownRealtimeRequestItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", id, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRealtimeRequestMessageItem.Serialization.cs b/src/Generated/Models/UnknownRealtimeRequestMessageItem.Serialization.cs index 893328a41..ec25e35c8 100644 --- a/src/Generated/Models/UnknownRealtimeRequestMessageItem.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeRequestMessageItem.Serialization.cs @@ -5,14 +5,15 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeRequestMessageItem : IJsonModel { - internal UnknownRealtimeRequestMessageItem() + internal UnknownRealtimeRequestMessageItem() : this(default, null, null, default, default) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,7 +37,8 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeRequestMessageItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (UnknownRealtimeRequestMessageItem)JsonModelCreateCore(ref reader, options); - protected override ConversationItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; if (format != "J") @@ -52,7 +55,7 @@ internal static UnknownRealtimeRequestMessageItem DeserializeUnknownRealtimeRequ { return null; } - InternalRealtimeItemType @type = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); ConversationMessageRole role = default; @@ -61,7 +64,7 @@ internal static UnknownRealtimeRequestMessageItem DeserializeUnknownRealtimeRequ { if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -83,20 +86,22 @@ internal static UnknownRealtimeRequestMessageItem DeserializeUnknownRealtimeRequ status = new ConversationItemStatus(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRealtimeRequestMessageItem(@type, id, additionalBinaryDataProperties, role, status); + return new UnknownRealtimeRequestMessageItem(kind, id, additionalBinaryDataProperties, role, status); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeRequestMessageItem)} does not support writing '{options.Format}' format."); } @@ -104,7 +109,8 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeRequestMessageItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (UnknownRealtimeRequestMessageItem)PersistableModelCreateCore(data, options); - protected override ConversationItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) diff --git a/src/Generated/Models/UnknownRealtimeRequestMessageItem.cs b/src/Generated/Models/UnknownRealtimeRequestMessageItem.cs index 7d3958548..639bd63d5 100644 --- a/src/Generated/Models/UnknownRealtimeRequestMessageItem.cs +++ b/src/Generated/Models/UnknownRealtimeRequestMessageItem.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeRequestMessageItem : InternalRealtimeRequestMessageItem { - internal UnknownRealtimeRequestMessageItem(InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status) : base(@type != default ? @type : "unknown", id, additionalBinaryDataProperties, role != default ? role : "unknown", status) + internal UnknownRealtimeRequestMessageItem(InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties, ConversationMessageRole role, ConversationItemStatus? status) : base(kind != default ? kind : "unknown", id, additionalBinaryDataProperties, role != default ? role : "unknown", status) { } } diff --git a/src/Generated/Models/UnknownRealtimeResponseItem.Serialization.cs b/src/Generated/Models/UnknownRealtimeResponseItem.Serialization.cs index 48410c5a8..19eeb169a 100644 --- a/src/Generated/Models/UnknownRealtimeResponseItem.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeResponseItem.Serialization.cs @@ -5,45 +5,48 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class UnknownRealtimeResponseItem : IJsonModel + internal partial class UnknownRealtimeResponseItem : IJsonModel { - internal UnknownRealtimeResponseItem() + internal UnknownRealtimeResponseItem() : this(null, default, null, null) { } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); JsonModelWriteCore(writer, options); writer.WriteEndObject(); } + [Experimental("OPENAI001")] 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(InternalRealtimeConversationResponseItem)} does not support writing '{format}' format."); + throw new FormatException($"The model {nameof(InternalRealtimeResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); } - InternalRealtimeConversationResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + InternalRealtimeResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - protected override InternalRealtimeConversationResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalRealtimeResponseItem 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(InternalRealtimeConversationResponseItem)} does not support reading '{format}' format."); + throw new FormatException($"The model {nameof(InternalRealtimeResponseItem)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeInternalRealtimeConversationResponseItem(document.RootElement, options); + return DeserializeInternalRealtimeResponseItem(document.RootElement, options); } internal static UnknownRealtimeResponseItem DeserializeUnknownRealtimeResponseItem(JsonElement element, ModelReaderWriterOptions options) @@ -52,20 +55,20 @@ internal static UnknownRealtimeResponseItem DeserializeUnknownRealtimeResponseIt { return null; } - InternalRealtimeConversationResponseItemObject @object = default; - InternalRealtimeItemType @type = default; + string @object = default; + InternalRealtimeItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("object"u8)) { - @object = new InternalRealtimeConversationResponseItemObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("type"u8)) { - @type = new InternalRealtimeItemType(prop.Value.GetString()); + kind = new InternalRealtimeItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -78,42 +81,45 @@ internal static UnknownRealtimeResponseItem DeserializeUnknownRealtimeResponseIt id = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRealtimeResponseItem(@object, @type, id, additionalBinaryDataProperties); + return new UnknownRealtimeResponseItem(@object, kind, id, additionalBinaryDataProperties); } - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] 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); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: - throw new FormatException($"The model {nameof(InternalRealtimeConversationResponseItem)} does not support writing '{options.Format}' format."); + throw new FormatException($"The model {nameof(InternalRealtimeResponseItem)} does not support writing '{options.Format}' format."); } } - InternalRealtimeConversationResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + InternalRealtimeResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - protected override InternalRealtimeConversationResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override InternalRealtimeResponseItem 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)) { - return DeserializeInternalRealtimeConversationResponseItem(document.RootElement, options); + return DeserializeInternalRealtimeResponseItem(document.RootElement, options); } default: - throw new FormatException($"The model {nameof(InternalRealtimeConversationResponseItem)} does not support reading '{options.Format}' format."); + throw new FormatException($"The model {nameof(InternalRealtimeResponseItem)} does not support reading '{options.Format}' format."); } } - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; } } diff --git a/src/Generated/Models/UnknownRealtimeResponseItem.cs b/src/Generated/Models/UnknownRealtimeResponseItem.cs index 1f77d4c21..a1a119f90 100644 --- a/src/Generated/Models/UnknownRealtimeResponseItem.cs +++ b/src/Generated/Models/UnknownRealtimeResponseItem.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class UnknownRealtimeResponseItem : InternalRealtimeConversationResponseItem + internal partial class UnknownRealtimeResponseItem : InternalRealtimeResponseItem { - internal UnknownRealtimeResponseItem(InternalRealtimeConversationResponseItemObject @object, InternalRealtimeItemType @type, string id, IDictionary additionalBinaryDataProperties) : base(@object, @type != default ? @type : "unknown", id, additionalBinaryDataProperties) + internal UnknownRealtimeResponseItem(string @object, InternalRealtimeItemType kind, string id, IDictionary additionalBinaryDataProperties) : base(@object, kind != default ? kind : "unknown", id, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRealtimeServerEvent.Serialization.cs b/src/Generated/Models/UnknownRealtimeServerEvent.Serialization.cs index 097c70ac3..2f278e41c 100644 --- a/src/Generated/Models/UnknownRealtimeServerEvent.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeServerEvent.Serialization.cs @@ -5,45 +5,48 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class UnknownRealtimeServerEvent : IJsonModel + internal partial class UnknownRealtimeServerEvent : IJsonModel { - internal UnknownRealtimeServerEvent() + internal UnknownRealtimeServerEvent() : this(default, null, null) { } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); JsonModelWriteCore(writer, options); writer.WriteEndObject(); } + [Experimental("OPENAI001")] 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(ConversationUpdate)} does not support writing '{format}' format."); + throw new FormatException($"The model {nameof(RealtimeUpdate)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); } - ConversationUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + RealtimeUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - protected override ConversationUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate 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(ConversationUpdate)} does not support reading '{format}' format."); + throw new FormatException($"The model {nameof(RealtimeUpdate)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationUpdate(document.RootElement, options); + return DeserializeRealtimeUpdate(document.RootElement, options); } internal static UnknownRealtimeServerEvent DeserializeUnknownRealtimeServerEvent(JsonElement element, ModelReaderWriterOptions options) @@ -52,57 +55,60 @@ internal static UnknownRealtimeServerEvent DeserializeUnknownRealtimeServerEvent { return null; } + RealtimeUpdateKind kind = default; string eventId = default; - ConversationUpdateKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("event_id"u8)) + if (prop.NameEquals("type"u8)) { - eventId = prop.Value.GetString(); + kind = prop.Value.GetString().ToRealtimeUpdateKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("event_id"u8)) { - kind = prop.Value.GetString().ToConversationUpdateKind(); + eventId = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRealtimeServerEvent(eventId, kind, additionalBinaryDataProperties); + return new UnknownRealtimeServerEvent(kind, eventId, additionalBinaryDataProperties); } - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] 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); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: - throw new FormatException($"The model {nameof(ConversationUpdate)} does not support writing '{options.Format}' format."); + throw new FormatException($"The model {nameof(RealtimeUpdate)} does not support writing '{options.Format}' format."); } } - ConversationUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + RealtimeUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - protected override ConversationUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override RealtimeUpdate 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)) { - return DeserializeConversationUpdate(document.RootElement, options); + return DeserializeRealtimeUpdate(document.RootElement, options); } default: - throw new FormatException($"The model {nameof(ConversationUpdate)} does not support reading '{options.Format}' format."); + throw new FormatException($"The model {nameof(RealtimeUpdate)} does not support reading '{options.Format}' format."); } } - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; } } diff --git a/src/Generated/Models/UnknownRealtimeServerEvent.cs b/src/Generated/Models/UnknownRealtimeServerEvent.cs index ac6f10345..e2e0b885d 100644 --- a/src/Generated/Models/UnknownRealtimeServerEvent.cs +++ b/src/Generated/Models/UnknownRealtimeServerEvent.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class UnknownRealtimeServerEvent : ConversationUpdate + internal partial class UnknownRealtimeServerEvent : RealtimeUpdate { - internal UnknownRealtimeServerEvent(string eventId, ConversationUpdateKind kind, IDictionary additionalBinaryDataProperties) : base(eventId, kind, additionalBinaryDataProperties) + internal UnknownRealtimeServerEvent(RealtimeUpdateKind kind, string eventId, IDictionary additionalBinaryDataProperties) : base(kind, eventId, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRealtimeTool.Serialization.cs b/src/Generated/Models/UnknownRealtimeTool.Serialization.cs index 4a0bf9184..6c4c33f50 100644 --- a/src/Generated/Models/UnknownRealtimeTool.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeTool.Serialization.cs @@ -5,14 +5,15 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeTool : IJsonModel { - internal UnknownRealtimeTool() + internal UnknownRealtimeTool() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriter writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri ConversationTool IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ConversationTool JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,6 +64,7 @@ internal static UnknownRealtimeTool DeserializeUnknownRealtimeTool(JsonElement e kind = new ConversationToolKind(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UnknownRealtimeTool(kind, additionalBinaryDataProperties); @@ -68,13 +72,14 @@ internal static UnknownRealtimeTool DeserializeUnknownRealtimeTool(JsonElement e BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(ConversationTool)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions ConversationTool IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ConversationTool PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRealtimeTool.cs b/src/Generated/Models/UnknownRealtimeTool.cs index 83eecfa1d..a7d74c1f9 100644 --- a/src/Generated/Models/UnknownRealtimeTool.cs +++ b/src/Generated/Models/UnknownRealtimeTool.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeTool : ConversationTool { diff --git a/src/Generated/Models/UnknownRealtimeToolChoiceObject.Serialization.cs b/src/Generated/Models/UnknownRealtimeToolChoiceObject.Serialization.cs index 342de3617..bb2bdeb88 100644 --- a/src/Generated/Models/UnknownRealtimeToolChoiceObject.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeToolChoiceObject.Serialization.cs @@ -5,14 +5,15 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeToolChoiceObject : IJsonModel { - internal UnknownRealtimeToolChoiceObject() + internal UnknownRealtimeToolChoiceObject() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, M writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRealtimeToolChoiceObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRealtimeToolChoiceObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownRealtimeToolChoiceObject DeserializeUnknownRealtimeToolCh { return null; } - ConversationToolKind @type = default; + ConversationToolKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new ConversationToolKind(prop.Value.GetString()); + kind = new ConversationToolKind(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRealtimeToolChoiceObject(@type, additionalBinaryDataProperties); + return new UnknownRealtimeToolChoiceObject(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRealtimeToolChoiceObject)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRealtimeToolChoiceObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRealtimeToolChoiceObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRealtimeToolChoiceObject.cs b/src/Generated/Models/UnknownRealtimeToolChoiceObject.cs index b98513580..d54bcfbc4 100644 --- a/src/Generated/Models/UnknownRealtimeToolChoiceObject.cs +++ b/src/Generated/Models/UnknownRealtimeToolChoiceObject.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { internal partial class UnknownRealtimeToolChoiceObject : InternalRealtimeToolChoiceObject { - internal UnknownRealtimeToolChoiceObject(ConversationToolKind @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) + internal UnknownRealtimeToolChoiceObject(ConversationToolKind kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRealtimeTurnDetection.Serialization.cs b/src/Generated/Models/UnknownRealtimeTurnDetection.Serialization.cs index bf926c082..d3a29176a 100644 --- a/src/Generated/Models/UnknownRealtimeTurnDetection.Serialization.cs +++ b/src/Generated/Models/UnknownRealtimeTurnDetection.Serialization.cs @@ -5,45 +5,48 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class UnknownRealtimeTurnDetection : IJsonModel + internal partial class UnknownRealtimeTurnDetection : IJsonModel { - internal UnknownRealtimeTurnDetection() + internal UnknownRealtimeTurnDetection() : this(default, default, default, null) { } - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); JsonModelWriteCore(writer, options); writer.WriteEndObject(); } + [Experimental("OPENAI001")] 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(ConversationTurnDetectionOptions)} does not support writing '{format}' format."); + throw new FormatException($"The model {nameof(TurnDetectionOptions)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); } - ConversationTurnDetectionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + TurnDetectionOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - protected override ConversationTurnDetectionOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override TurnDetectionOptions 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(ConversationTurnDetectionOptions)} does not support reading '{format}' format."); + throw new FormatException($"The model {nameof(TurnDetectionOptions)} does not support reading '{format}' format."); } using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeConversationTurnDetectionOptions(document.RootElement, options); + return DeserializeTurnDetectionOptions(document.RootElement, options); } internal static UnknownRealtimeTurnDetection DeserializeUnknownRealtimeTurnDetection(JsonElement element, ModelReaderWriterOptions options) @@ -52,51 +55,74 @@ internal static UnknownRealtimeTurnDetection DeserializeUnknownRealtimeTurnDetec { return null; } - ConversationTurnDetectionKind kind = default; + TurnDetectionKind kind = default; + bool? responseCreationEnabled = default; + bool? responseInterruptionEnabled = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - kind = prop.Value.GetString().ToConversationTurnDetectionKind(); + kind = prop.Value.GetString().ToTurnDetectionKind(); continue; } + if (prop.NameEquals("create_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseCreationEnabled = prop.Value.GetBoolean(); + continue; + } + if (prop.NameEquals("interrupt_response"u8)) + { + if (prop.Value.ValueKind == JsonValueKind.Null) + { + continue; + } + responseInterruptionEnabled = prop.Value.GetBoolean(); + continue; + } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRealtimeTurnDetection(kind, additionalBinaryDataProperties); + return new UnknownRealtimeTurnDetection(kind, responseCreationEnabled, responseInterruptionEnabled, additionalBinaryDataProperties); } - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] 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); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: - throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support writing '{options.Format}' format."); + throw new FormatException($"The model {nameof(TurnDetectionOptions)} does not support writing '{options.Format}' format."); } } - ConversationTurnDetectionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + TurnDetectionOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - protected override ConversationTurnDetectionOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + [Experimental("OPENAI001")] + protected override TurnDetectionOptions 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)) { - return DeserializeConversationTurnDetectionOptions(document.RootElement, options); + return DeserializeTurnDetectionOptions(document.RootElement, options); } default: - throw new FormatException($"The model {nameof(ConversationTurnDetectionOptions)} does not support reading '{options.Format}' format."); + throw new FormatException($"The model {nameof(TurnDetectionOptions)} does not support reading '{options.Format}' format."); } } - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; } } diff --git a/src/Generated/Models/UnknownRealtimeTurnDetection.cs b/src/Generated/Models/UnknownRealtimeTurnDetection.cs index 80e07f0ef..5d3360e64 100644 --- a/src/Generated/Models/UnknownRealtimeTurnDetection.cs +++ b/src/Generated/Models/UnknownRealtimeTurnDetection.cs @@ -5,11 +5,11 @@ using System; using System.Collections.Generic; -namespace OpenAI.RealtimeConversation +namespace OpenAI.Realtime { - internal partial class UnknownRealtimeTurnDetection : ConversationTurnDetectionOptions + internal partial class UnknownRealtimeTurnDetection : TurnDetectionOptions { - internal UnknownRealtimeTurnDetection(ConversationTurnDetectionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) + internal UnknownRealtimeTurnDetection(TurnDetectionKind kind, bool? responseCreationEnabled, bool? responseInterruptionEnabled, IDictionary additionalBinaryDataProperties) : base(kind, responseCreationEnabled, responseInterruptionEnabled, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownResponseStreamEvent.Serialization.cs b/src/Generated/Models/UnknownResponseStreamEvent.Serialization.cs new file mode 100644 index 000000000..1f50ad5a9 --- /dev/null +++ b/src/Generated/Models/UnknownResponseStreamEvent.Serialization.cs @@ -0,0 +1,114 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + internal partial class UnknownResponseStreamEvent : IJsonModel + { + internal UnknownResponseStreamEvent() : this(default, default, null) + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingResponseUpdate)} does not support writing '{format}' format."); + } + base.JsonModelWriteCore(writer, options); + } + + StreamingResponseUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(StreamingResponseUpdate)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeStreamingResponseUpdate(document.RootElement, options); + } + + internal static UnknownResponseStreamEvent DeserializeUnknownResponseStreamEvent(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + InternalResponseStreamEventType kind = default; + int sequenceNumber = default; + IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); + foreach (var prop in element.EnumerateObject()) + { + if (prop.NameEquals("type"u8)) + { + kind = new InternalResponseStreamEventType(prop.Value.GetString()); + continue; + } + if (prop.NameEquals("sequence_number"u8)) + { + sequenceNumber = prop.Value.GetInt32(); + continue; + } + // Plugin customization: remove options.Format != "W" check + additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); + } + return new UnknownResponseStreamEvent(kind, sequenceNumber, additionalBinaryDataProperties); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(StreamingResponseUpdate)} does not support writing '{options.Format}' format."); + } + } + + StreamingResponseUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeStreamingResponseUpdate(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(StreamingResponseUpdate)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/UnknownResponseStreamEvent.cs b/src/Generated/Models/UnknownResponseStreamEvent.cs new file mode 100644 index 000000000..e64f46429 --- /dev/null +++ b/src/Generated/Models/UnknownResponseStreamEvent.cs @@ -0,0 +1,16 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + internal partial class UnknownResponseStreamEvent : StreamingResponseUpdate + { + internal UnknownResponseStreamEvent(InternalResponseStreamEventType kind, int sequenceNumber, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", sequenceNumber, additionalBinaryDataProperties) + { + } + } +} diff --git a/src/Generated/Models/UnknownResponsesComputerCallItemAction.Serialization.cs b/src/Generated/Models/UnknownResponsesComputerCallItemAction.Serialization.cs deleted file mode 100644 index afaba4523..000000000 --- a/src/Generated/Models/UnknownResponsesComputerCallItemAction.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class UnknownResponsesComputerCallItemAction : IJsonModel - { - internal UnknownResponsesComputerCallItemAction() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ComputerCallAction)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - ComputerCallAction IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override ComputerCallAction JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ComputerCallAction)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeComputerCallAction(document.RootElement, options); - } - - internal static UnknownResponsesComputerCallItemAction DeserializeUnknownResponsesComputerCallItemAction(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - ComputerCallActionKind kind = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - kind = prop.Value.GetString().ToComputerCallActionKind(); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new UnknownResponsesComputerCallItemAction(kind, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ComputerCallAction)} does not support writing '{options.Format}' format."); - } - } - - ComputerCallAction IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override ComputerCallAction PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeComputerCallAction(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ComputerCallAction)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/UnknownResponsesComputerCallItemAction.cs b/src/Generated/Models/UnknownResponsesComputerCallItemAction.cs deleted file mode 100644 index 38fa6ed60..000000000 --- a/src/Generated/Models/UnknownResponsesComputerCallItemAction.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class UnknownResponsesComputerCallItemAction : ComputerCallAction - { - internal UnknownResponsesComputerCallItemAction(ComputerCallActionKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.Serialization.cs b/src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.Serialization.cs deleted file mode 100644 index c7efebc93..000000000 --- a/src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class UnknownResponsesComputerCallOutputItemOutput : IJsonModel - { - internal UnknownResponsesComputerCallOutputItemOutput() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ComputerOutput)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - ComputerOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override ComputerOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(ComputerOutput)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeComputerOutput(document.RootElement, options); - } - - internal static UnknownResponsesComputerCallOutputItemOutput DeserializeUnknownResponsesComputerCallOutputItemOutput(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesComputerCallOutputItemOutputType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesComputerCallOutputItemOutputType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new UnknownResponsesComputerCallOutputItemOutput(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(ComputerOutput)} does not support writing '{options.Format}' format."); - } - } - - ComputerOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override ComputerOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeComputerOutput(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(ComputerOutput)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.cs b/src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.cs deleted file mode 100644 index b16406068..000000000 --- a/src/Generated/Models/UnknownResponsesComputerCallOutputItemOutput.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class UnknownResponsesComputerCallOutputItemOutput : ComputerOutput - { - internal UnknownResponsesComputerCallOutputItemOutput(InternalResponsesComputerCallOutputItemOutputType @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/UnknownResponsesResponseStreamEvent.Serialization.cs b/src/Generated/Models/UnknownResponsesResponseStreamEvent.Serialization.cs deleted file mode 100644 index 2e9241c99..000000000 --- a/src/Generated/Models/UnknownResponsesResponseStreamEvent.Serialization.cs +++ /dev/null @@ -1,102 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - internal partial class UnknownResponsesResponseStreamEvent : IJsonModel - { - internal UnknownResponsesResponseStreamEvent() - { - } - - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(StreamingResponseUpdate)} does not support writing '{format}' format."); - } - base.JsonModelWriteCore(writer, options); - } - - StreamingResponseUpdate IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected override StreamingResponseUpdate JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(StreamingResponseUpdate)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeStreamingResponseUpdate(document.RootElement, options); - } - - internal static UnknownResponsesResponseStreamEvent DeserializeUnknownResponsesResponseStreamEvent(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - InternalResponsesResponseStreamEventType @type = default; - IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - foreach (var prop in element.EnumerateObject()) - { - if (prop.NameEquals("type"u8)) - { - @type = new InternalResponsesResponseStreamEventType(prop.Value.GetString()); - continue; - } - additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); - } - return new UnknownResponsesResponseStreamEvent(@type, additionalBinaryDataProperties); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(StreamingResponseUpdate)} does not support writing '{options.Format}' format."); - } - } - - StreamingResponseUpdate IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected override StreamingResponseUpdate PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeStreamingResponseUpdate(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(StreamingResponseUpdate)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - } -} diff --git a/src/Generated/Models/UnknownResponsesResponseStreamEvent.cs b/src/Generated/Models/UnknownResponsesResponseStreamEvent.cs deleted file mode 100644 index ba87e2c73..000000000 --- a/src/Generated/Models/UnknownResponsesResponseStreamEvent.cs +++ /dev/null @@ -1,16 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - internal partial class UnknownResponsesResponseStreamEvent : StreamingResponseUpdate - { - internal UnknownResponsesResponseStreamEvent(InternalResponsesResponseStreamEventType @type, IDictionary additionalBinaryDataProperties) : base(@type != default ? @type : "unknown", additionalBinaryDataProperties) - { - } - } -} diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs index 42b73610e..e892b7cd5 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetails.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDeltaStepDetails : IJsonModel { - internal UnknownRunStepDeltaStepDetails() + internal UnknownRunStepDeltaStepDetails() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownRunStepDeltaStepDetails DeserializeUnknownRunStepDeltaSte { return null; } - string @type = "unknown"; + InternalRunStepDetailsType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRunStepDeltaStepDetails(@type, additionalBinaryDataProperties); + return new UnknownRunStepDeltaStepDetails(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetails)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetails.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetails.cs index 7db2d8484..02f345b58 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetails.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetails.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDeltaStepDetails : InternalRunStepDeltaStepDetails { - internal UnknownRunStepDeltaStepDetails(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownRunStepDeltaStepDetails(InternalRunStepDetailsType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs index 0ef6efe8e..b546e8139 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject : IJsonModel { - internal UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject() + internal UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri RunStepUpdateCodeInterpreterOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepUpdateCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreter { return null; } - string @type = "unknown"; + InternalRunStepDetailsCodeInterpreterOutputType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsCodeInterpreterOutputType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(@type, additionalBinaryDataProperties); + return new UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepUpdateCodeInterpreterOutput)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepUpdateCodeInterpreterOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepUpdateCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs index 714634424..aa214f409 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject : RunStepUpdateCodeInterpreterOutput { - internal UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(InternalRunStepDetailsCodeInterpreterOutputType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index ec9bd02d4..b7e60093d 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject : IJsonModel { - internal UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject() + internal UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.W writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject Des { return null; } - string @type = "unknown"; + RunStepToolCallKind kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(@type, additionalBinaryDataProperties); + return new UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs index 2cb16e57d..cf13ac731 100644 --- a/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs +++ b/src/Generated/Models/UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject : InternalRunStepDeltaStepDetailsToolCallsObjectToolCallsObject { - internal UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownRunStepDeltaStepDetailsToolCallsObjectToolCallsObject(RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties) : base(kind, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs index ce9e9daa7..0f1ba2bb3 100644 --- a/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject : IJsonModel { - internal UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject() + internal UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Model writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri RunStepCodeInterpreterOutput IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepCodeInterpreterOutput JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsOb { return null; } - string @type = "unknown"; + InternalRunStepDetailsCodeInterpreterOutputType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsCodeInterpreterOutputType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(@type, additionalBinaryDataProperties); + return new UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepCodeInterpreterOutput)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepCodeInterpreterOutput IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepCodeInterpreterOutput PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs index b4c3c2632..ee0c970f7 100644 --- a/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs +++ b/src/Generated/Models/UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject : RunStepCodeInterpreterOutput { - internal UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(InternalRunStepDetailsCodeInterpreterOutputType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs index 240a7b108..d27fdaadf 100644 --- a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDetailsToolCallsObjectToolCallsObject : IJsonModel { - internal UnknownRunStepDetailsToolCallsObjectToolCallsObject() + internal UnknownRunStepDetailsToolCallsObjectToolCallsObject() : this(default, null, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterO writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri RunStepToolCall IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepToolCall JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,35 +55,37 @@ internal static UnknownRunStepDetailsToolCallsObjectToolCallsObject DeserializeU { return null; } - string id = default; RunStepToolCallKind kind = default; + string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { - if (prop.NameEquals("id"u8)) + if (prop.NameEquals("type"u8)) { - id = prop.Value.GetString(); + kind = prop.Value.GetString().ToRunStepToolCallKind(); continue; } - if (prop.NameEquals("type"u8)) + if (prop.NameEquals("id"u8)) { - kind = prop.Value.GetString().ToRunStepToolCallKind(); + id = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRunStepDetailsToolCallsObjectToolCallsObject(id, kind, additionalBinaryDataProperties); + return new UnknownRunStepDetailsToolCallsObjectToolCallsObject(kind, id, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepToolCall)} does not support writing '{options.Format}' format."); } @@ -88,6 +93,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepToolCall IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepToolCall PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs index d16094186..293167dd3 100644 --- a/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs +++ b/src/Generated/Models/UnknownRunStepDetailsToolCallsObjectToolCallsObject.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepDetailsToolCallsObjectToolCallsObject : RunStepToolCall { - internal UnknownRunStepDetailsToolCallsObjectToolCallsObject(string id, RunStepToolCallKind kind, IDictionary additionalBinaryDataProperties) : base(id, kind, additionalBinaryDataProperties) + internal UnknownRunStepDetailsToolCallsObjectToolCallsObject(RunStepToolCallKind kind, string id, IDictionary additionalBinaryDataProperties) : base(kind, id, additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs b/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs index b0145a2a2..a1ee40dcd 100644 --- a/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs +++ b/src/Generated/Models/UnknownRunStepObjectStepDetails.Serialization.cs @@ -5,6 +5,7 @@ using System; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -12,7 +13,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepObjectStepDetails : IJsonModel { - internal UnknownRunStepObjectStepDetails() + internal UnknownRunStepObjectStepDetails() : this(default, null) { } @@ -23,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOp writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,6 +37,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri RunStepDetails IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override RunStepDetails JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -52,29 +55,31 @@ internal static UnknownRunStepObjectStepDetails DeserializeUnknownRunStepObjectS { return null; } - string @type = "unknown"; + InternalRunStepDetailsType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalRunStepDetailsType(prop.Value.GetString()); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new UnknownRunStepObjectStepDetails(@type, additionalBinaryDataProperties); + return new UnknownRunStepObjectStepDetails(kind, additionalBinaryDataProperties); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(RunStepDetails)} does not support writing '{options.Format}' format."); } @@ -82,6 +87,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions RunStepDetails IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override RunStepDetails PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; diff --git a/src/Generated/Models/UnknownRunStepObjectStepDetails.cs b/src/Generated/Models/UnknownRunStepObjectStepDetails.cs index fa6a7a879..23f437e1f 100644 --- a/src/Generated/Models/UnknownRunStepObjectStepDetails.cs +++ b/src/Generated/Models/UnknownRunStepObjectStepDetails.cs @@ -9,7 +9,7 @@ namespace OpenAI.Assistants { internal partial class UnknownRunStepObjectStepDetails : RunStepDetails { - internal UnknownRunStepObjectStepDetails(string @type, IDictionary additionalBinaryDataProperties) : base(@type ?? "unknown", additionalBinaryDataProperties) + internal UnknownRunStepObjectStepDetails(InternalRunStepDetailsType kind, IDictionary additionalBinaryDataProperties) : base(kind != default ? kind : "unknown", additionalBinaryDataProperties) { } } diff --git a/src/Generated/Models/UserChatMessage.Serialization.cs b/src/Generated/Models/UserChatMessage.Serialization.cs index d8029da3e..55e5acd22 100644 --- a/src/Generated/Models/UserChatMessage.Serialization.cs +++ b/src/Generated/Models/UserChatMessage.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,7 @@ namespace OpenAI.Chat { public partial class UserChatMessage : IJsonModel { + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -30,6 +31,7 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri UserChatMessage IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (UserChatMessage)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ChatMessage JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -68,6 +70,7 @@ internal static UserChatMessage DeserializeUserChatMessage(JsonElement element, participantName = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new UserChatMessage(content, role, additionalBinaryDataProperties, participantName); @@ -75,13 +78,14 @@ internal static UserChatMessage DeserializeUserChatMessage(JsonElement element, BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(UserChatMessage)} does not support writing '{options.Format}' format."); } @@ -89,6 +93,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions UserChatMessage IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (UserChatMessage)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ChatMessage PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -105,21 +110,5 @@ protected override ChatMessage PersistableModelCreateCore(BinaryData data, Model } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(UserChatMessage userChatMessage) - { - if (userChatMessage == null) - { - return null; - } - return BinaryContent.Create(userChatMessage, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator UserChatMessage(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeUserChatMessage(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/UserChatMessage.cs b/src/Generated/Models/UserChatMessage.cs index 3d71f7d85..83b55685b 100644 --- a/src/Generated/Models/UserChatMessage.cs +++ b/src/Generated/Models/UserChatMessage.cs @@ -9,6 +9,10 @@ namespace OpenAI.Chat { public partial class UserChatMessage : ChatMessage { + internal UserChatMessage() : this(null, ChatMessageRole.User, null, null) + { + } + internal UserChatMessage(ChatMessageContent content, ChatMessageRole role, IDictionary additionalBinaryDataProperties, string participantName) : base(content, role, additionalBinaryDataProperties) { ParticipantName = participantName; diff --git a/src/Generated/Models/VectorStore.Serialization.cs b/src/Generated/Models/VectorStore.Serialization.cs index 20352302a..0b0cee6ba 100644 --- a/src/Generated/Models/VectorStore.Serialization.cs +++ b/src/Generated/Models/VectorStore.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.VectorStores { public partial class VectorStore : IJsonModel { - internal VectorStore() + internal VectorStore() : this(null, default, null, default, null, default, default, default, null, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptio writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -78,39 +79,34 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WriteNull("last_active_at"u8); } } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties?.ContainsKey("metadata") != true) { - if (options.Format != "W" && Optional.IsCollectionDefined(Metadata)) + writer.WritePropertyName("metadata"u8); + writer.WriteStartObject(); + foreach (var item in Metadata) { - writer.WritePropertyName("metadata"u8); - writer.WriteStartObject(); - foreach (var item in Metadata) + writer.WritePropertyName(item.Key); + if (item.Value == null) { - writer.WritePropertyName(item.Key); - if (item.Value == null) - { - writer.WriteNullValue(); - continue; - } - writer.WriteStringValue(item.Value); + writer.WriteNullValue(); + continue; } - writer.WriteEndObject(); - } - else - { - writer.WriteNull("metadata"u8); + writer.WriteStringValue(item.Value); } + writer.WriteEndObject(); } if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (Optional.IsDefined(ExpirationPolicy) && _additionalBinaryDataProperties?.ContainsKey("expires_after") != true) { writer.WritePropertyName("expires_after"u8); writer.WriteObjectValue(ExpirationPolicy, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -134,6 +130,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStore IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStore JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -160,7 +157,7 @@ internal static VectorStore DeserializeVectorStore(JsonElement element, ModelRea DateTimeOffset? expiresAt = default; DateTimeOffset? lastActiveAt = default; IReadOnlyDictionary metadata = default; - InternalVectorStoreObjectObject @object = default; + string @object = default; VectorStoreExpirationPolicy expirationPolicy = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) @@ -239,7 +236,7 @@ internal static VectorStore DeserializeVectorStore(JsonElement element, ModelRea } if (prop.NameEquals("object"u8)) { - @object = new InternalVectorStoreObjectObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("expires_after"u8)) @@ -251,6 +248,7 @@ internal static VectorStore DeserializeVectorStore(JsonElement element, ModelRea expirationPolicy = VectorStoreExpirationPolicy.DeserializeVectorStoreExpirationPolicy(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStore( @@ -270,13 +268,14 @@ internal static VectorStore DeserializeVectorStore(JsonElement element, ModelRea BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStore)} does not support writing '{options.Format}' format."); } @@ -284,6 +283,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStore IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStore PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -300,21 +300,5 @@ protected virtual VectorStore PersistableModelCreateCore(BinaryData data, ModelR } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStore vectorStore) - { - if (vectorStore == null) - { - return null; - } - return BinaryContent.Create(vectorStore, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStore(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStore(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStore.cs b/src/Generated/Models/VectorStore.cs index 7ead1d272..05d5c4d38 100644 --- a/src/Generated/Models/VectorStore.cs +++ b/src/Generated/Models/VectorStore.cs @@ -24,8 +24,9 @@ internal VectorStore(string id, DateTimeOffset createdAt, string name, int usage Metadata = new ChangeTrackingDictionary(); } - internal VectorStore(string id, DateTimeOffset createdAt, string name, int usageBytes, VectorStoreFileCounts fileCounts, VectorStoreStatus status, DateTimeOffset? expiresAt, DateTimeOffset? lastActiveAt, IReadOnlyDictionary metadata, InternalVectorStoreObjectObject @object, VectorStoreExpirationPolicy expirationPolicy, IDictionary additionalBinaryDataProperties) + internal VectorStore(string id, DateTimeOffset createdAt, string name, int usageBytes, VectorStoreFileCounts fileCounts, VectorStoreStatus status, DateTimeOffset? expiresAt, DateTimeOffset? lastActiveAt, IReadOnlyDictionary metadata, string @object, VectorStoreExpirationPolicy expirationPolicy, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Id = id; CreatedAt = createdAt; Name = name; @@ -34,7 +35,7 @@ internal VectorStore(string id, DateTimeOffset createdAt, string name, int usage Status = status; ExpiresAt = expiresAt; LastActiveAt = lastActiveAt; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); Object = @object; ExpirationPolicy = expirationPolicy; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs b/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs index a6640392e..00f7c571c 100644 --- a/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs +++ b/src/Generated/Models/VectorStoreBatchFileJob.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReade writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,6 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("object"u8); writer.WriteObjectValue(Object, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -84,6 +86,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreBatchFileJob IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreBatchFileJob JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -140,6 +143,7 @@ internal static VectorStoreBatchFileJob DeserializeVectorStoreBatchFileJob(JsonE @object = prop.Value.GetObject(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreBatchFileJob( @@ -154,13 +158,14 @@ internal static VectorStoreBatchFileJob DeserializeVectorStoreBatchFileJob(JsonE BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreBatchFileJob)} does not support writing '{options.Format}' format."); } @@ -168,6 +173,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreBatchFileJob IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreBatchFileJob PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -184,21 +190,5 @@ protected virtual VectorStoreBatchFileJob PersistableModelCreateCore(BinaryData } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreBatchFileJob vectorStoreBatchFileJob) - { - if (vectorStoreBatchFileJob == null) - { - return null; - } - return BinaryContent.Create(vectorStoreBatchFileJob, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreBatchFileJob(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreBatchFileJob(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs b/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs index 468170a5d..2bf673e45 100644 --- a/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs +++ b/src/Generated/Models/VectorStoreCreationHelper.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; using OpenAI.VectorStores; @@ -21,6 +21,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -64,6 +65,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("chunking_strategy"u8); writer.WriteObjectValue(ChunkingStrategy, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -87,6 +89,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreCreationHelper IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreCreationHelper JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -161,6 +164,7 @@ internal static VectorStoreCreationHelper DeserializeVectorStoreCreationHelper(J chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreCreationHelper(fileIds ?? new ChangeTrackingList(), metadata ?? new ChangeTrackingDictionary(), chunkingStrategy, additionalBinaryDataProperties); @@ -168,13 +172,14 @@ internal static VectorStoreCreationHelper DeserializeVectorStoreCreationHelper(J BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreCreationHelper)} does not support writing '{options.Format}' format."); } @@ -182,6 +187,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreCreationHelper IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreCreationHelper PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -198,21 +204,5 @@ protected virtual VectorStoreCreationHelper PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreCreationHelper vectorStoreCreationHelper) - { - if (vectorStoreCreationHelper == null) - { - return null; - } - return BinaryContent.Create(vectorStoreCreationHelper, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreCreationHelper(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreCreationHelper(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreCreationHelper.cs b/src/Generated/Models/VectorStoreCreationHelper.cs index 935039ea4..8273e2a6c 100644 --- a/src/Generated/Models/VectorStoreCreationHelper.cs +++ b/src/Generated/Models/VectorStoreCreationHelper.cs @@ -13,16 +13,15 @@ public partial class VectorStoreCreationHelper { private protected IDictionary _additionalBinaryDataProperties; - public VectorStoreCreationHelper() + public VectorStoreCreationHelper() : this(null, null, null, null) { - FileIds = new ChangeTrackingList(); - Metadata = new ChangeTrackingDictionary(); } internal VectorStoreCreationHelper(IList fileIds, IDictionary metadata, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; - Metadata = metadata; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); + Metadata = metadata ?? new ChangeTrackingDictionary(); ChunkingStrategy = chunkingStrategy; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs b/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs index daab452f4..c7e40e61a 100644 --- a/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs +++ b/src/Generated/Models/VectorStoreCreationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -73,6 +74,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("chunking_strategy"u8); writer.WriteObjectValue(ChunkingStrategy, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -96,6 +98,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreCreationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreCreationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -186,6 +189,7 @@ internal static VectorStoreCreationOptions DeserializeVectorStoreCreationOptions chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreCreationOptions( @@ -199,13 +203,14 @@ internal static VectorStoreCreationOptions DeserializeVectorStoreCreationOptions BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreCreationOptions)} does not support writing '{options.Format}' format."); } @@ -213,6 +218,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreCreationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreCreationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -229,21 +235,5 @@ protected virtual VectorStoreCreationOptions PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreCreationOptions vectorStoreCreationOptions) - { - if (vectorStoreCreationOptions == null) - { - return null; - } - return BinaryContent.Create(vectorStoreCreationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreCreationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreCreationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreCreationOptions.cs b/src/Generated/Models/VectorStoreCreationOptions.cs index 0e0e42598..fe5de4794 100644 --- a/src/Generated/Models/VectorStoreCreationOptions.cs +++ b/src/Generated/Models/VectorStoreCreationOptions.cs @@ -12,17 +12,16 @@ public partial class VectorStoreCreationOptions { private protected IDictionary _additionalBinaryDataProperties; - public VectorStoreCreationOptions() + public VectorStoreCreationOptions() : this(null, null, null, null, null, null) { - FileIds = new ChangeTrackingList(); - Metadata = new ChangeTrackingDictionary(); } internal VectorStoreCreationOptions(IList fileIds, string name, IDictionary metadata, VectorStoreExpirationPolicy expirationPolicy, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) { - FileIds = fileIds; + // Plugin customization: ensure initialization of collections + FileIds = fileIds ?? new ChangeTrackingList(); Name = name; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); ExpirationPolicy = expirationPolicy; ChunkingStrategy = chunkingStrategy; _additionalBinaryDataProperties = additionalBinaryDataProperties; diff --git a/src/Generated/Models/VectorStoreDeletionResult.Serialization.cs b/src/Generated/Models/VectorStoreDeletionResult.Serialization.cs index 966ed1749..1a6abe4a7 100644 --- a/src/Generated/Models/VectorStoreDeletionResult.Serialization.cs +++ b/src/Generated/Models/VectorStoreDeletionResult.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -44,8 +45,9 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -69,6 +71,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreDeletionResult IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreDeletionResult JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -88,7 +91,7 @@ internal static VectorStoreDeletionResult DeserializeVectorStoreDeletionResult(J } bool deleted = default; string vectorStoreId = default; - InternalDeleteVectorStoreResponseObject @object = default; + string @object = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); foreach (var prop in element.EnumerateObject()) { @@ -104,9 +107,10 @@ internal static VectorStoreDeletionResult DeserializeVectorStoreDeletionResult(J } if (prop.NameEquals("object"u8)) { - @object = new InternalDeleteVectorStoreResponseObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreDeletionResult(deleted, vectorStoreId, @object, additionalBinaryDataProperties); @@ -114,13 +118,14 @@ internal static VectorStoreDeletionResult DeserializeVectorStoreDeletionResult(J BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreDeletionResult)} does not support writing '{options.Format}' format."); } @@ -128,6 +133,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreDeletionResult IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreDeletionResult PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -144,21 +150,5 @@ protected virtual VectorStoreDeletionResult PersistableModelCreateCore(BinaryDat } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreDeletionResult vectorStoreDeletionResult) - { - if (vectorStoreDeletionResult == null) - { - return null; - } - return BinaryContent.Create(vectorStoreDeletionResult, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreDeletionResult(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreDeletionResult(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreDeletionResult.cs b/src/Generated/Models/VectorStoreDeletionResult.cs index c02962e8a..57092aa3b 100644 --- a/src/Generated/Models/VectorStoreDeletionResult.cs +++ b/src/Generated/Models/VectorStoreDeletionResult.cs @@ -17,7 +17,7 @@ internal VectorStoreDeletionResult(bool deleted, string vectorStoreId) VectorStoreId = vectorStoreId; } - internal VectorStoreDeletionResult(bool deleted, string vectorStoreId, InternalDeleteVectorStoreResponseObject @object, IDictionary additionalBinaryDataProperties) + internal VectorStoreDeletionResult(bool deleted, string vectorStoreId, string @object, IDictionary additionalBinaryDataProperties) { Deleted = deleted; VectorStoreId = vectorStoreId; diff --git a/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs b/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs index d1a0a4c09..6c927f907 100644 --- a/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs +++ b/src/Generated/Models/VectorStoreExpirationPolicy.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("anchor"u8); writer.WriteStringValue(Anchor.ToSerialString()); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreExpirationPolicy IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreExpirationPolicy JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static VectorStoreExpirationPolicy DeserializeVectorStoreExpirationPoli anchor = prop.Value.GetString().ToVectorStoreExpirationAnchor(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreExpirationPolicy(days, anchor, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static VectorStoreExpirationPolicy DeserializeVectorStoreExpirationPoli BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreExpirationPolicy)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreExpirationPolicy IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreExpirationPolicy PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual VectorStoreExpirationPolicy PersistableModelCreateCore(BinaryD } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreExpirationPolicy vectorStoreExpirationPolicy) - { - if (vectorStoreExpirationPolicy == null) - { - return null; - } - return BinaryContent.Create(vectorStoreExpirationPolicy, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreExpirationPolicy(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreExpirationPolicy(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs b/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs index bb107c8b7..6bf49e7bb 100644 --- a/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileAssociation.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,7 +13,7 @@ namespace OpenAI.VectorStores { public partial class VectorStoreFileAssociation : IJsonModel { - internal VectorStoreFileAssociation() + internal VectorStoreFileAssociation() : this(default, null, default, null, null, null, default, null, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRe writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -61,7 +62,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit if (_additionalBinaryDataProperties?.ContainsKey("object") != true) { writer.WritePropertyName("object"u8); - writer.WriteStringValue(Object.ToString()); + writer.WriteStringValue(Object); } if (_additionalBinaryDataProperties?.ContainsKey("id") != true) { @@ -101,6 +102,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("chunking_strategy"u8); writer.WriteObjectValue(ChunkingStrategy, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -124,6 +126,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreFileAssociation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreFileAssociation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -145,7 +148,7 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation string vectorStoreId = default; VectorStoreFileAssociationStatus status = default; VectorStoreFileAssociationError lastError = default; - InternalVectorStoreFileObjectObject @object = default; + string @object = default; string fileId = default; int size = default; IDictionary attributes = default; @@ -180,7 +183,7 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation } if (prop.NameEquals("object"u8)) { - @object = new InternalVectorStoreFileObjectObject(prop.Value.GetString()); + @object = prop.Value.GetString(); continue; } if (prop.NameEquals("id"u8)) @@ -223,6 +226,7 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation chunkingStrategy = FileChunkingStrategy.DeserializeFileChunkingStrategy(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreFileAssociation( @@ -240,13 +244,14 @@ internal static VectorStoreFileAssociation DeserializeVectorStoreFileAssociation BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreFileAssociation)} does not support writing '{options.Format}' format."); } @@ -254,6 +259,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreFileAssociation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreFileAssociation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -270,21 +276,5 @@ protected virtual VectorStoreFileAssociation PersistableModelCreateCore(BinaryDa } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreFileAssociation vectorStoreFileAssociation) - { - if (vectorStoreFileAssociation == null) - { - return null; - } - return BinaryContent.Create(vectorStoreFileAssociation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreFileAssociation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreFileAssociation(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreFileAssociation.cs b/src/Generated/Models/VectorStoreFileAssociation.cs index 2323433ec..871b705ca 100644 --- a/src/Generated/Models/VectorStoreFileAssociation.cs +++ b/src/Generated/Models/VectorStoreFileAssociation.cs @@ -23,8 +23,9 @@ internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStore Attributes = new ChangeTrackingDictionary(); } - internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStoreId, VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError lastError, InternalVectorStoreFileObjectObject @object, string fileId, int size, IDictionary attributes, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) + internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStoreId, VectorStoreFileAssociationStatus status, VectorStoreFileAssociationError lastError, string @object, string fileId, int size, IDictionary attributes, FileChunkingStrategy chunkingStrategy, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections CreatedAt = createdAt; VectorStoreId = vectorStoreId; Status = status; @@ -32,7 +33,7 @@ internal VectorStoreFileAssociation(DateTimeOffset createdAt, string vectorStore Object = @object; FileId = fileId; Size = size; - Attributes = attributes; + Attributes = attributes ?? new ChangeTrackingDictionary(); ChunkingStrategy = chunkingStrategy; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs b/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs index 124ba34a0..a1f625b58 100644 --- a/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileAssociationError.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mo writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -41,6 +42,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("message"u8); writer.WriteStringValue(Message); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -64,6 +66,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreFileAssociationError IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreFileAssociationError JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -96,6 +99,7 @@ internal static VectorStoreFileAssociationError DeserializeVectorStoreFileAssoci message = prop.Value.GetString(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreFileAssociationError(code, message, additionalBinaryDataProperties); @@ -103,13 +107,14 @@ internal static VectorStoreFileAssociationError DeserializeVectorStoreFileAssoci BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreFileAssociationError)} does not support writing '{options.Format}' format."); } @@ -117,6 +122,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreFileAssociationError IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreFileAssociationError PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -133,21 +139,5 @@ protected virtual VectorStoreFileAssociationError PersistableModelCreateCore(Bin } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreFileAssociationError vectorStoreFileAssociationError) - { - if (vectorStoreFileAssociationError == null) - { - return null; - } - return BinaryContent.Create(vectorStoreFileAssociationError, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreFileAssociationError(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreFileAssociationError(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreFileCounts.Serialization.cs b/src/Generated/Models/VectorStoreFileCounts.Serialization.cs index 3f5e04a03..8ee35c86b 100644 --- a/src/Generated/Models/VectorStoreFileCounts.Serialization.cs +++ b/src/Generated/Models/VectorStoreFileCounts.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderW writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -56,6 +57,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("total"u8); writer.WriteNumberValue(Total); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -79,6 +81,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreFileCounts IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreFileCounts JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -129,6 +132,7 @@ internal static VectorStoreFileCounts DeserializeVectorStoreFileCounts(JsonEleme total = prop.Value.GetInt32(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreFileCounts( @@ -142,13 +146,14 @@ internal static VectorStoreFileCounts DeserializeVectorStoreFileCounts(JsonEleme BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreFileCounts)} does not support writing '{options.Format}' format."); } @@ -156,6 +161,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreFileCounts IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreFileCounts PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -172,21 +178,5 @@ protected virtual VectorStoreFileCounts PersistableModelCreateCore(BinaryData da } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreFileCounts vectorStoreFileCounts) - { - if (vectorStoreFileCounts == null) - { - return null; - } - return BinaryContent.Create(vectorStoreFileCounts, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreFileCounts(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreFileCounts(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs b/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs index 06ace1219..0b2fe9189 100644 --- a/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs +++ b/src/Generated/Models/VectorStoreModificationOptions.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -20,6 +20,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, Mod writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -53,6 +54,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit writer.WritePropertyName("expires_after"u8); writer.WriteObjectValue(ExpirationPolicy, options); } + // Plugin customization: remove options.Format != "W" check if (_additionalBinaryDataProperties != null) { foreach (var item in _additionalBinaryDataProperties) @@ -76,6 +78,7 @@ protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWrit VectorStoreModificationOptions IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected virtual VectorStoreModificationOptions JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -140,6 +143,7 @@ internal static VectorStoreModificationOptions DeserializeVectorStoreModificatio expirationPolicy = VectorStoreExpirationPolicy.DeserializeVectorStoreExpirationPolicy(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } return new VectorStoreModificationOptions(name, metadata ?? new ChangeTrackingDictionary(), expirationPolicy, additionalBinaryDataProperties); @@ -147,13 +151,14 @@ internal static VectorStoreModificationOptions DeserializeVectorStoreModificatio BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(VectorStoreModificationOptions)} does not support writing '{options.Format}' format."); } @@ -161,6 +166,7 @@ protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions VectorStoreModificationOptions IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected virtual VectorStoreModificationOptions PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -177,21 +183,5 @@ protected virtual VectorStoreModificationOptions PersistableModelCreateCore(Bina } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(VectorStoreModificationOptions vectorStoreModificationOptions) - { - if (vectorStoreModificationOptions == null) - { - return null; - } - return BinaryContent.Create(vectorStoreModificationOptions, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator VectorStoreModificationOptions(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeVectorStoreModificationOptions(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/VectorStoreModificationOptions.cs b/src/Generated/Models/VectorStoreModificationOptions.cs index 9a581468d..ae9cd56fb 100644 --- a/src/Generated/Models/VectorStoreModificationOptions.cs +++ b/src/Generated/Models/VectorStoreModificationOptions.cs @@ -12,15 +12,15 @@ public partial class VectorStoreModificationOptions { private protected IDictionary _additionalBinaryDataProperties; - public VectorStoreModificationOptions() + public VectorStoreModificationOptions() : this(null, null, null, null) { - Metadata = new ChangeTrackingDictionary(); } internal VectorStoreModificationOptions(string name, IDictionary metadata, VectorStoreExpirationPolicy expirationPolicy, IDictionary additionalBinaryDataProperties) { + // Plugin customization: ensure initialization of collections Name = name; - Metadata = metadata; + Metadata = metadata ?? new ChangeTrackingDictionary(); ExpirationPolicy = expirationPolicy; _additionalBinaryDataProperties = additionalBinaryDataProperties; } diff --git a/src/Generated/Models/WebSearchCallResponseItem.Serialization.cs b/src/Generated/Models/WebSearchCallResponseItem.Serialization.cs index 5dd469ea9..fc5240e97 100644 --- a/src/Generated/Models/WebSearchCallResponseItem.Serialization.cs +++ b/src/Generated/Models/WebSearchCallResponseItem.Serialization.cs @@ -3,9 +3,9 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; @@ -13,6 +13,10 @@ namespace OpenAI.Responses { public partial class WebSearchCallResponseItem : IJsonModel { + internal WebSearchCallResponseItem() : this(InternalItemType.WebSearchCall, null, null, default) + { + } + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) { writer.WriteStartObject(); @@ -20,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelRea writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -28,15 +33,17 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri throw new FormatException($"The model {nameof(WebSearchCallResponseItem)} does not support writing '{format}' format."); } base.JsonModelWriteCore(writer, options); - if (_additionalBinaryDataProperties?.ContainsKey("status") != true) + // Plugin customization: apply Optional.Is*Defined() check based on type name dictionary lookup + if (Optional.IsDefined(Status) && _additionalBinaryDataProperties?.ContainsKey("status") != true) { writer.WritePropertyName("status"u8); - writer.WriteStringValue(Status.ToSerialString()); + writer.WriteStringValue(Status.Value.ToSerialString()); } } WebSearchCallResponseItem IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (WebSearchCallResponseItem)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override ResponseItem JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -54,15 +61,15 @@ internal static WebSearchCallResponseItem DeserializeWebSearchCallResponseItem(J { return null; } - InternalResponsesItemType @type = default; + InternalItemType kind = default; string id = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - WebSearchCallStatus status = default; + WebSearchCallStatus? status = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = new InternalResponsesItemType(prop.Value.GetString()); + kind = new InternalItemType(prop.Value.GetString()); continue; } if (prop.NameEquals("id"u8)) @@ -75,20 +82,22 @@ internal static WebSearchCallResponseItem DeserializeWebSearchCallResponseItem(J status = prop.Value.GetString().ToWebSearchCallStatus(); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new WebSearchCallResponseItem(@type, id, additionalBinaryDataProperties, status); + return new WebSearchCallResponseItem(kind, id, additionalBinaryDataProperties, status); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(WebSearchCallResponseItem)} does not support writing '{options.Format}' format."); } @@ -96,6 +105,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions WebSearchCallResponseItem IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (WebSearchCallResponseItem)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override ResponseItem PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -112,21 +122,5 @@ protected override ResponseItem PersistableModelCreateCore(BinaryData data, Mode } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(WebSearchCallResponseItem webSearchCallResponseItem) - { - if (webSearchCallResponseItem == null) - { - return null; - } - return BinaryContent.Create(webSearchCallResponseItem, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator WebSearchCallResponseItem(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeWebSearchCallResponseItem(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/WebSearchCallResponseItem.cs b/src/Generated/Models/WebSearchCallResponseItem.cs index bccdc2e05..6ebb260ed 100644 --- a/src/Generated/Models/WebSearchCallResponseItem.cs +++ b/src/Generated/Models/WebSearchCallResponseItem.cs @@ -9,15 +9,14 @@ namespace OpenAI.Responses { public partial class WebSearchCallResponseItem : ResponseItem { - public WebSearchCallResponseItem() : base(InternalResponsesItemType.WebSearchCall) + internal WebSearchCallResponseItem(string id, WebSearchCallStatus? status) : base(InternalItemType.WebSearchCall, id) { + Status = status; } - internal WebSearchCallResponseItem(InternalResponsesItemType @type, string id, IDictionary additionalBinaryDataProperties, WebSearchCallStatus status) : base(@type, id, additionalBinaryDataProperties) + internal WebSearchCallResponseItem(InternalItemType kind, string id, IDictionary additionalBinaryDataProperties, WebSearchCallStatus? status) : base(kind, id, additionalBinaryDataProperties) { Status = status; } - - public WebSearchCallStatus Status { get; } } } diff --git a/src/Generated/Models/WebSearchContextSize.cs b/src/Generated/Models/WebSearchContextSize.cs new file mode 100644 index 000000000..54138df91 --- /dev/null +++ b/src/Generated/Models/WebSearchContextSize.cs @@ -0,0 +1,47 @@ +// + +#nullable disable + +using System; +using System.ComponentModel; +using OpenAI; + +namespace OpenAI.Responses +{ + public readonly partial struct WebSearchContextSize : IEquatable + { + private readonly string _value; + private const string LowValue = "low"; + private const string MediumValue = "medium"; + private const string HighValue = "high"; + + public WebSearchContextSize(string value) + { + Argument.AssertNotNull(value, nameof(value)); + + _value = value; + } + + public static WebSearchContextSize Low { get; } = new WebSearchContextSize(LowValue); + + public static WebSearchContextSize Medium { get; } = new WebSearchContextSize(MediumValue); + + public static WebSearchContextSize High { get; } = new WebSearchContextSize(HighValue); + + public static bool operator ==(WebSearchContextSize left, WebSearchContextSize right) => left.Equals(right); + + public static bool operator !=(WebSearchContextSize left, WebSearchContextSize right) => !left.Equals(right); + + public static implicit operator WebSearchContextSize(string value) => new WebSearchContextSize(value); + + [EditorBrowsable(EditorBrowsableState.Never)] + public override bool Equals(object obj) => obj is WebSearchContextSize other && Equals(other); + + public bool Equals(WebSearchContextSize 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/WebSearchToolContextSize.cs b/src/Generated/Models/WebSearchToolContextSize.cs deleted file mode 100644 index 691dcb88c..000000000 --- a/src/Generated/Models/WebSearchToolContextSize.cs +++ /dev/null @@ -1,47 +0,0 @@ -// - -#nullable disable - -using System; -using System.ComponentModel; -using OpenAI; - -namespace OpenAI.Responses -{ - public readonly partial struct WebSearchToolContextSize : IEquatable - { - private readonly string _value; - private const string LowValue = "low"; - private const string MediumValue = "medium"; - private const string HighValue = "high"; - - public WebSearchToolContextSize(string value) - { - Argument.AssertNotNull(value, nameof(value)); - - _value = value; - } - - public static WebSearchToolContextSize Low { get; } = new WebSearchToolContextSize(LowValue); - - public static WebSearchToolContextSize Medium { get; } = new WebSearchToolContextSize(MediumValue); - - public static WebSearchToolContextSize High { get; } = new WebSearchToolContextSize(HighValue); - - public static bool operator ==(WebSearchToolContextSize left, WebSearchToolContextSize right) => left.Equals(right); - - public static bool operator !=(WebSearchToolContextSize left, WebSearchToolContextSize right) => !left.Equals(right); - - public static implicit operator WebSearchToolContextSize(string value) => new WebSearchToolContextSize(value); - - [EditorBrowsable(EditorBrowsableState.Never)] - public override bool Equals(object obj) => obj is WebSearchToolContextSize other && Equals(other); - - public bool Equals(WebSearchToolContextSize 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/WebSearchToolLocation.Serialization.cs b/src/Generated/Models/WebSearchToolLocation.Serialization.cs deleted file mode 100644 index 4acdd6db5..000000000 --- a/src/Generated/Models/WebSearchToolLocation.Serialization.cs +++ /dev/null @@ -1,134 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Text.Json; -using OpenAI; - -namespace OpenAI.Responses -{ - public partial class WebSearchToolLocation : IJsonModel - { - void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - writer.WriteStartObject(); - JsonModelWriteCore(writer, options); - writer.WriteEndObject(); - } - - protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(WebSearchToolLocation)} does not support writing '{format}' format."); - } - if (_additionalBinaryDataProperties?.ContainsKey("type") != true) - { - writer.WritePropertyName("type"u8); - writer.WriteStringValue(Type); - } - if (_additionalBinaryDataProperties != null) - { - foreach (var item in _additionalBinaryDataProperties) - { - if (ModelSerializationExtensions.IsSentinelValue(item.Value)) - { - continue; - } - writer.WritePropertyName(item.Key); -#if NET6_0_OR_GREATER - writer.WriteRawValue(item.Value); -#else - using (JsonDocument document = JsonDocument.Parse(item.Value)) - { - JsonSerializer.Serialize(writer, document.RootElement); - } -#endif - } - } - } - - WebSearchToolLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); - - protected virtual WebSearchToolLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - if (format != "J") - { - throw new FormatException($"The model {nameof(WebSearchToolLocation)} does not support reading '{format}' format."); - } - using JsonDocument document = JsonDocument.ParseValue(ref reader); - return DeserializeWebSearchToolLocation(document.RootElement, options); - } - - internal static WebSearchToolLocation DeserializeWebSearchToolLocation(JsonElement element, ModelReaderWriterOptions options) - { - if (element.ValueKind == JsonValueKind.Null) - { - return null; - } - if (element.TryGetProperty("type"u8, out JsonElement discriminator)) - { - switch (discriminator.GetString()) - { - case "approximate": - return InternalResponsesWebSearchApproximateLocation.DeserializeInternalResponsesWebSearchApproximateLocation(element, options); - } - } - return InternalUnknownResponsesWebSearchLocation.DeserializeInternalUnknownResponsesWebSearchLocation(element, options); - } - - BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); - - protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - return ModelReaderWriter.Write(this, options); - default: - throw new FormatException($"The model {nameof(WebSearchToolLocation)} does not support writing '{options.Format}' format."); - } - } - - WebSearchToolLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); - - protected virtual WebSearchToolLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) - { - string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; - switch (format) - { - case "J": - using (JsonDocument document = JsonDocument.Parse(data)) - { - return DeserializeWebSearchToolLocation(document.RootElement, options); - } - default: - throw new FormatException($"The model {nameof(WebSearchToolLocation)} does not support reading '{options.Format}' format."); - } - } - - string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(WebSearchToolLocation webSearchToolLocation) - { - if (webSearchToolLocation == null) - { - return null; - } - return BinaryContent.Create(webSearchToolLocation, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator WebSearchToolLocation(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeWebSearchToolLocation(document.RootElement, ModelSerializationExtensions.WireOptions); - } - } -} diff --git a/src/Generated/Models/WebSearchToolLocation.cs b/src/Generated/Models/WebSearchToolLocation.cs deleted file mode 100644 index cbfdb8393..000000000 --- a/src/Generated/Models/WebSearchToolLocation.cs +++ /dev/null @@ -1,32 +0,0 @@ -// - -#nullable disable - -using System; -using System.Collections.Generic; - -namespace OpenAI.Responses -{ - public partial class WebSearchToolLocation - { - private protected IDictionary _additionalBinaryDataProperties; - - private protected WebSearchToolLocation() - { - } - - internal WebSearchToolLocation(string @type, IDictionary additionalBinaryDataProperties) - { - Type = @type; - _additionalBinaryDataProperties = additionalBinaryDataProperties; - } - - internal string Type { get; set; } = "approximate"; - - internal IDictionary SerializedAdditionalRawData - { - get => _additionalBinaryDataProperties; - set => _additionalBinaryDataProperties = value; - } - } -} diff --git a/src/Generated/Models/WebSearchUserLocation.Serialization.cs b/src/Generated/Models/WebSearchUserLocation.Serialization.cs new file mode 100644 index 000000000..5b735402b --- /dev/null +++ b/src/Generated/Models/WebSearchUserLocation.Serialization.cs @@ -0,0 +1,128 @@ +// + +#nullable disable + +using System; +using System.ClientModel.Primitives; +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using OpenAI; + +namespace OpenAI.Responses +{ + [PersistableModelProxy(typeof(InternalUnknownDotnetResponseWebSearchLocation))] + public partial class WebSearchUserLocation : IJsonModel + { + internal WebSearchUserLocation() + { + } + + void IJsonModel.Write(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + writer.WriteStartObject(); + JsonModelWriteCore(writer, options); + writer.WriteEndObject(); + } + + [Experimental("OPENAI001")] + protected virtual void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(WebSearchUserLocation)} does not support writing '{format}' format."); + } + if (_additionalBinaryDataProperties?.ContainsKey("type") != true) + { + writer.WritePropertyName("type"u8); + writer.WriteStringValue(Kind.ToString()); + } + // Plugin customization: remove options.Format != "W" check + if (_additionalBinaryDataProperties != null) + { + foreach (var item in _additionalBinaryDataProperties) + { + if (ModelSerializationExtensions.IsSentinelValue(item.Value)) + { + continue; + } + writer.WritePropertyName(item.Key); +#if NET6_0_OR_GREATER + writer.WriteRawValue(item.Value); +#else + using (JsonDocument document = JsonDocument.Parse(item.Value)) + { + JsonSerializer.Serialize(writer, document.RootElement); + } +#endif + } + } + } + + WebSearchUserLocation IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => JsonModelCreateCore(ref reader, options); + + [Experimental("OPENAI001")] + protected virtual WebSearchUserLocation JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + if (format != "J") + { + throw new FormatException($"The model {nameof(WebSearchUserLocation)} does not support reading '{format}' format."); + } + using JsonDocument document = JsonDocument.ParseValue(ref reader); + return DeserializeWebSearchUserLocation(document.RootElement, options); + } + + internal static WebSearchUserLocation DeserializeWebSearchUserLocation(JsonElement element, ModelReaderWriterOptions options) + { + if (element.ValueKind == JsonValueKind.Null) + { + return null; + } + if (element.TryGetProperty("type"u8, out JsonElement discriminator)) + { + switch (discriminator.GetString()) + { + case "approximate": + return InternalDotnetResponseWebSearchApproximateLocation.DeserializeInternalDotnetResponseWebSearchApproximateLocation(element, options); + } + } + return InternalUnknownDotnetResponseWebSearchLocation.DeserializeInternalUnknownDotnetResponseWebSearchLocation(element, options); + } + + BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + + [Experimental("OPENAI001")] + protected virtual BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) + { + 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(WebSearchUserLocation)} does not support writing '{options.Format}' format."); + } + } + + WebSearchUserLocation IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => PersistableModelCreateCore(data, options); + + [Experimental("OPENAI001")] + protected virtual WebSearchUserLocation PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) + { + string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; + switch (format) + { + case "J": + using (JsonDocument document = JsonDocument.Parse(data)) + { + return DeserializeWebSearchUserLocation(document.RootElement, options); + } + default: + throw new FormatException($"The model {nameof(WebSearchUserLocation)} does not support reading '{options.Format}' format."); + } + } + + string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; + } +} diff --git a/src/Generated/Models/WebSearchUserLocation.cs b/src/Generated/Models/WebSearchUserLocation.cs new file mode 100644 index 000000000..33b73b6ca --- /dev/null +++ b/src/Generated/Models/WebSearchUserLocation.cs @@ -0,0 +1,33 @@ +// + +#nullable disable + +using System; +using System.Collections.Generic; + +namespace OpenAI.Responses +{ + public partial class WebSearchUserLocation + { + private protected IDictionary _additionalBinaryDataProperties; + + private protected WebSearchUserLocation(InternalWebSearchUserLocationKind kind) + { + Kind = kind; + } + + internal WebSearchUserLocation(InternalWebSearchUserLocationKind kind, IDictionary additionalBinaryDataProperties) + { + Kind = kind; + _additionalBinaryDataProperties = additionalBinaryDataProperties; + } + + internal InternalWebSearchUserLocationKind Kind { get; set; } + + internal IDictionary SerializedAdditionalRawData + { + get => _additionalBinaryDataProperties; + set => _additionalBinaryDataProperties = value; + } + } +} diff --git a/src/Generated/Models/WeightsAndBiasesIntegration.Serialization.cs b/src/Generated/Models/WeightsAndBiasesIntegration.Serialization.cs index 85e3ac124..a556332e0 100644 --- a/src/Generated/Models/WeightsAndBiasesIntegration.Serialization.cs +++ b/src/Generated/Models/WeightsAndBiasesIntegration.Serialization.cs @@ -3,17 +3,17 @@ #nullable disable using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using OpenAI; namespace OpenAI.FineTuning { - internal partial class WeightsAndBiasesIntegration : IJsonModel + public partial class WeightsAndBiasesIntegration : IJsonModel { - internal WeightsAndBiasesIntegration() + internal WeightsAndBiasesIntegration() : this(InternalCreateFineTuningJobRequestIntegrationType.Wandb, null, null) { } @@ -24,6 +24,7 @@ void IJsonModel.Write(Utf8JsonWriter writer, ModelR writer.WriteEndObject(); } + [Experimental("OPENAI001")] protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -35,12 +36,13 @@ protected override void JsonModelWriteCore(Utf8JsonWriter writer, ModelReaderWri if (_additionalBinaryDataProperties?.ContainsKey("wandb") != true) { writer.WritePropertyName("wandb"u8); - writer.WriteObjectValue(Wandb, options); + writer.WriteObjectValue(_innerWandb, options); } } WeightsAndBiasesIntegration IJsonModel.Create(ref Utf8JsonReader reader, ModelReaderWriterOptions options) => (WeightsAndBiasesIntegration)JsonModelCreateCore(ref reader, options); + [Experimental("OPENAI001")] protected override FineTuningIntegration JsonModelCreateCore(ref Utf8JsonReader reader, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -58,35 +60,37 @@ internal static WeightsAndBiasesIntegration DeserializeWeightsAndBiasesIntegrati { return null; } - string @type = "wandb"; + InternalCreateFineTuningJobRequestIntegrationType kind = default; IDictionary additionalBinaryDataProperties = new ChangeTrackingDictionary(); - InternalCreateFineTuningJobRequestWandbIntegrationWandb wandb = default; + InternalCreateFineTuningJobRequestWandbIntegrationWandb innerWandb = default; foreach (var prop in element.EnumerateObject()) { if (prop.NameEquals("type"u8)) { - @type = prop.Value.GetString(); + kind = new InternalCreateFineTuningJobRequestIntegrationType(prop.Value.GetString()); continue; } if (prop.NameEquals("wandb"u8)) { - wandb = InternalCreateFineTuningJobRequestWandbIntegrationWandb.DeserializeInternalCreateFineTuningJobRequestWandbIntegrationWandb(prop.Value, options); + innerWandb = InternalCreateFineTuningJobRequestWandbIntegrationWandb.DeserializeInternalCreateFineTuningJobRequestWandbIntegrationWandb(prop.Value, options); continue; } + // Plugin customization: remove options.Format != "W" check additionalBinaryDataProperties.Add(prop.Name, BinaryData.FromString(prop.Value.GetRawText())); } - return new WeightsAndBiasesIntegration(@type, additionalBinaryDataProperties, wandb); + return new WeightsAndBiasesIntegration(kind, additionalBinaryDataProperties, innerWandb); } BinaryData IPersistableModel.Write(ModelReaderWriterOptions options) => PersistableModelWriteCore(options); + [Experimental("OPENAI001")] protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; switch (format) { case "J": - return ModelReaderWriter.Write(this, options); + return ModelReaderWriter.Write(this, options, OpenAIContext.Default); default: throw new FormatException($"The model {nameof(WeightsAndBiasesIntegration)} does not support writing '{options.Format}' format."); } @@ -94,6 +98,7 @@ protected override BinaryData PersistableModelWriteCore(ModelReaderWriterOptions WeightsAndBiasesIntegration IPersistableModel.Create(BinaryData data, ModelReaderWriterOptions options) => (WeightsAndBiasesIntegration)PersistableModelCreateCore(data, options); + [Experimental("OPENAI001")] protected override FineTuningIntegration PersistableModelCreateCore(BinaryData data, ModelReaderWriterOptions options) { string format = options.Format == "W" ? ((IPersistableModel)this).GetFormatFromOptions(options) : options.Format; @@ -110,21 +115,5 @@ protected override FineTuningIntegration PersistableModelCreateCore(BinaryData d } string IPersistableModel.GetFormatFromOptions(ModelReaderWriterOptions options) => "J"; - - public static implicit operator BinaryContent(WeightsAndBiasesIntegration weightsAndBiasesIntegration) - { - if (weightsAndBiasesIntegration == null) - { - return null; - } - return BinaryContent.Create(weightsAndBiasesIntegration, ModelSerializationExtensions.WireOptions); - } - - public static explicit operator WeightsAndBiasesIntegration(ClientResult result) - { - using PipelineResponse response = result.GetRawResponse(); - using JsonDocument document = JsonDocument.Parse(response.Content); - return DeserializeWeightsAndBiasesIntegration(document.RootElement, ModelSerializationExtensions.WireOptions); - } } } diff --git a/src/Generated/Models/WeightsAndBiasesIntegration.cs b/src/Generated/Models/WeightsAndBiasesIntegration.cs index 7a9991f10..365dcaaba 100644 --- a/src/Generated/Models/WeightsAndBiasesIntegration.cs +++ b/src/Generated/Models/WeightsAndBiasesIntegration.cs @@ -4,24 +4,14 @@ using System; using System.Collections.Generic; -using OpenAI; namespace OpenAI.FineTuning { - internal partial class WeightsAndBiasesIntegration : FineTuningIntegration + public partial class WeightsAndBiasesIntegration : FineTuningIntegration { - public WeightsAndBiasesIntegration(InternalCreateFineTuningJobRequestWandbIntegrationWandb wandb) : base("wandb") + internal WeightsAndBiasesIntegration(InternalCreateFineTuningJobRequestIntegrationType kind, IDictionary additionalBinaryDataProperties, InternalCreateFineTuningJobRequestWandbIntegrationWandb innerWandb) : base(kind, additionalBinaryDataProperties) { - Argument.AssertNotNull(wandb, nameof(wandb)); - - Wandb = wandb; + _innerWandb = innerWandb; } - - internal WeightsAndBiasesIntegration(string @type, IDictionary additionalBinaryDataProperties, InternalCreateFineTuningJobRequestWandbIntegrationWandb wandb) : base(@type, additionalBinaryDataProperties) - { - Wandb = wandb; - } - - public InternalCreateFineTuningJobRequestWandbIntegrationWandb Wandb { get; } } } diff --git a/src/Generated/OpenAIClient.cs b/src/Generated/OpenAIClient.cs index b3167dce3..0dd087439 100644 --- a/src/Generated/OpenAIClient.cs +++ b/src/Generated/OpenAIClient.cs @@ -5,8 +5,6 @@ using System; using System.ClientModel; using System.ClientModel.Primitives; -using System.Threading; -using OpenAI.Responses; namespace OpenAI { @@ -16,17 +14,11 @@ public partial class OpenAIClient private readonly ApiKeyCredential _keyCredential; private const string AuthorizationHeader = "Authorization"; private const string AuthorizationApiKeyPrefix = "Bearer"; - private OpenAIResponseClient _cachedOpenAIResponseClient; protected OpenAIClient() { } public ClientPipeline Pipeline { get; } - - public virtual OpenAIResponseClient GetOpenAIResponseClient() - { - return Volatile.Read(ref _cachedOpenAIResponseClient) ?? Interlocked.CompareExchange(ref _cachedOpenAIResponseClient, new OpenAIResponseClient(Pipeline, _endpoint), null) ?? _cachedOpenAIResponseClient; - } } } diff --git a/src/Generated/OpenAIFileClient.RestClient.cs b/src/Generated/OpenAIFileClient.RestClient.cs index d47b1cc5b..6d6531ef3 100644 --- a/src/Generated/OpenAIFileClient.RestClient.cs +++ b/src/Generated/OpenAIFileClient.RestClient.cs @@ -14,48 +14,48 @@ public partial class OpenAIFileClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal virtual PipelineMessage CreateCreateFileRequest(BinaryContent content, string contentType, RequestOptions options) + internal virtual PipelineMessage CreateGetFilesRequest(string purpose, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "POST"; + request.Method = "GET"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/files", false); + if (purpose != null) + { + uri.AppendQuery("purpose", purpose, true); + } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); - request.Headers.Set("Content-Type", contentType); - request.Content = content; message.Apply(options); return message; } - internal virtual PipelineMessage CreateListFilesRequest(string purpose, RequestOptions options) + internal virtual PipelineMessage CreateCreateFileRequest(BinaryContent content, string contentType, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "GET"; + request.Method = "POST"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/files", false); - if (purpose != null) - { - uri.AppendQuery("purpose", purpose, true); - } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Content-Type", contentType); + request.Content = content; message.Apply(options); return message; } - internal virtual PipelineMessage CreateRetrieveFileRequest(string fileId, RequestOptions options) + internal virtual PipelineMessage CreateDeleteFileRequest(string fileId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "GET"; + request.Method = "DELETE"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/files/", false); @@ -66,12 +66,12 @@ internal virtual PipelineMessage CreateRetrieveFileRequest(string fileId, Reques return message; } - internal virtual PipelineMessage CreateDeleteFileRequest(string fileId, RequestOptions options) + internal virtual PipelineMessage CreateRetrieveFileRequest(string fileId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "DELETE"; + request.Method = "GET"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/files/", false); diff --git a/src/Generated/OpenAIModelClient.RestClient.cs b/src/Generated/OpenAIModelClient.RestClient.cs index f1d547240..4114b8d72 100644 --- a/src/Generated/OpenAIModelClient.RestClient.cs +++ b/src/Generated/OpenAIModelClient.RestClient.cs @@ -13,7 +13,7 @@ public partial class OpenAIModelClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal virtual PipelineMessage CreateListModelsRequest(RequestOptions options) + internal virtual PipelineMessage CreateGetModelsRequest(RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; diff --git a/src/Generated/OpenAIModelFactory.cs b/src/Generated/OpenAIModelFactory.cs index 6579fe128..aebfac83b 100644 --- a/src/Generated/OpenAIModelFactory.cs +++ b/src/Generated/OpenAIModelFactory.cs @@ -9,9 +9,12 @@ using OpenAI.Audio; using OpenAI.Chat; using OpenAI.Embeddings; +using OpenAI.Files; +using OpenAI.FineTuning; using OpenAI.Images; +using OpenAI.Models; using OpenAI.Moderations; -using OpenAI.RealtimeConversation; +using OpenAI.Realtime; using OpenAI.Responses; using OpenAI.VectorStores; @@ -19,113 +22,315 @@ namespace OpenAI { internal static partial class OpenAIModelFactory { - public static VectorStoreFileCounts VectorStoreFileCounts(int inProgress = default, int completed = default, int failed = default, int cancelled = default, int total = default) + public static TranscribedWord TranscribedWord(string word = default, TimeSpan startTime = default, TimeSpan endTime = default) { + return new TranscribedWord(word, startTime, endTime, additionalBinaryDataProperties: null); + } - return new VectorStoreFileCounts( - inProgress, - completed, - failed, - cancelled, - total, + public static TranscribedSegment TranscribedSegment(int id = default, string text = default, float temperature = default, float compressionRatio = default, TimeSpan startTime = default, TimeSpan endTime = default, int seekOffset = default, ReadOnlyMemory tokenIds = default, float averageLogProbability = default, float noSpeechProbability = default) + { + return new TranscribedSegment( + id, + text, + temperature, + compressionRatio, + startTime, + endTime, + seekOffset, + tokenIds, + averageLogProbability, + noSpeechProbability, additionalBinaryDataProperties: null); } - public static VectorStoreExpirationPolicy VectorStoreExpirationPolicy(int days = default, VectorStoreExpirationAnchor anchor = default) + public static StreamingAudioTranscriptionUpdate StreamingAudioTranscriptionUpdate(string kind = default) { + return new InternalUnknownCreateTranscriptionResponseStreamEvent(new StreamingAudioTranscriptionUpdateKind(kind), additionalBinaryDataProperties: null); + } - return new VectorStoreExpirationPolicy(days, anchor, additionalBinaryDataProperties: null); + public static StreamingAudioTranscriptionTextDeltaUpdate StreamingAudioTranscriptionTextDeltaUpdate(string delta = default, IEnumerable transcriptionTokenLogProbabilities = default) + { + transcriptionTokenLogProbabilities ??= new ChangeTrackingList(); + + return new StreamingAudioTranscriptionTextDeltaUpdate(StreamingAudioTranscriptionUpdateKind.TranscriptTextDelta, additionalBinaryDataProperties: null, delta, transcriptionTokenLogProbabilities?.ToList()); } - public static VectorStoreCreationOptions VectorStoreCreationOptions(IEnumerable fileIds = default, string name = default, IDictionary metadata = default, VectorStoreExpirationPolicy expirationPolicy = default, FileChunkingStrategy chunkingStrategy = default) + public static StreamingAudioTranscriptionTextDoneUpdate StreamingAudioTranscriptionTextDoneUpdate(string text = default, IEnumerable transcriptionTokenLogProbabilities = default) + { + transcriptionTokenLogProbabilities ??= new ChangeTrackingList(); + + return new StreamingAudioTranscriptionTextDoneUpdate(StreamingAudioTranscriptionUpdateKind.TranscriptTextDone, additionalBinaryDataProperties: null, text, transcriptionTokenLogProbabilities?.ToList()); + } + + public static AudioTranslation AudioTranslation(string language = default, string text = default, IEnumerable segments = default, string task = default, TimeSpan? duration = default) + { + segments ??= new ChangeTrackingList(); + + return new AudioTranslation( + language, + text, + segments?.ToList(), + task, + duration, + additionalBinaryDataProperties: null); + } + + public static Assistant Assistant(string id = default, DateTimeOffset createdAt = default, string name = default, string description = default, string model = default, string instructions = default, IEnumerable tools = default, ToolResources toolResources = default, IReadOnlyDictionary metadata = default, float? temperature = default, string @object = default, AssistantResponseFormat responseFormat = default, float? nucleusSamplingFactor = default) + { + tools ??= new ChangeTrackingList(); + metadata ??= new ChangeTrackingDictionary(); + + return new Assistant( + id, + createdAt, + name, + description, + model, + instructions, + tools?.ToList(), + toolResources, + metadata, + temperature, + @object, + responseFormat, + nucleusSamplingFactor, + additionalBinaryDataProperties: null); + } + + public static FileSearchRankingOptions FileSearchRankingOptions(FileSearchRanker? ranker = default, float scoreThreshold = default) + { + return new FileSearchRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties: null); + } + + public static ToolResources ToolResources(CodeInterpreterToolResources codeInterpreter = default, FileSearchToolResources fileSearch = default) + { + return new ToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties: null); + } + + public static CodeInterpreterToolResources CodeInterpreterToolResources(IEnumerable fileIds = default) { fileIds ??= new ChangeTrackingList(); + + return new CodeInterpreterToolResources(fileIds?.ToList(), additionalBinaryDataProperties: null); + } + + public static AssistantCreationOptions AssistantCreationOptions(string name = default, string description = default, string instructions = default, IDictionary metadata = default, float? temperature = default, string model = default, IEnumerable tools = default, ToolResources toolResources = default, AssistantResponseFormat responseFormat = default, float? nucleusSamplingFactor = default, ChatReasoningEffortLevel? reasoningEffortLevel = default) + { metadata ??= new ChangeTrackingDictionary(); + tools ??= new ChangeTrackingList(); - return new VectorStoreCreationOptions( - fileIds?.ToList(), + return new AssistantCreationOptions( name, + description, + instructions, metadata, - expirationPolicy, - chunkingStrategy, + temperature, + model, + tools?.ToList(), + toolResources, + responseFormat, + nucleusSamplingFactor, + reasoningEffortLevel, additionalBinaryDataProperties: null); } - public static VectorStoreModificationOptions VectorStoreModificationOptions(string name = default, IDictionary metadata = default, VectorStoreExpirationPolicy expirationPolicy = default) + public static FileSearchToolResources FileSearchToolResources(IEnumerable vectorStoreIds = default, IEnumerable newVectorStores = default) + { + vectorStoreIds ??= new ChangeTrackingList(); + newVectorStores ??= new ChangeTrackingList(); + + return new FileSearchToolResources(vectorStoreIds?.ToList(), newVectorStores?.ToList(), additionalBinaryDataProperties: null); + } + + public static VectorStoreCreationHelper VectorStoreCreationHelper(IEnumerable fileIds = default, IDictionary metadata = default, FileChunkingStrategy chunkingStrategy = default) { + fileIds ??= new ChangeTrackingList(); metadata ??= new ChangeTrackingDictionary(); - return new VectorStoreModificationOptions(name, metadata, expirationPolicy, additionalBinaryDataProperties: null); + return new VectorStoreCreationHelper(fileIds?.ToList(), metadata, chunkingStrategy, additionalBinaryDataProperties: null); } - public static VectorStoreFileAssociationError VectorStoreFileAssociationError(VectorStoreFileAssociationErrorCode code = default, string message = default) + public static AssistantModificationOptions AssistantModificationOptions(string name = default, string description = default, string instructions = default, IDictionary metadata = default, float? temperature = default, string model = default, IEnumerable defaultTools = default, ToolResources toolResources = default, AssistantResponseFormat responseFormat = default, float? nucleusSamplingFactor = default, ChatReasoningEffortLevel? reasoningEffortLevel = default) { + metadata ??= new ChangeTrackingDictionary(); + defaultTools ??= new ChangeTrackingList(); - return new VectorStoreFileAssociationError(code, message, additionalBinaryDataProperties: null); + return new AssistantModificationOptions( + name, + description, + instructions, + metadata, + temperature, + model, + defaultTools?.ToList(), + toolResources, + responseFormat, + nucleusSamplingFactor, + reasoningEffortLevel, + additionalBinaryDataProperties: null); } - public static FileChunkingStrategy FileChunkingStrategy(string @type = default) + public static AssistantDeletionResult AssistantDeletionResult(bool deleted = default, string assistantId = default, string @object = default) { + return new AssistantDeletionResult(deleted, assistantId, @object, additionalBinaryDataProperties: null); + } - return new InternalUnknownFileChunkingStrategyResponseParamProxy(@type, additionalBinaryDataProperties: null); + public static ChatOutputAudio ChatOutputAudio(string id = default, DateTimeOffset expiresAt = default, string transcript = default, BinaryData audioBytes = default) + { + return new ChatOutputAudio(id, expiresAt, transcript, audioBytes, additionalBinaryDataProperties: null); } - public static VectorStoreBatchFileJob VectorStoreBatchFileJob(DateTimeOffset createdAt = default, string vectorStoreId = default, VectorStoreBatchFileJobStatus status = default, string batchId = default, VectorStoreFileCounts fileCounts = default, object @object = default) + public static ChatTokenLogProbabilityDetails ChatTokenLogProbabilityDetails(string token = default, float logProbability = default, ReadOnlyMemory? utf8Bytes = default, IEnumerable topLogProbabilities = default) { + topLogProbabilities ??= new ChangeTrackingList(); - return new VectorStoreBatchFileJob( - createdAt, - vectorStoreId, - status, - batchId, - fileCounts, - @object, + return new ChatTokenLogProbabilityDetails(token, logProbability, utf8Bytes, topLogProbabilities?.ToList(), additionalBinaryDataProperties: null); + } + + public static ChatTokenTopLogProbabilityDetails ChatTokenTopLogProbabilityDetails(string token = default, float logProbability = default, ReadOnlyMemory? utf8Bytes = default) + { + return new ChatTokenTopLogProbabilityDetails(token, logProbability, utf8Bytes, additionalBinaryDataProperties: null); + } + + public static ChatTokenUsage ChatTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default, ChatOutputTokenUsageDetails outputTokenDetails = default, ChatInputTokenUsageDetails inputTokenDetails = default) + { + return new ChatTokenUsage( + outputTokenCount, + inputTokenCount, + totalTokenCount, + outputTokenDetails, + inputTokenDetails, additionalBinaryDataProperties: null); } - public static ResponseReasoningOptions ResponseReasoningOptions(ResponseReasoningEffortLevel? reasoningEffortLevel = default, ResponseReasoningSummaryVerbosity? reasoningSummaryVerbosity = default) + public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = default, int audioTokenCount = default, int acceptedPredictionTokenCount = default, int rejectedPredictionTokenCount = default) { + return new ChatOutputTokenUsageDetails(reasoningTokenCount, audioTokenCount, acceptedPredictionTokenCount, rejectedPredictionTokenCount, additionalBinaryDataProperties: null); + } - return new ResponseReasoningOptions(reasoningEffortLevel, reasoningSummaryVerbosity, additionalBinaryDataProperties: null); + public static ChatInputTokenUsageDetails ChatInputTokenUsageDetails(int audioTokenCount = default, int cachedTokenCount = default) + { + return new ChatInputTokenUsageDetails(audioTokenCount, cachedTokenCount, additionalBinaryDataProperties: null); } - public static ResponseTextOptions ResponseTextOptions(ResponseTextFormat textFormat = default) + public static ChatMessage ChatMessage(ChatMessageContent content = default, string role = default) { + return new InternalUnknownChatMessage(content, role.ToChatMessageRole(), additionalBinaryDataProperties: null); + } - return new ResponseTextOptions(textFormat, additionalBinaryDataProperties: null); + public static ChatMessageContentPart ChatMessageContentPart() + { + return new InternalUnknownChatCompletionRequestMessageContentPart(additionalBinaryDataProperties: null); } - public static FileSearchToolRankingOptions FileSearchToolRankingOptions(FileSearchToolRanker? ranker = default, float? scoreThreshold = default) + public static SystemChatMessage SystemChatMessage(ChatMessageContent content = default, string participantName = default) { + return new SystemChatMessage(content, ChatMessageRole.System, additionalBinaryDataProperties: null, participantName); + } - return new FileSearchToolRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties: null); + public static DeveloperChatMessage DeveloperChatMessage(ChatMessageContent content = default, string participantName = default) + { + return new DeveloperChatMessage(content, ChatMessageRole.Developer, additionalBinaryDataProperties: null, participantName); + } + + public static UserChatMessage UserChatMessage(ChatMessageContent content = default, string participantName = default) + { + return new UserChatMessage(content, ChatMessageRole.User, additionalBinaryDataProperties: null, participantName); } - public static WebSearchToolLocation WebSearchToolLocation(string @type = default) + public static AssistantChatMessage AssistantChatMessage(ChatMessageContent content = default, string refusal = default, string participantName = default, IEnumerable toolCalls = default, ChatFunctionCall functionCall = default, ChatOutputAudioReference outputAudioReference = default) { + toolCalls ??= new ChangeTrackingList(); - return new InternalUnknownResponsesWebSearchLocation(@type, additionalBinaryDataProperties: null); + return new AssistantChatMessage( + content, + ChatMessageRole.Assistant, + additionalBinaryDataProperties: null, + refusal, + participantName, + toolCalls?.ToList(), + functionCall, + outputAudioReference); } - public static ResponseMessageAnnotation ResponseMessageAnnotation(string kind = default) + public static ChatOutputAudioReference ChatOutputAudioReference(string id = default) + { + return new ChatOutputAudioReference(id, additionalBinaryDataProperties: null); + } + + public static ChatFunctionCall ChatFunctionCall(string functionName = default, BinaryData functionArguments = default) { + return new ChatFunctionCall(functionName, functionArguments, additionalBinaryDataProperties: null); + } - return new InternalUnknownResponsesOutputTextAnnotation(kind.ToResponseMessageAnnotationKind(), additionalBinaryDataProperties: null); + public static ToolChatMessage ToolChatMessage(ChatMessageContent content = default, string toolCallId = default) + { + return new ToolChatMessage(content, ChatMessageRole.Tool, additionalBinaryDataProperties: null, toolCallId); } - public static ComputerCallAction ComputerCallAction(string kind = default) + public static FunctionChatMessage FunctionChatMessage(ChatMessageContent content = default, string functionName = default) { + return new FunctionChatMessage(content, ChatMessageRole.Function, additionalBinaryDataProperties: null, functionName); + } - return new UnknownResponsesComputerCallItemAction(kind.ToComputerCallActionKind(), additionalBinaryDataProperties: null); + public static ChatAudioOptions ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice = default, ChatOutputAudioFormat outputAudioFormat = default) + { + return new ChatAudioOptions(outputAudioVoice, outputAudioFormat, additionalBinaryDataProperties: null); } - public static ComputerCallSafetyCheck ComputerCallSafetyCheck(string id = default, string code = default, string message = default) + public static ChatFunction ChatFunction(string functionName = default, string functionDescription = default, BinaryData functionParameters = default) { + return new ChatFunction(functionName, functionDescription, functionParameters, additionalBinaryDataProperties: null); + } - return new ComputerCallSafetyCheck(id, code, message, additionalBinaryDataProperties: null); + public static StreamingChatOutputAudioUpdate StreamingChatOutputAudioUpdate(string id = default, DateTimeOffset? expiresAt = default, string transcriptUpdate = default, BinaryData audioBytesUpdate = default) + { + return new StreamingChatOutputAudioUpdate(id, expiresAt, transcriptUpdate, audioBytesUpdate, additionalBinaryDataProperties: null); } - public static FileSearchCallResult FileSearchCallResult(string fileId = default, string text = default, string filename = default, IDictionary attributes = default, float? score = default) + public static StreamingChatFunctionCallUpdate StreamingChatFunctionCallUpdate(string functionName = default, BinaryData functionArgumentsUpdate = default) + { + return new StreamingChatFunctionCallUpdate(functionName, functionArgumentsUpdate, additionalBinaryDataProperties: null); + } + + public static ChatCompletionDeletionResult ChatCompletionDeletionResult(bool deleted = default, string @object = default, string chatCompletionId = default) + { + return new ChatCompletionDeletionResult(deleted, @object, chatCompletionId, additionalBinaryDataProperties: null); + } + + public static OpenAIEmbeddingCollection OpenAIEmbeddingCollection(IEnumerable data = default, string model = default, string @object = default, EmbeddingTokenUsage usage = default) + { + data ??= new ChangeTrackingList(); + + return new OpenAIEmbeddingCollection(data?.ToList(), model, @object, usage, serializedAdditionalRawData: null); + } + + public static OpenAIEmbedding OpenAIEmbedding(int index = default, BinaryData embeddingProperty = default, string @object = default) + { + return new OpenAIEmbedding(index, embeddingProperty, @object, serializedAdditionalRawData: null); + } + + public static EmbeddingTokenUsage EmbeddingTokenUsage(int inputTokenCount = default, int totalTokenCount = default) + { + return new EmbeddingTokenUsage(inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null); + } + + public static FileSearchToolRankingOptions FileSearchToolRankingOptions(FileSearchToolRanker? ranker = default, float? scoreThreshold = default) + { + return new FileSearchToolRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties: null); + } + + public static ResponseTextOptions ResponseTextOptions(ResponseTextFormat textFormat = default) + { + return new ResponseTextOptions(textFormat, additionalBinaryDataProperties: null); + } + + public static ResponseMessageAnnotation ResponseMessageAnnotation(string kind = default) + { + return new InternalUnknownAnnotation(kind.ToResponseMessageAnnotationKind(), additionalBinaryDataProperties: null); + } + + public static FileSearchCallResult FileSearchCallResult(string fileId = default, string text = default, string filename = default, float? score = default, IReadOnlyDictionary attributes = default) { attributes ??= new ChangeTrackingDictionary(); @@ -133,294 +338,360 @@ public static FileSearchCallResult FileSearchCallResult(string fileId = default, fileId, text, filename, - attributes, score, + attributes, additionalBinaryDataProperties: null); } - public static ResponseError ResponseError(string code = default, string message = default) + public static ComputerCallAction ComputerCallAction(string kind = default) + { + return new InternalUnknownComputerAction(kind.ToComputerCallActionKind(), additionalBinaryDataProperties: null); + } + + public static ComputerCallSafetyCheck ComputerCallSafetyCheck(string id = default, string code = default, string message = default) { + return new ComputerCallSafetyCheck(id, code, message, additionalBinaryDataProperties: null); + } + public static ResponseError ResponseError(ResponseErrorCode code = default, string message = default) + { return new ResponseError(code, message, additionalBinaryDataProperties: null); } public static ResponseIncompleteStatusDetails ResponseIncompleteStatusDetails(ResponseIncompleteStatusReason? reason = default) { - return new ResponseIncompleteStatusDetails(reason, additionalBinaryDataProperties: null); } - public static ResponseTokenUsage ResponseTokenUsage(int inputTokenCount = default, int outputTokenCount = default, int totalTokenCount = default, ResponseOutputTokenUsageDetails outputTokenDetails = default) + public static ResponseTokenUsage ResponseTokenUsage(int inputTokenCount = default, int outputTokenCount = default, int totalTokenCount = default, ResponseInputTokenUsageDetails inputTokenDetails = default, ResponseOutputTokenUsageDetails outputTokenDetails = default) { + return new ResponseTokenUsage( + inputTokenCount, + outputTokenCount, + totalTokenCount, + inputTokenDetails, + outputTokenDetails, + additionalBinaryDataProperties: null); + } - return new ResponseTokenUsage(inputTokenCount, outputTokenCount, totalTokenCount, outputTokenDetails, additionalBinaryDataProperties: null); + public static ResponseInputTokenUsageDetails ResponseInputTokenUsageDetails(int cachedTokenCount = default) + { + return new ResponseInputTokenUsageDetails(cachedTokenCount, additionalBinaryDataProperties: null); } public static ResponseOutputTokenUsageDetails ResponseOutputTokenUsageDetails(int reasoningTokenCount = default) { - return new ResponseOutputTokenUsageDetails(reasoningTokenCount, additionalBinaryDataProperties: null); } - public static ThreadCreationOptions ThreadCreationOptions(IDictionary metadata = default, ToolResources toolResources = default, IEnumerable internalMessages = default) + public static ResponseDeletionResult ResponseDeletionResult(string id = default, bool deleted = default, string @object = default) { - metadata ??= new ChangeTrackingDictionary(); - internalMessages ??= new ChangeTrackingList(); + return new ResponseDeletionResult(id, deleted, @object, additionalBinaryDataProperties: null); + } - return new ThreadCreationOptions(metadata, toolResources, internalMessages?.ToList(), additionalBinaryDataProperties: null); + public static OpenAIFileCollection OpenAIFileCollection(IEnumerable data = default, string @object = default, string firstId = default, string lastId = default, bool hasMore = default) + { + data ??= new ChangeTrackingList(); + + return new OpenAIFileCollection( + data?.ToList(), + @object, + firstId, + lastId, + hasMore, + serializedAdditionalRawData: null); } - public static MessageCreationOptions MessageCreationOptions(IEnumerable attachments = default, IDictionary metadata = default, Assistants.MessageRole role = default, IEnumerable content = default) + public static OpenAIFile OpenAIFile(string id = default, DateTimeOffset createdAt = default, DateTimeOffset? expiresAt = default, string filename = default, FilePurpose purpose = default, string @object = default, long? sizeInBytesLong = default, FileStatus status = default, string statusDetails = default) { - attachments ??= new ChangeTrackingList(); - metadata ??= new ChangeTrackingDictionary(); - content ??= new ChangeTrackingList(); + return new OpenAIFile( + id, + createdAt, + expiresAt, + filename, + purpose, + @object, + sizeInBytesLong, + status, + statusDetails, + additionalBinaryDataProperties: null); + } - return new MessageCreationOptions(attachments?.ToList(), metadata, role, content?.ToList(), additionalBinaryDataProperties: null); + public static FileDeletionResult FileDeletionResult(bool deleted = default, string fileId = default, string @object = default) + { + return new FileDeletionResult(deleted, fileId, @object, additionalBinaryDataProperties: null); } - public static MessageCreationAttachment MessageCreationAttachment(string fileId = default, IEnumerable tools = default) + public static HyperparametersForSupervised HyperparametersForSupervised(BinaryData batchSize = default, BinaryData nEpochs = default, BinaryData learningRateMultiplier = default) { - tools ??= new ChangeTrackingList(); - - return new MessageCreationAttachment(fileId, tools?.ToList(), additionalBinaryDataProperties: null); + return new HyperparametersForSupervised(batchSize, nEpochs, learningRateMultiplier, additionalBinaryDataProperties: null); } - public static CodeInterpreterToolDefinition CodeInterpreterToolDefinition() + public static HyperparametersForDPO HyperparametersForDPO(BinaryData batchSize = default, BinaryData nEpochs = default, BinaryData learningRateMultiplier = default, BinaryData beta = default) { - - return new CodeInterpreterToolDefinition("code_interpreter", additionalBinaryDataProperties: null); + return new HyperparametersForDPO(batchSize, nEpochs, learningRateMultiplier, beta, additionalBinaryDataProperties: null); } - public static ToolDefinition ToolDefinition(string @type = default) + public static FineTuningError FineTuningError(string code = default, string message = default, string invalidParameter = default) { - - return new UnknownAssistantToolDefinition(@type, additionalBinaryDataProperties: null); + return new FineTuningError(code, message, invalidParameter, additionalBinaryDataProperties: null); } - public static FileSearchRankingOptions FileSearchRankingOptions(FileSearchRanker? ranker = default, float scoreThreshold = default) + public static FineTuningHyperparameters FineTuningHyperparameters(BinaryData epochCount = default, BinaryData batchSize = default, BinaryData learningRateMultiplier = default) { - - return new FileSearchRankingOptions(ranker, scoreThreshold, additionalBinaryDataProperties: null); + return new FineTuningHyperparameters(epochCount, batchSize, learningRateMultiplier, additionalBinaryDataProperties: null); } - public static FileSearchToolResources FileSearchToolResources(IEnumerable vectorStoreIds = default, IEnumerable newVectorStores = default) + public static FineTuningCheckpoint FineTuningCheckpoint(string id = default, DateTimeOffset createdAt = default, string modelId = default, int stepNumber = default, FineTuningCheckpointMetrics metrics = default, string jobId = default, string @object = default) { - vectorStoreIds ??= new ChangeTrackingList(); - newVectorStores ??= new ChangeTrackingList(); - - return new FileSearchToolResources(vectorStoreIds?.ToList(), newVectorStores?.ToList(), additionalBinaryDataProperties: null); + return new FineTuningCheckpoint( + id, + createdAt, + modelId, + stepNumber, + metrics, + jobId, + @object, + additionalBinaryDataProperties: null); } - public static VectorStoreCreationHelper VectorStoreCreationHelper(IEnumerable fileIds = default, IDictionary metadata = default, FileChunkingStrategy chunkingStrategy = default) + public static FineTuningCheckpointMetrics FineTuningCheckpointMetrics(float? trainLoss = default, float? trainMeanTokenAccuracy = default, float? validLoss = default, float? validMeanTokenAccuracy = default, float? fullValidLoss = default, float? fullValidMeanTokenAccuracy = default, int stepNumber = default) { - fileIds ??= new ChangeTrackingList(); - metadata ??= new ChangeTrackingDictionary(); - - return new VectorStoreCreationHelper(fileIds?.ToList(), metadata, chunkingStrategy, additionalBinaryDataProperties: null); + return new FineTuningCheckpointMetrics( + trainLoss, + trainMeanTokenAccuracy, + validLoss, + validMeanTokenAccuracy, + fullValidLoss, + fullValidMeanTokenAccuracy, + stepNumber, + additionalBinaryDataProperties: null); } - public static RunError RunError(RunErrorCode code = default, string message = default) + public static FineTuningEvent FineTuningEvent(string id = default, DateTimeOffset createdAt = default, string message = default, FineTuningJobEventKind? kind = default, BinaryData data = default, string level = default, string @object = default) { + return new FineTuningEvent( + id, + createdAt, + message, + kind, + data, + level, + @object, + additionalBinaryDataProperties: null); + } - return new RunError(code, message, additionalBinaryDataProperties: null); + public static ImageGenerationOptions ImageGenerationOptions(GeneratedImageQuality? quality = default, GeneratedImageFormat? responseFormat = default, GeneratedImageSize? size = default, GeneratedImageBackground? background = default, GeneratedImageStyle? style = default, InternalCreateImageRequestModel? model = default, string prompt = default, long? n = default, string endUserId = default, int? outputCompressionFactor = default, GeneratedImageFileFormat? outputFileFormat = default, GeneratedImageModerationLevel? moderationLevel = default) + { + return new ImageGenerationOptions( + quality, + responseFormat, + size, + background, + style, + model, + prompt, + n, + endUserId, + outputCompressionFactor, + outputFileFormat, + moderationLevel, + additionalBinaryDataProperties: null); } - public static RunIncompleteDetails RunIncompleteDetails(RunIncompleteReason? reason = default) + public static GeneratedImageCollection GeneratedImageCollection(IEnumerable data = default, ImageTokenUsage usage = default, DateTimeOffset createdAt = default) { + data ??= new ChangeTrackingList(); - return new RunIncompleteDetails(reason, additionalBinaryDataProperties: null); + return new GeneratedImageCollection(data?.ToList(), usage, createdAt, additionalBinaryDataProperties: null); } - public static RunTokenUsage RunTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default) + public static GeneratedImage GeneratedImage(string revisedPrompt = default, BinaryData imageBytes = default, Uri imageUri = default) { + return new GeneratedImage(revisedPrompt, imageBytes, imageUri, additionalBinaryDataProperties: null); + } - return new RunTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null); + public static ImageTokenUsage ImageTokenUsage(int inputTokenCount = default, int outputTokenCount = default, int totalTokenCount = default, ImageInputTokenUsageDetails inputTokenDetails = default) + { + return new ImageTokenUsage(inputTokenCount, outputTokenCount, totalTokenCount, inputTokenDetails, additionalBinaryDataProperties: null); } - public static RunCreationOptions RunCreationOptions(string assistantId = default, bool? stream = default, AssistantResponseFormat responseFormat = default, string modelOverride = default, string instructionsOverride = default, string additionalInstructions = default, IEnumerable internalMessages = default, bool? allowParallelToolCalls = default, IEnumerable toolsOverride = default, IDictionary metadata = default, float? temperature = default, float? nucleusSamplingFactor = default, int? maxInputTokenCount = default, int? maxOutputTokenCount = default, RunTruncationStrategy truncationStrategy = default, ToolConstraint toolConstraint = default, ChatReasoningEffortLevel? reasoningEffortLevel = default) + public static ImageInputTokenUsageDetails ImageInputTokenUsageDetails(int textTokenCount = default, int imageTokenCount = default) { - internalMessages ??= new ChangeTrackingList(); - toolsOverride ??= new ChangeTrackingList(); - metadata ??= new ChangeTrackingDictionary(); + return new ImageInputTokenUsageDetails(textTokenCount, imageTokenCount, additionalBinaryDataProperties: null); + } - return new RunCreationOptions( - assistantId, - stream, + public static ImageVariationOptions ImageVariationOptions(InternalCreateImageVariationRequestModel? model = default, BinaryData image = default, long? n = default, GeneratedImageSize? size = default, GeneratedImageFormat? responseFormat = default, string endUserId = default) + { + return new ImageVariationOptions( + model, + image, + n, + size, responseFormat, - modelOverride, - instructionsOverride, - additionalInstructions, - internalMessages?.ToList(), - allowParallelToolCalls, - toolsOverride?.ToList(), - metadata, - temperature, - nucleusSamplingFactor, - maxInputTokenCount, - maxOutputTokenCount, - truncationStrategy, - toolConstraint, - reasoningEffortLevel, + endUserId, additionalBinaryDataProperties: null); } - public static RunModificationOptions RunModificationOptions(IDictionary metadata = default) + public static MessageCreationOptions MessageCreationOptions(IEnumerable attachments = default, IDictionary metadata = default, Assistants.MessageRole role = default, IEnumerable content = default) { + attachments ??= new ChangeTrackingList(); metadata ??= new ChangeTrackingDictionary(); + content ??= new ChangeTrackingList(); - return new RunModificationOptions(metadata, additionalBinaryDataProperties: null); + return new MessageCreationOptions(attachments?.ToList(), metadata, role, content?.ToList(), additionalBinaryDataProperties: null); } - public static ToolOutput ToolOutput(string toolCallId = default, string output = default) + public static MessageCreationAttachment MessageCreationAttachment(string fileId = default, IEnumerable tools = default) { + tools ??= new ChangeTrackingList(); - return new ToolOutput(toolCallId, output, additionalBinaryDataProperties: null); + return new MessageCreationAttachment(fileId, tools?.ToList(), additionalBinaryDataProperties: null); } - public static RunStepDetails RunStepDetails(string @type = default) + public static ThreadMessage ThreadMessage(string id = default, DateTimeOffset createdAt = default, string threadId = default, Assistants.MessageStatus status = default, MessageFailureDetails incompleteDetails = default, DateTimeOffset? completedAt = default, DateTimeOffset? incompleteAt = default, IEnumerable content = default, string assistantId = default, string runId = default, IReadOnlyDictionary metadata = default, string @object = default, Assistants.MessageRole role = default, IEnumerable attachments = default) { + content ??= new ChangeTrackingList(); + metadata ??= new ChangeTrackingDictionary(); + attachments ??= new ChangeTrackingList(); - return new UnknownRunStepObjectStepDetails(@type, additionalBinaryDataProperties: null); + return new ThreadMessage( + id, + createdAt, + threadId, + status, + incompleteDetails, + completedAt, + incompleteAt, + content?.ToList(), + assistantId, + runId, + metadata, + @object, + role, + attachments?.ToList(), + additionalBinaryDataProperties: null); } - public static RunStepToolCall RunStepToolCall(string id = default, string kind = default) + public static MessageFailureDetails MessageFailureDetails(MessageFailureReason reason = default) { - - return new UnknownRunStepDetailsToolCallsObjectToolCallsObject(id, kind.ToRunStepToolCallKind(), additionalBinaryDataProperties: null); + return new MessageFailureDetails(reason, additionalBinaryDataProperties: null); } - public static RunStepCodeInterpreterOutput RunStepCodeInterpreterOutput(string @type = default) + public static MessageModificationOptions MessageModificationOptions(IDictionary metadata = default) { + metadata ??= new ChangeTrackingDictionary(); - return new UnknownRunStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(@type, additionalBinaryDataProperties: null); + return new MessageModificationOptions(metadata, additionalBinaryDataProperties: null); } - public static RunStepFileSearchResult RunStepFileSearchResult(string fileId = default, string fileName = default, float score = default, IEnumerable content = default) + public static MessageDeletionResult MessageDeletionResult(bool deleted = default, string messageId = default, string @object = default) { - content ??= new ChangeTrackingList(); - - return new RunStepFileSearchResult(fileId, fileName, score, content?.ToList(), additionalBinaryDataProperties: null); + return new MessageDeletionResult(deleted, messageId, @object, additionalBinaryDataProperties: null); } - public static RunStepFileSearchResultContent RunStepFileSearchResultContent(string text = default, RunStepFileSearchResultContentKind kind = default) + public static OpenAIModelCollection OpenAIModelCollection(string @object = default, IEnumerable data = default) { + data ??= new ChangeTrackingList(); - return new RunStepFileSearchResultContent(text, kind, additionalBinaryDataProperties: null); + return new OpenAIModelCollection(@object, data?.ToList(), serializedAdditionalRawData: null); } - public static RunStepError RunStepError(RunStepErrorCode code = default, string message = default) + public static OpenAIModel OpenAIModel(string id = default, string ownedBy = default, string @object = default, DateTimeOffset createdAt = default) { - - return new RunStepError(code, message, additionalBinaryDataProperties: null); + return new OpenAIModel(id, ownedBy, @object, createdAt, additionalBinaryDataProperties: null); } - public static RunStepTokenUsage RunStepTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default) + public static ModelDeletionResult ModelDeletionResult(bool deleted = default, string modelId = default, string @object = default) { - - return new RunStepTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null); + return new ModelDeletionResult(deleted, modelId, @object, additionalBinaryDataProperties: null); } - public static ThreadModificationOptions ThreadModificationOptions(IDictionary metadata = default, ToolResources toolResources = default) + public static ModerationResultCollection ModerationResultCollection(string id = default, string model = default, IEnumerable results = default) { - metadata ??= new ChangeTrackingDictionary(); + results ??= new ChangeTrackingList(); - return new ThreadModificationOptions(metadata, toolResources, additionalBinaryDataProperties: null); + return new ModerationResultCollection(id, model, results?.ToList()); } - public static ConversationInputTranscriptionOptions ConversationInputTranscriptionOptions(ConversationTranscriptionModel? model = default) + public static ModerationResult ModerationResult(bool flagged = default) { + return new ModerationResult(flagged, additionalBinaryDataProperties: null); + } - return new ConversationInputTranscriptionOptions(model, additionalBinaryDataProperties: null); + public static InputTranscriptionOptions InputTranscriptionOptions(InputTranscriptionModel? model = default, string language = default, string prompt = default) + { + return new InputTranscriptionOptions(model, language, prompt, additionalBinaryDataProperties: null); } - public static ConversationTurnDetectionOptions ConversationTurnDetectionOptions(string kind = default) + public static TurnDetectionOptions TurnDetectionOptions(string kind = default, bool? responseCreationEnabled = default, bool? responseInterruptionEnabled = default) { + return new UnknownRealtimeTurnDetection(kind.ToTurnDetectionKind(), responseCreationEnabled, responseInterruptionEnabled, additionalBinaryDataProperties: null); + } - return new UnknownRealtimeTurnDetection(kind.ToConversationTurnDetectionKind(), additionalBinaryDataProperties: null); + public static InputNoiseReductionOptions InputNoiseReductionOptions(string kind = default) + { + return new InternalUnknownRealtimeAudioNoiseReduction(kind.ToInputNoiseReductionKind(), additionalBinaryDataProperties: null); } public static ConversationTool ConversationTool(string kind = default) { - return new UnknownRealtimeTool(new ConversationToolKind(kind), additionalBinaryDataProperties: null); } public static ConversationFunctionTool ConversationFunctionTool(string name = default, string description = default, BinaryData parameters = default) { - return new ConversationFunctionTool(ConversationToolKind.Function, additionalBinaryDataProperties: null, name, description, parameters); } public static ConversationContentPart ConversationContentPart(string kind = default) { - return new UnknownRealtimeContentPart(new ConversationContentPartKind(kind), additionalBinaryDataProperties: null); } - public static ConversationUpdate ConversationUpdate(string eventId = default, string kind = default) + public static RealtimeUpdate RealtimeUpdate(string kind = default, string eventId = default) { - - return new UnknownRealtimeServerEvent(eventId, kind.ToConversationUpdateKind(), additionalBinaryDataProperties: null); - } - - public static ConversationInputAudioCommittedUpdate ConversationInputAudioCommittedUpdate(string eventId = default, string previousItemId = default, string itemId = default) - { - - return new ConversationInputAudioCommittedUpdate(eventId, ConversationUpdateKind.InputAudioCommitted, additionalBinaryDataProperties: null, previousItemId, itemId); + return new UnknownRealtimeServerEvent(kind.ToRealtimeUpdateKind(), eventId, additionalBinaryDataProperties: null); } - public static ConversationInputAudioClearedUpdate ConversationInputAudioClearedUpdate(string eventId = default) + public static InputAudioCommittedUpdate InputAudioCommittedUpdate(string eventId = default, string previousItemId = default, string itemId = default) { - - return new ConversationInputAudioClearedUpdate(eventId, ConversationUpdateKind.InputAudioCleared, additionalBinaryDataProperties: null); + return new InputAudioCommittedUpdate(RealtimeUpdateKind.InputAudioCommitted, eventId, additionalBinaryDataProperties: null, previousItemId, itemId); } - public static ConversationInputSpeechStartedUpdate ConversationInputSpeechStartedUpdate(string eventId = default, string itemId = default, int audioStartMs = default) + public static InputAudioClearedUpdate InputAudioClearedUpdate(string eventId = default) { - - return new ConversationInputSpeechStartedUpdate(eventId, ConversationUpdateKind.InputSpeechStarted, additionalBinaryDataProperties: null, itemId, audioStartMs); + return new InputAudioClearedUpdate(RealtimeUpdateKind.InputAudioCleared, eventId, additionalBinaryDataProperties: null); } - public static ConversationInputSpeechFinishedUpdate ConversationInputSpeechFinishedUpdate(string eventId = default, string itemId = default, int audioEndMs = default) + public static InputAudioSpeechStartedUpdate InputAudioSpeechStartedUpdate(string eventId = default, string itemId = default, int audioStartMs = default) { - - return new ConversationInputSpeechFinishedUpdate(eventId, ConversationUpdateKind.InputSpeechStopped, additionalBinaryDataProperties: null, itemId, audioEndMs); + return new InputAudioSpeechStartedUpdate(RealtimeUpdateKind.InputSpeechStarted, eventId, additionalBinaryDataProperties: null, itemId, audioStartMs); } - public static ConversationInputTranscriptionFinishedUpdate ConversationInputTranscriptionFinishedUpdate(string eventId = default, string itemId = default, int contentIndex = default, string transcript = default) + public static InputAudioSpeechFinishedUpdate InputAudioSpeechFinishedUpdate(string eventId = default, string itemId = default, int audioEndMs = default) { - - return new ConversationInputTranscriptionFinishedUpdate( - eventId, - ConversationUpdateKind.InputTranscriptionFinished, - additionalBinaryDataProperties: null, - itemId, - contentIndex, - transcript); + return new InputAudioSpeechFinishedUpdate(RealtimeUpdateKind.InputSpeechStopped, eventId, additionalBinaryDataProperties: null, itemId, audioEndMs); } - public static ConversationItemTruncatedUpdate ConversationItemTruncatedUpdate(string eventId = default, string itemId = default, int contentIndex = default, int audioEndMs = default) + public static ItemTruncatedUpdate ItemTruncatedUpdate(string eventId = default, string itemId = default, int contentIndex = default, int audioEndMs = default) { - - return new ConversationItemTruncatedUpdate( + return new ItemTruncatedUpdate( + RealtimeUpdateKind.ItemTruncated, eventId, - ConversationUpdateKind.ItemTruncated, additionalBinaryDataProperties: null, itemId, contentIndex, audioEndMs); } - public static ConversationItemDeletedUpdate ConversationItemDeletedUpdate(string eventId = default, string itemId = default) + public static ItemDeletedUpdate ItemDeletedUpdate(string eventId = default, string itemId = default) { - - return new ConversationItemDeletedUpdate(eventId, ConversationUpdateKind.ItemDeleted, additionalBinaryDataProperties: null, itemId); + return new ItemDeletedUpdate(RealtimeUpdateKind.ItemDeleted, eventId, additionalBinaryDataProperties: null, itemId); } public static ConversationTokenUsage ConversationTokenUsage(ConversationInputTokenUsageDetails inputTokenDetails = default, ConversationOutputTokenUsageDetails outputTokenDetails = default, int inputTokenCount = default, int outputTokenCount = default, int totalTokenCount = default) { - return new ConversationTokenUsage( inputTokenDetails, outputTokenDetails, @@ -432,22 +703,19 @@ public static ConversationTokenUsage ConversationTokenUsage(ConversationInputTok public static ConversationInputTokenUsageDetails ConversationInputTokenUsageDetails(int audioTokenCount = default, int cachedTokenCount = default, int textTokenCount = default) { - return new ConversationInputTokenUsageDetails(audioTokenCount, cachedTokenCount, textTokenCount, additionalBinaryDataProperties: null); } public static ConversationOutputTokenUsageDetails ConversationOutputTokenUsageDetails(int textTokenCount = default, int audioTokenCount = default) { - return new ConversationOutputTokenUsageDetails(textTokenCount, audioTokenCount, additionalBinaryDataProperties: null); } - public static ConversationItemStreamingTextFinishedUpdate ConversationItemStreamingTextFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default, string text = default) + public static OutputTextFinishedUpdate OutputTextFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default, string text = default) { - - return new ConversationItemStreamingTextFinishedUpdate( + return new OutputTextFinishedUpdate( + RealtimeUpdateKind.ItemStreamingPartTextFinished, eventId, - ConversationUpdateKind.ItemStreamingPartTextFinished, additionalBinaryDataProperties: null, responseId, itemId, @@ -456,387 +724,316 @@ public static ConversationItemStreamingTextFinishedUpdate ConversationItemStream text); } - public static ConversationItemStreamingAudioTranscriptionFinishedUpdate ConversationItemStreamingAudioTranscriptionFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default, string transcript = default) - { - - return new ConversationItemStreamingAudioTranscriptionFinishedUpdate( - eventId, - ConversationUpdateKind.ItemStreamingPartAudioTranscriptionFinished, - additionalBinaryDataProperties: null, - responseId, - itemId, - outputIndex, - contentIndex, - transcript); - } - - public static ConversationItemStreamingAudioFinishedUpdate ConversationItemStreamingAudioFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default) + public static OutputAudioTranscriptionFinishedUpdate OutputAudioTranscriptionFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default, string transcript = default) { - - return new ConversationItemStreamingAudioFinishedUpdate( + return new OutputAudioTranscriptionFinishedUpdate( + RealtimeUpdateKind.ItemStreamingPartAudioTranscriptionFinished, eventId, - ConversationUpdateKind.ItemStreamingPartAudioFinished, additionalBinaryDataProperties: null, responseId, itemId, outputIndex, - contentIndex); - } - - public static ConversationRateLimitsUpdate ConversationRateLimitsUpdate(string eventId = default, IEnumerable allDetails = default) - { - allDetails ??= new ChangeTrackingList(); - - return new ConversationRateLimitsUpdate(eventId, ConversationUpdateKind.RateLimitsUpdated, additionalBinaryDataProperties: null, allDetails?.ToList()); - } - - public static ConversationRateLimitDetailsItem ConversationRateLimitDetailsItem(string name = default, int maximumCount = default, int remainingCount = default, TimeSpan timeUntilReset = default) - { - - return new ConversationRateLimitDetailsItem(name, maximumCount, remainingCount, timeUntilReset, additionalBinaryDataProperties: null); - } - - public static ModerationResultCollection ModerationResultCollection(string id = default, string model = default, IEnumerable results = default) - { - results ??= new ChangeTrackingList(); - - return new ModerationResultCollection(id, model, results?.ToList()); - } - - public static ModerationResult ModerationResult(bool flagged = default) - { - - return new ModerationResult(flagged, additionalBinaryDataProperties: null); - } - - public static MessageFailureDetails MessageFailureDetails(MessageFailureReason reason = default) - { - - return new MessageFailureDetails(reason, additionalBinaryDataProperties: null); - } - - public static MessageModificationOptions MessageModificationOptions(IDictionary metadata = default) - { - metadata ??= new ChangeTrackingDictionary(); - - return new MessageModificationOptions(metadata, additionalBinaryDataProperties: null); - } - - public static ImageGenerationOptions ImageGenerationOptions(GeneratedImageQuality? quality = default, GeneratedImageFormat? responseFormat = default, GeneratedImageSize? size = default, GeneratedImageStyle? style = default, InternalCreateImageRequestModel? model = default, string prompt = default, long? n = default, string endUserId = default) - { - - return new ImageGenerationOptions( - quality, - responseFormat, - size, - style, - model, - prompt, - n, - endUserId, - additionalBinaryDataProperties: null); - } - - public static GeneratedImageCollection GeneratedImageCollection(DateTimeOffset created = default, IEnumerable data = default) - { - data ??= new ChangeTrackingList(); - - return new GeneratedImageCollection(created, data?.ToList()); - } - - public static GeneratedImage GeneratedImage(string revisedPrompt = default, BinaryData imageBytes = default, Uri imageUri = default) - { - - return new GeneratedImage(revisedPrompt, imageBytes, imageUri, additionalBinaryDataProperties: null); - } - - public static ImageEditOptions ImageEditOptions(InternalCreateImageEditRequestModel? model = default, BinaryData image = default, string prompt = default, BinaryData mask = default, long? n = default, GeneratedImageSize? size = default, GeneratedImageFormat? responseFormat = default, string endUserId = default) - { - - return new ImageEditOptions( - model, - image, - prompt, - mask, - n, - size, - responseFormat, - endUserId, - additionalBinaryDataProperties: null); - } - - public static ImageVariationOptions ImageVariationOptions(InternalCreateImageVariationRequestModel? model = default, BinaryData image = default, long? n = default, GeneratedImageSize? size = default, GeneratedImageFormat? responseFormat = default, string endUserId = default) - { - - return new ImageVariationOptions( - model, - image, - n, - size, - responseFormat, - endUserId, - additionalBinaryDataProperties: null); + contentIndex, + transcript); } - public static EmbeddingTokenUsage EmbeddingTokenUsage(int inputTokenCount = default, int totalTokenCount = default) + public static OutputAudioFinishedUpdate OutputAudioFinishedUpdate(string eventId = default, string responseId = default, string itemId = default, int outputIndex = default, int contentIndex = default) { - - return new EmbeddingTokenUsage(inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null); + return new OutputAudioFinishedUpdate( + RealtimeUpdateKind.ItemStreamingPartAudioFinished, + eventId, + additionalBinaryDataProperties: null, + responseId, + itemId, + outputIndex, + contentIndex); } - public static ChatTokenUsage ChatTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default, ChatOutputTokenUsageDetails outputTokenDetails = default, ChatInputTokenUsageDetails inputTokenDetails = default) + public static RateLimitsUpdate RateLimitsUpdate(string eventId = default, IEnumerable allDetails = default) { + allDetails ??= new ChangeTrackingList(); - return new ChatTokenUsage( - outputTokenCount, - inputTokenCount, - totalTokenCount, - outputTokenDetails, - inputTokenDetails, - additionalBinaryDataProperties: null); + return new RateLimitsUpdate(RealtimeUpdateKind.RateLimitsUpdated, eventId, additionalBinaryDataProperties: null, allDetails?.ToList()); } - public static ChatOutputTokenUsageDetails ChatOutputTokenUsageDetails(int reasoningTokenCount = default, int audioTokenCount = default, int acceptedPredictionTokenCount = default, int rejectedPredictionTokenCount = default) + public static ConversationRateLimitDetailsItem ConversationRateLimitDetailsItem(string name = default, int maximumCount = default, int remainingCount = default, TimeSpan timeUntilReset = default) { - - return new ChatOutputTokenUsageDetails(reasoningTokenCount, audioTokenCount, acceptedPredictionTokenCount, rejectedPredictionTokenCount, additionalBinaryDataProperties: null); + return new ConversationRateLimitDetailsItem(name, maximumCount, remainingCount, timeUntilReset, additionalBinaryDataProperties: null); } - public static ChatInputTokenUsageDetails ChatInputTokenUsageDetails(int audioTokenCount = default, int cachedTokenCount = default) + public static ItemRetrievedUpdate ItemRetrievedUpdate(string eventId = default, RealtimeItem item = default) { - - return new ChatInputTokenUsageDetails(audioTokenCount, cachedTokenCount, additionalBinaryDataProperties: null); + return new ItemRetrievedUpdate(RealtimeUpdateKind.ItemRetrieved, eventId, additionalBinaryDataProperties: null, item); } - public static ChatMessage ChatMessage(ChatMessageContent content = default, string role = default) + public static ThreadCreationOptions ThreadCreationOptions(IDictionary metadata = default, ToolResources toolResources = default, IEnumerable internalMessages = default) { + metadata ??= new ChangeTrackingDictionary(); + internalMessages ??= new ChangeTrackingList(); - return new InternalUnknownChatMessage(content, role.ToChatMessageRole(), additionalBinaryDataProperties: null); + return new ThreadCreationOptions(metadata, toolResources, internalMessages?.ToList(), additionalBinaryDataProperties: null); } - public static SystemChatMessage SystemChatMessage(ChatMessageContent content = default, string participantName = default) + public static AssistantThread AssistantThread(string id = default, DateTimeOffset createdAt = default, IReadOnlyDictionary metadata = default, string @object = default, ToolResources toolResources = default) { + metadata ??= new ChangeTrackingDictionary(); - return new SystemChatMessage(content, ChatMessageRole.System, additionalBinaryDataProperties: null, participantName); + return new AssistantThread( + id, + createdAt, + metadata, + @object, + toolResources, + additionalBinaryDataProperties: null); } - public static DeveloperChatMessage DeveloperChatMessage(ChatMessageContent content = default, string participantName = default) + public static ThreadModificationOptions ThreadModificationOptions(IDictionary metadata = default, ToolResources toolResources = default) { + metadata ??= new ChangeTrackingDictionary(); - return new DeveloperChatMessage(content, ChatMessageRole.Developer, additionalBinaryDataProperties: null, participantName); + return new ThreadModificationOptions(metadata, toolResources, additionalBinaryDataProperties: null); } - public static UserChatMessage UserChatMessage(ChatMessageContent content = default, string participantName = default) + public static ThreadDeletionResult ThreadDeletionResult(bool deleted = default, string threadId = default, string @object = default) { - - return new UserChatMessage(content, ChatMessageRole.User, additionalBinaryDataProperties: null, participantName); + return new ThreadDeletionResult(deleted, threadId, @object, additionalBinaryDataProperties: null); } - public static AssistantChatMessage AssistantChatMessage(ChatMessageContent content = default, string refusal = default, string participantName = default, IEnumerable toolCalls = default, ChatFunctionCall functionCall = default, ChatOutputAudioReference outputAudioReference = default) + public static RunError RunError(RunErrorCode code = default, string message = default) { - toolCalls ??= new ChangeTrackingList(); - - return new AssistantChatMessage( - content, - ChatMessageRole.Assistant, - additionalBinaryDataProperties: null, - refusal, - participantName, - toolCalls?.ToList(), - functionCall, - outputAudioReference); + return new RunError(code, message, additionalBinaryDataProperties: null); } - public static ChatOutputAudioReference ChatOutputAudioReference(string id = default) + public static RunIncompleteDetails RunIncompleteDetails(RunIncompleteReason? reason = default) { - - return new ChatOutputAudioReference(id, additionalBinaryDataProperties: null); + return new RunIncompleteDetails(reason, additionalBinaryDataProperties: null); } - public static ChatFunctionCall ChatFunctionCall(string functionName = default, BinaryData functionArguments = default) + public static RunTokenUsage RunTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default) { - - return new ChatFunctionCall(functionName, functionArguments, additionalBinaryDataProperties: null); + return new RunTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null); } - public static ToolChatMessage ToolChatMessage(ChatMessageContent content = default, string toolCallId = default) + public static RunCreationOptions RunCreationOptions(string assistantId = default, bool? stream = default, AssistantResponseFormat responseFormat = default, string modelOverride = default, string instructionsOverride = default, string additionalInstructions = default, IEnumerable internalMessages = default, bool? allowParallelToolCalls = default, IEnumerable toolsOverride = default, IDictionary metadata = default, float? temperature = default, float? nucleusSamplingFactor = default, int? maxInputTokenCount = default, int? maxOutputTokenCount = default, RunTruncationStrategy truncationStrategy = default, ToolConstraint toolConstraint = default, ChatReasoningEffortLevel? reasoningEffortLevel = default) { + internalMessages ??= new ChangeTrackingList(); + toolsOverride ??= new ChangeTrackingList(); + metadata ??= new ChangeTrackingDictionary(); - return new ToolChatMessage(content, ChatMessageRole.Tool, additionalBinaryDataProperties: null, toolCallId); + return new RunCreationOptions( + assistantId, + stream, + responseFormat, + modelOverride, + instructionsOverride, + additionalInstructions, + internalMessages?.ToList(), + allowParallelToolCalls, + toolsOverride?.ToList(), + metadata, + temperature, + nucleusSamplingFactor, + maxInputTokenCount, + maxOutputTokenCount, + truncationStrategy, + toolConstraint, + reasoningEffortLevel, + additionalBinaryDataProperties: null); } - public static FunctionChatMessage FunctionChatMessage(ChatMessageContent content = default, string functionName = default) + public static RunModificationOptions RunModificationOptions(IDictionary metadata = default) { + metadata ??= new ChangeTrackingDictionary(); - return new FunctionChatMessage(content, ChatMessageRole.Function, additionalBinaryDataProperties: null, functionName); + return new RunModificationOptions(metadata, additionalBinaryDataProperties: null); } - public static ChatResponseFormat ChatResponseFormat(string @type = default) + public static ToolOutput ToolOutput(string toolCallId = default, string output = default) { - - return new InternalUnknownChatResponseFormat(@type, additionalBinaryDataProperties: null); + return new ToolOutput(toolCallId, output, additionalBinaryDataProperties: null); } - public static ChatAudioOptions ChatAudioOptions(ChatOutputAudioVoice outputAudioVoice = default, ChatOutputAudioFormat outputAudioFormat = default) + public static RunStep RunStep(string id = default, DateTimeOffset createdAt = default, string assistantId = default, string threadId = default, string runId = default, RunStepKind kind = default, RunStepStatus status = default, RunStepError lastError = default, DateTimeOffset? expiredAt = default, DateTimeOffset? cancelledAt = default, DateTimeOffset? failedAt = default, DateTimeOffset? completedAt = default, IReadOnlyDictionary metadata = default, RunStepTokenUsage usage = default, string @object = default, RunStepDetails details = default) { + metadata ??= new ChangeTrackingDictionary(); - return new ChatAudioOptions(outputAudioVoice, outputAudioFormat, additionalBinaryDataProperties: null); + return new RunStep( + id, + createdAt, + assistantId, + threadId, + runId, + kind, + status, + lastError, + expiredAt, + cancelledAt, + failedAt, + completedAt, + metadata, + usage, + @object, + details, + additionalBinaryDataProperties: null); } - public static ChatFunction ChatFunction(string functionName = default, string functionDescription = default, BinaryData functionParameters = default) + public static RunStepToolCall RunStepToolCall(string kind = default, string id = default) { - - return new ChatFunction(functionName, functionDescription, functionParameters, additionalBinaryDataProperties: null); + return new UnknownRunStepDetailsToolCallsObjectToolCallsObject(kind.ToRunStepToolCallKind(), id, additionalBinaryDataProperties: null); } - public static ChatOutputAudio ChatOutputAudio(string id = default, DateTimeOffset expiresAt = default, string transcript = default, BinaryData audioBytes = default) + public static RunStepFileSearchResult RunStepFileSearchResult(string fileId = default, string fileName = default, float score = default, IEnumerable content = default) { + content ??= new ChangeTrackingList(); - return new ChatOutputAudio(id, expiresAt, transcript, audioBytes, additionalBinaryDataProperties: null); + return new RunStepFileSearchResult(fileId, fileName, score, content?.ToList(), additionalBinaryDataProperties: null); } - public static ChatTokenLogProbabilityDetails ChatTokenLogProbabilityDetails(string token = default, float logProbability = default, ReadOnlyMemory? utf8Bytes = default, IEnumerable topLogProbabilities = default) + public static RunStepFileSearchResultContent RunStepFileSearchResultContent(string text = default, RunStepFileSearchResultContentKind kind = default) { - topLogProbabilities ??= new ChangeTrackingList(); - - return new ChatTokenLogProbabilityDetails(token, logProbability, utf8Bytes, topLogProbabilities?.ToList(), additionalBinaryDataProperties: null); + return new RunStepFileSearchResultContent(text, kind, additionalBinaryDataProperties: null); } - public static ChatTokenTopLogProbabilityDetails ChatTokenTopLogProbabilityDetails(string token = default, float logProbability = default, ReadOnlyMemory? utf8Bytes = default) + public static RunStepError RunStepError(RunStepErrorCode code = default, string message = default) { + return new RunStepError(code, message, additionalBinaryDataProperties: null); + } - return new ChatTokenTopLogProbabilityDetails(token, logProbability, utf8Bytes, additionalBinaryDataProperties: null); + public static RunStepTokenUsage RunStepTokenUsage(int outputTokenCount = default, int inputTokenCount = default, int totalTokenCount = default) + { + return new RunStepTokenUsage(outputTokenCount, inputTokenCount, totalTokenCount, additionalBinaryDataProperties: null); } - public static AssistantCreationOptions AssistantCreationOptions(string name = default, string description = default, string instructions = default, IDictionary metadata = default, float? temperature = default, string model = default, IEnumerable tools = default, ToolResources toolResources = default, AssistantResponseFormat responseFormat = default, float? nucleusSamplingFactor = default, ChatReasoningEffortLevel? reasoningEffortLevel = default) + public static VectorStore VectorStore(string id = default, DateTimeOffset createdAt = default, string name = default, int usageBytes = default, VectorStoreFileCounts fileCounts = default, VectorStoreStatus status = default, DateTimeOffset? expiresAt = default, DateTimeOffset? lastActiveAt = default, IReadOnlyDictionary metadata = default, string @object = default, VectorStoreExpirationPolicy expirationPolicy = default) { metadata ??= new ChangeTrackingDictionary(); - tools ??= new ChangeTrackingList(); - return new AssistantCreationOptions( + return new VectorStore( + id, + createdAt, name, - description, - instructions, + usageBytes, + fileCounts, + status, + expiresAt, + lastActiveAt, metadata, - temperature, - model, - tools?.ToList(), - toolResources, - responseFormat, - nucleusSamplingFactor, - reasoningEffortLevel, + @object, + expirationPolicy, additionalBinaryDataProperties: null); } - public static ToolResources ToolResources(CodeInterpreterToolResources codeInterpreter = default, FileSearchToolResources fileSearch = default) + public static VectorStoreFileCounts VectorStoreFileCounts(int inProgress = default, int completed = default, int failed = default, int cancelled = default, int total = default) { - - return new ToolResources(codeInterpreter, fileSearch, additionalBinaryDataProperties: null); + return new VectorStoreFileCounts( + inProgress, + completed, + failed, + cancelled, + total, + additionalBinaryDataProperties: null); } - public static CodeInterpreterToolResources CodeInterpreterToolResources(IEnumerable fileIds = default) + public static VectorStoreExpirationPolicy VectorStoreExpirationPolicy(int days = default, VectorStoreExpirationAnchor anchor = default) { - fileIds ??= new ChangeTrackingList(); - - return new CodeInterpreterToolResources(fileIds?.ToList(), additionalBinaryDataProperties: null); + return new VectorStoreExpirationPolicy(days, anchor, additionalBinaryDataProperties: null); } - public static AssistantModificationOptions AssistantModificationOptions(string name = default, string description = default, string instructions = default, IDictionary metadata = default, float? temperature = default, string model = default, IEnumerable defaultTools = default, ToolResources toolResources = default, AssistantResponseFormat responseFormat = default, float? nucleusSamplingFactor = default, ChatReasoningEffortLevel? reasoningEffortLevel = default) + public static VectorStoreCreationOptions VectorStoreCreationOptions(IEnumerable fileIds = default, string name = default, IDictionary metadata = default, VectorStoreExpirationPolicy expirationPolicy = default, FileChunkingStrategy chunkingStrategy = default) { + fileIds ??= new ChangeTrackingList(); metadata ??= new ChangeTrackingDictionary(); - defaultTools ??= new ChangeTrackingList(); - return new AssistantModificationOptions( + return new VectorStoreCreationOptions( + fileIds?.ToList(), name, - description, - instructions, metadata, - temperature, - model, - defaultTools?.ToList(), - toolResources, - responseFormat, - nucleusSamplingFactor, - reasoningEffortLevel, + expirationPolicy, + chunkingStrategy, additionalBinaryDataProperties: null); } - public static TranscribedWord TranscribedWord(string word = default, TimeSpan startTime = default, TimeSpan endTime = default) + public static VectorStoreModificationOptions VectorStoreModificationOptions(string name = default, IDictionary metadata = default, VectorStoreExpirationPolicy expirationPolicy = default) { + metadata ??= new ChangeTrackingDictionary(); - return new TranscribedWord(word, startTime, endTime, additionalBinaryDataProperties: null); + return new VectorStoreModificationOptions(name, metadata, expirationPolicy, additionalBinaryDataProperties: null); } - public static TranscribedSegment TranscribedSegment(int id = default, string text = default, float temperature = default, float compressionRatio = default, TimeSpan startTime = default, TimeSpan endTime = default, int seekOffset = default, ReadOnlyMemory tokenIds = default, float averageLogProbability = default, float noSpeechProbability = default) + public static VectorStoreDeletionResult VectorStoreDeletionResult(bool deleted = default, string vectorStoreId = default, string @object = default) { - - return new TranscribedSegment( - id, - text, - temperature, - compressionRatio, - startTime, - endTime, - seekOffset, - tokenIds, - averageLogProbability, - noSpeechProbability, - additionalBinaryDataProperties: null); + return new VectorStoreDeletionResult(deleted, vectorStoreId, @object, additionalBinaryDataProperties: null); } - public static AssistantResponseFormat AssistantResponseFormat(string @type = default) + public static VectorStoreBatchFileJob VectorStoreBatchFileJob(DateTimeOffset createdAt = default, string vectorStoreId = default, VectorStoreBatchFileJobStatus status = default, string batchId = default, VectorStoreFileCounts fileCounts = default, object @object = default) { - - return new InternalUnknownAssistantResponseFormat(@type, additionalBinaryDataProperties: null); + return new VectorStoreBatchFileJob( + createdAt, + vectorStoreId, + status, + batchId, + fileCounts, + @object, + additionalBinaryDataProperties: null); } - public static ChatFunctionChoice ChatFunctionChoice(string predefinedFunctionChoice = default) + public static VectorStoreFileAssociation VectorStoreFileAssociation(DateTimeOffset createdAt = default, string vectorStoreId = default, VectorStoreFileAssociationStatus status = default, VectorStoreFileAssociationError lastError = default, string @object = default, string fileId = default, int size = default, IDictionary attributes = default, FileChunkingStrategy chunkingStrategy = default) { + attributes ??= new ChangeTrackingDictionary(); - return new ChatFunctionChoice(predefinedFunctionChoice); + return new VectorStoreFileAssociation( + createdAt, + vectorStoreId, + status, + lastError, + @object, + fileId, + size, + attributes, + chunkingStrategy, + additionalBinaryDataProperties: null); } - public static ChatToolChoice ChatToolChoice() + public static VectorStoreFileAssociationError VectorStoreFileAssociationError(VectorStoreFileAssociationErrorCode code = default, string message = default) { - - return new ChatToolChoice(additionalBinaryDataProperties: null); + return new VectorStoreFileAssociationError(code, message, additionalBinaryDataProperties: null); } - public static ChatMessageContent ChatMessageContent() + public static FileFromStoreRemovalResult FileFromStoreRemovalResult(string fileId = default, bool removed = default, string @object = default) { - - return new ChatMessageContent(additionalBinaryDataProperties: null); + return new FileFromStoreRemovalResult(fileId, removed, @object, additionalBinaryDataProperties: null); } - public static ChatMessageContentPart ChatMessageContentPart(ChatMessageContentPartKind kind = default, string text = default, InternalChatCompletionRequestMessageContentPartImageImageUrl imageUri = default, string refusal = default, InternalChatCompletionRequestMessageContentPartAudioInputAudio inputAudio = default, InternalChatCompletionRequestMessageContentPartFileFile fileFile = default) + public static AudioTranscription AudioTranscription(string language = default, string text = default, IEnumerable words = default, IEnumerable segments = default, string task = default, TimeSpan? duration = default, IEnumerable transcriptionTokenLogProbabilities = default) { + words ??= new ChangeTrackingList(); + segments ??= new ChangeTrackingList(); + transcriptionTokenLogProbabilities ??= new ChangeTrackingList(); - return new ChatMessageContentPart( - kind, + return new AudioTranscription( + language, text, - imageUri, - refusal, - inputAudio, - fileFile, - serializedAdditionalRawData: null); + words?.ToList(), + segments?.ToList(), + task, + duration, + transcriptionTokenLogProbabilities?.ToList(), + additionalBinaryDataProperties: null); } - public static StreamingChatOutputAudioUpdate StreamingChatOutputAudioUpdate(string id = default, DateTimeOffset? expiresAt = default, string transcriptUpdate = default, BinaryData audioBytesUpdate = default) + public static AudioTokenLogProbabilityDetails AudioTokenLogProbabilityDetails(string token = default, float logProbability = default, ReadOnlyMemory utf8Bytes = default) { - - return new StreamingChatOutputAudioUpdate(id, expiresAt, transcriptUpdate, audioBytesUpdate, additionalBinaryDataProperties: null); + return new AudioTokenLogProbabilityDetails(token, logProbability, utf8Bytes, additionalBinaryDataProperties: null); } - public static StreamingChatFunctionCallUpdate StreamingChatFunctionCallUpdate(string functionName = default, BinaryData functionArgumentsUpdate = default) + public static ChatFunctionChoice ChatFunctionChoice(string predefinedFunctionChoice = default) { - - return new StreamingChatFunctionCallUpdate(functionName, functionArgumentsUpdate, additionalBinaryDataProperties: null); + return new ChatFunctionChoice(predefinedFunctionChoice); } - public static RunStepUpdateCodeInterpreterOutput RunStepUpdateCodeInterpreterOutput(string @type = default) + public static ChatToolChoice ChatToolChoice() { - - return new UnknownRunStepDeltaStepDetailsToolCallsCodeObjectCodeInterpreterOutputsObject(@type, additionalBinaryDataProperties: null); + return new ChatToolChoice(additionalBinaryDataProperties: null); } } } diff --git a/src/Generated/OpenAIResponseClient.RestClient.cs b/src/Generated/OpenAIResponseClient.RestClient.cs index fad18255a..25c1cd5db 100644 --- a/src/Generated/OpenAIResponseClient.RestClient.cs +++ b/src/Generated/OpenAIResponseClient.RestClient.cs @@ -15,7 +15,7 @@ public partial class OpenAIResponseClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal virtual PipelineMessage CreateCreateResponseRequest(BinaryContent content, string accept, RequestOptions options) + internal virtual PipelineMessage CreateCreateResponseRequest(BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -25,14 +25,14 @@ internal virtual PipelineMessage CreateCreateResponseRequest(BinaryContent conte uri.Reset(_endpoint); uri.AppendPath("/responses", false); request.Uri = uri.ToUri(); - request.Headers.Set("Accept", accept); + request.Headers.Set("Accept", "application/json, text/event-stream"); request.Headers.Set("Content-Type", "application/json"); request.Content = content; message.Apply(options); return message; } - internal virtual PipelineMessage CreateGetResponseRequest(string responseId, IEnumerable includables, RequestOptions options) + internal virtual PipelineMessage CreateGetResponseRequest(string responseId, IEnumerable includables, bool? stream, int? startingAfter, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -42,20 +42,61 @@ internal virtual PipelineMessage CreateGetResponseRequest(string responseId, IEn uri.Reset(_endpoint); uri.AppendPath("/responses/", false); uri.AppendPath(responseId, true); - if (includables != null && !(includables is ChangeTrackingList changeTrackingList && changeTrackingList.IsUndefined)) + if (includables != null && !(includables is ChangeTrackingList changeTrackingList && changeTrackingList.IsUndefined)) { foreach (var @param in includables) { uri.AppendQuery("include[]", @param, true); } } + if (stream != null) + { + uri.AppendQuery("stream", TypeFormatters.ConvertToString(stream, null), true); + } + if (startingAfter != null) + { + uri.AppendQuery("starting_after", TypeFormatters.ConvertToString(startingAfter, null), true); + } + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json, text/event-stream"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateDeleteResponseRequest(string responseId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "DELETE"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/responses/", false); + uri.AppendPath(responseId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCancelResponseRequest(string responseId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/responses/", false); + uri.AppendPath(responseId, true); + uri.AppendPath("/cancel", false); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); message.Apply(options); return message; } - internal virtual PipelineMessage CreateListInputItemsRequest(string responseId, int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateGetInputItemsRequest(string responseId, int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -87,21 +128,5 @@ internal virtual PipelineMessage CreateListInputItemsRequest(string responseId, message.Apply(options); return message; } - - internal virtual PipelineMessage CreateDeleteResponseRequest(string responseId, RequestOptions options) - { - PipelineMessage message = Pipeline.CreateMessage(); - message.ResponseClassifier = PipelineMessageClassifier200; - PipelineRequest request = message.Request; - request.Method = "DELETE"; - ClientUriBuilder uri = new ClientUriBuilder(); - uri.Reset(_endpoint); - uri.AppendPath("/responses/", false); - uri.AppendPath(responseId, true); - request.Uri = uri.ToUri(); - request.Headers.Set("Accept", "application/json"); - message.Apply(options); - return message; - } } } diff --git a/src/Generated/OpenAIResponseClient.cs b/src/Generated/OpenAIResponseClient.cs index ff0f17fae..d87d43f00 100644 --- a/src/Generated/OpenAIResponseClient.cs +++ b/src/Generated/OpenAIResponseClient.cs @@ -3,7 +3,10 @@ #nullable disable using System; +using System.ClientModel; using System.ClientModel.Primitives; +using System.Threading.Tasks; +using OpenAI; namespace OpenAI.Responses { @@ -22,5 +25,21 @@ internal OpenAIResponseClient(ClientPipeline pipeline, Uri endpoint) } public ClientPipeline Pipeline { get; } + + public virtual ClientResult CancelResponse(string responseId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + using PipelineMessage message = CreateCancelResponseRequest(responseId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CancelResponseAsync(string responseId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(responseId, nameof(responseId)); + + using PipelineMessage message = CreateCancelResponseRequest(responseId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } } } diff --git a/src/Generated/RealtimeClient.RestClient.cs b/src/Generated/RealtimeClient.RestClient.cs new file mode 100644 index 000000000..eec778dcb --- /dev/null +++ b/src/Generated/RealtimeClient.RestClient.cs @@ -0,0 +1,51 @@ +// + +#nullable disable + +using System.ClientModel; +using System.ClientModel.Primitives; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class RealtimeClient + { + private static PipelineMessageClassifier _pipelineMessageClassifier200; + + private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); + + internal virtual PipelineMessage CreateCreateEphemeralTokenRequest(BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/realtime/sessions", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCreateEphemeralTranscriptionTokenRequest(BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/realtime/transcription_sessions", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); + request.Headers.Set("Accept", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + } +} diff --git a/src/Generated/RealtimeClient.cs b/src/Generated/RealtimeClient.cs new file mode 100644 index 000000000..cbf5801e9 --- /dev/null +++ b/src/Generated/RealtimeClient.cs @@ -0,0 +1,61 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Threading.Tasks; +using OpenAI; + +namespace OpenAI.Realtime +{ + public partial class RealtimeClient + { + private readonly Uri _endpoint; + + protected RealtimeClient() + { + } + + internal RealtimeClient(ClientPipeline pipeline, Uri endpoint) + { + _endpoint = endpoint; + Pipeline = pipeline; + } + + public ClientPipeline Pipeline { get; } + + public virtual ClientResult CreateEphemeralToken(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateEphemeralTokenRequest(content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CreateEphemeralTokenAsync(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateEphemeralTokenRequest(content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult CreateEphemeralTranscriptionToken(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateEphemeralTranscriptionTokenRequest(content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task CreateEphemeralTranscriptionTokenAsync(BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateCreateEphemeralTranscriptionTokenRequest(content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + } +} diff --git a/src/Generated/RealtimeConversationClient.RestClient.cs b/src/Generated/RealtimeConversationClient.RestClient.cs deleted file mode 100644 index f00049368..000000000 --- a/src/Generated/RealtimeConversationClient.RestClient.cs +++ /dev/null @@ -1,15 +0,0 @@ -// - -#nullable disable - -using System.ClientModel.Primitives; - -namespace OpenAI.RealtimeConversation -{ - public partial class RealtimeConversationClient - { - private static PipelineMessageClassifier _pipelineMessageClassifier200; - - private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - } -} diff --git a/src/Generated/RealtimeConversationClient.cs b/src/Generated/RealtimeConversationClient.cs deleted file mode 100644 index 638a057da..000000000 --- a/src/Generated/RealtimeConversationClient.cs +++ /dev/null @@ -1,26 +0,0 @@ -// - -#nullable disable - -using System; -using System.ClientModel.Primitives; - -namespace OpenAI.RealtimeConversation -{ - public partial class RealtimeConversationClient - { - private readonly Uri _endpoint; - - protected RealtimeConversationClient() - { - } - - internal RealtimeConversationClient(ClientPipeline pipeline, Uri endpoint) - { - _endpoint = endpoint; - Pipeline = pipeline; - } - - public ClientPipeline Pipeline { get; } - } -} diff --git a/src/Generated/VectorStoreClient.RestClient.cs b/src/Generated/VectorStoreClient.RestClient.cs index d81e0e87a..08078c7c2 100644 --- a/src/Generated/VectorStoreClient.RestClient.cs +++ b/src/Generated/VectorStoreClient.RestClient.cs @@ -14,7 +14,7 @@ public partial class VectorStoreClient private static PipelineMessageClassifier PipelineMessageClassifier200 => _pipelineMessageClassifier200 = PipelineMessageClassifier.Create(stackalloc ushort[] { 200 }); - internal virtual PipelineMessage CreateListVectorStoresRequest(int? limit, string order, string after, string before, RequestOptions options) + internal virtual PipelineMessage CreateGetVectorStoresRequest(int? limit, string order, string after, string before, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -112,7 +112,26 @@ internal virtual PipelineMessage CreateDeleteVectorStoreRequest(string vectorSto return message; } - internal virtual PipelineMessage CreateListVectorStoreFilesRequest(string vectorStoreId, int? limit, string order, string after, string before, string filter, RequestOptions options) + internal virtual PipelineMessage CreateCreateVectorStoreFileBatchRequest(string vectorStoreId, BinaryContent content, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/file_batches", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Content-Type", "application/json"); + request.Content = content; + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; @@ -122,6 +141,45 @@ internal virtual PipelineMessage CreateListVectorStoreFilesRequest(string vector uri.Reset(_endpoint); uri.AppendPath("/vector_stores/", false); uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/file_batches/", false); + uri.AppendPath(batchId, true); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateCancelVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "POST"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/file_batches/", false); + uri.AppendPath(batchId, true); + uri.AppendPath("/cancel", false); + request.Uri = uri.ToUri(); + request.Headers.Set("Accept", "application/json"); + message.Apply(options); + return message; + } + + internal virtual PipelineMessage CreateGetFilesInVectorStoreBatchRequest(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) + { + PipelineMessage message = Pipeline.CreateMessage(); + message.ResponseClassifier = PipelineMessageClassifier200; + PipelineRequest request = message.Request; + request.Method = "GET"; + ClientUriBuilder uri = new ClientUriBuilder(); + uri.Reset(_endpoint); + uri.AppendPath("/vector_stores/", false); + uri.AppendPath(vectorStoreId, true); + uri.AppendPath("/file_batches/", false); + uri.AppendPath(batchId, true); uri.AppendPath("/files", false); if (limit != null) { @@ -149,49 +207,68 @@ internal virtual PipelineMessage CreateListVectorStoreFilesRequest(string vector return message; } - internal virtual PipelineMessage CreateCreateVectorStoreFileRequest(string vectorStoreId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateGetVectorStoreFilesRequest(string vectorStoreId, int? limit, string order, string after, string before, string filter, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "POST"; + request.Method = "GET"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/vector_stores/", false); uri.AppendPath(vectorStoreId, true); uri.AppendPath("/files", false); + if (limit != null) + { + uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); + } + if (order != null) + { + uri.AppendQuery("order", order, true); + } + if (after != null) + { + uri.AppendQuery("after", after, true); + } + if (before != null) + { + uri.AppendQuery("before", before, true); + } + if (filter != null) + { + uri.AppendQuery("filter", filter, true); + } request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); - request.Headers.Set("Content-Type", "application/json"); - request.Content = content; message.Apply(options); return message; } - internal virtual PipelineMessage CreateGetVectorStoreFileRequest(string vectorStoreId, string fileId, RequestOptions options) + internal virtual PipelineMessage CreateCreateVectorStoreFileRequest(string vectorStoreId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "GET"; + request.Method = "POST"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/vector_stores/", false); uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/files/", false); - uri.AppendPath(fileId, true); + uri.AppendPath("/files", false); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); + request.Headers.Set("Content-Type", "application/json"); + request.Content = content; message.Apply(options); return message; } - internal virtual PipelineMessage CreateDeleteVectorStoreFileRequest(string vectorStoreId, string fileId, RequestOptions options) + internal virtual PipelineMessage CreateGetVectorStoreFileRequest(string vectorStoreId, string fileId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "DELETE"; + request.Method = "GET"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/vector_stores/", false); @@ -204,97 +281,78 @@ internal virtual PipelineMessage CreateDeleteVectorStoreFileRequest(string vecto return message; } - internal virtual PipelineMessage CreateCreateVectorStoreFileBatchRequest(string vectorStoreId, BinaryContent content, RequestOptions options) + internal virtual PipelineMessage CreateDeleteVectorStoreFileRequest(string vectorStoreId, string fileId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "POST"; + request.Method = "DELETE"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/vector_stores/", false); uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/file_batches", false); + uri.AppendPath("/files/", false); + uri.AppendPath(fileId, true); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); - request.Headers.Set("Content-Type", "application/json"); - request.Content = content; message.Apply(options); return message; } - internal virtual PipelineMessage CreateGetVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) + internal virtual PipelineMessage CreateUpdateVectorStoreFileAttributesRequest(string vectorStoreId, string fileId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "GET"; + request.Method = "POST"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/vector_stores/", false); uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/file_batches/", false); - uri.AppendPath(batchId, true); + uri.AppendPath("/files/", false); + uri.AppendPath(fileId, true); request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); request.Headers.Set("Accept", "application/json"); + request.Content = content; message.Apply(options); return message; } - internal virtual PipelineMessage CreateCancelVectorStoreFileBatchRequest(string vectorStoreId, string batchId, RequestOptions options) + internal virtual PipelineMessage CreateRetrieveVectorStoreFileContentRequest(string vectorStoreId, string fileId, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "POST"; + request.Method = "GET"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/vector_stores/", false); uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/file_batches/", false); - uri.AppendPath(batchId, true); - uri.AppendPath("/cancel", false); + uri.AppendPath("/files/", false); + uri.AppendPath(fileId, true); + uri.AppendPath("/content", false); request.Uri = uri.ToUri(); request.Headers.Set("Accept", "application/json"); message.Apply(options); return message; } - internal virtual PipelineMessage CreateListFilesInVectorStoreBatchRequest(string vectorStoreId, string batchId, int? limit, string order, string after, string before, string filter, RequestOptions options) + internal virtual PipelineMessage CreateSearchVectorStoreRequest(string vectorStoreId, BinaryContent content, RequestOptions options) { PipelineMessage message = Pipeline.CreateMessage(); message.ResponseClassifier = PipelineMessageClassifier200; PipelineRequest request = message.Request; - request.Method = "GET"; + request.Method = "POST"; ClientUriBuilder uri = new ClientUriBuilder(); uri.Reset(_endpoint); uri.AppendPath("/vector_stores/", false); uri.AppendPath(vectorStoreId, true); - uri.AppendPath("/file_batches/", false); - uri.AppendPath(batchId, true); - uri.AppendPath("/files", false); - if (limit != null) - { - uri.AppendQuery("limit", TypeFormatters.ConvertToString(limit, null), true); - } - if (order != null) - { - uri.AppendQuery("order", order, true); - } - if (after != null) - { - uri.AppendQuery("after", after, true); - } - if (before != null) - { - uri.AppendQuery("before", before, true); - } - if (filter != null) - { - uri.AppendQuery("filter", filter, true); - } + uri.AppendPath("/search", false); request.Uri = uri.ToUri(); + request.Headers.Set("Content-Type", "application/json"); request.Headers.Set("Accept", "application/json"); + request.Content = content; message.Apply(options); return message; } diff --git a/src/Generated/VectorStoreClient.cs b/src/Generated/VectorStoreClient.cs index 5c2b03fb6..7fcbc1182 100644 --- a/src/Generated/VectorStoreClient.cs +++ b/src/Generated/VectorStoreClient.cs @@ -35,5 +35,61 @@ public virtual async Task CreateVectorStoreAsync(BinaryContent con using PipelineMessage message = CreateCreateVectorStoreRequest(content, options); return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); } + + public virtual ClientResult UpdateVectorStoreFileAttributes(string vectorStoreId, string fileId, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateUpdateVectorStoreFileAttributesRequest(vectorStoreId, fileId, content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task UpdateVectorStoreFileAttributesAsync(string vectorStoreId, string fileId, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateUpdateVectorStoreFileAttributesRequest(vectorStoreId, fileId, content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult RetrieveVectorStoreFileContent(string vectorStoreId, string fileId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + using PipelineMessage message = CreateRetrieveVectorStoreFileContentRequest(vectorStoreId, fileId, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task RetrieveVectorStoreFileContentAsync(string vectorStoreId, string fileId, RequestOptions options) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNullOrEmpty(fileId, nameof(fileId)); + + using PipelineMessage message = CreateRetrieveVectorStoreFileContentRequest(vectorStoreId, fileId, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } + + public virtual ClientResult SearchVectorStore(string vectorStoreId, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateSearchVectorStoreRequest(vectorStoreId, content, options); + return ClientResult.FromResponse(Pipeline.ProcessMessage(message, options)); + } + + public virtual async Task SearchVectorStoreAsync(string vectorStoreId, BinaryContent content, RequestOptions options = null) + { + Argument.AssertNotNullOrEmpty(vectorStoreId, nameof(vectorStoreId)); + Argument.AssertNotNull(content, nameof(content)); + + using PipelineMessage message = CreateSearchVectorStoreRequest(vectorStoreId, content, options); + return ClientResult.FromResponse(await Pipeline.ProcessMessageAsync(message, options).ConfigureAwait(false)); + } } } diff --git a/src/OpenAI.csproj b/src/OpenAI.csproj index 78809549d..12bb609a7 100644 --- a/src/OpenAI.csproj +++ b/src/OpenAI.csproj @@ -60,10 +60,6 @@ 0024000004800000940000000602000000240000525341310004000001000100097ad52abbeaa2e1a1982747cc0106534f65cfea6707eaed696a3a63daea80de2512746801a7e47f88e7781e71af960d89ba2e25561f70b0e2dbc93319e0af1961a719ccf5a4d28709b2b57a5d29b7c09dc8d269a490ebe2651c4b6e6738c27c5fb2c02469fe9757f0a3479ac310d6588a50a28d7dd431b907fd325e18b9e8ed - - 0024000004800000940000000602000000240000525341310004000001000100b197326f2e5bfe2e2a49eb2a05bee871c55cc894325b3775159732ad816c4f304916e7f154295486f8ccabefa3c19b059d51cd19987cc2d31a3195d6203ad0948662f51cc61cc3eb535fc852dfe5159318c734b163f7d1387f1112e1ffe10f83aae7b809c4e36cf2025da5d1aed6b67e1556883d8778eeb63131c029555166de - - @@ -85,11 +81,10 @@ - - + - + - + \ No newline at end of file diff --git a/src/Utility/AsyncSseUpdateCollection.cs b/src/Utility/AsyncSseUpdateCollection.cs index 628331884..f1809513e 100644 --- a/src/Utility/AsyncSseUpdateCollection.cs +++ b/src/Utility/AsyncSseUpdateCollection.cs @@ -21,6 +21,8 @@ internal class AsyncSseUpdateCollection : AsyncCollectionResult private readonly Func, IEnumerable> _eventDeserializerFunc; private readonly CancellationToken _cancellationToken; + public List AdditionalDisposalActions { get; } = []; + public AsyncSseUpdateCollection( Func> sendRequestAsync, Func> jsonMultiDeserializerFunc, @@ -71,7 +73,8 @@ public async override IAsyncEnumerable GetRawPagesAsync() protected async override IAsyncEnumerable GetValuesFromPageAsync(ClientResult page) { - await using IAsyncEnumerator enumerator = new AsyncSseUpdateEnumerator(_eventDeserializerFunc, page, _cancellationToken); + await using IAsyncEnumerator enumerator = new AsyncSseUpdateEnumerator(_eventDeserializerFunc, page, _cancellationToken, AdditionalDisposalActions); + while (await enumerator.MoveNextAsync().ConfigureAwait(false)) { yield return enumerator.Current; @@ -98,6 +101,8 @@ private sealed class AsyncSseUpdateEnumerator : IAsyncEnumerator { private static ReadOnlySpan TerminalData => "[DONE]"u8; + private List _additionalDisposalActions; + private readonly CancellationToken _cancellationToken; private readonly PipelineResponse _response; @@ -118,13 +123,15 @@ private sealed class AsyncSseUpdateEnumerator : IAsyncEnumerator public AsyncSseUpdateEnumerator( Func, IEnumerable> deserializerFunc, ClientResult page, - CancellationToken cancellationToken) + CancellationToken cancellationToken, + List additionalDisposalActions) { Argument.AssertNotNull(page, nameof(page)); _deserializerFunc = deserializerFunc; _response = page.GetRawResponse(); _cancellationToken = cancellationToken; + _additionalDisposalActions = additionalDisposalActions; } U IAsyncEnumerator.Current => _current!; @@ -197,6 +204,12 @@ private async ValueTask DisposeAsyncCore() // Dispose the response so we don't leave the network connection open. _response?.Dispose(); } + + foreach (Action additionalDisposalAction in _additionalDisposalActions ?? []) + { + additionalDisposalAction.Invoke(); + } + _additionalDisposalActions?.Clear(); } } } diff --git a/src/Utility/ChatTools.cs b/src/Utility/ChatTools.cs deleted file mode 100644 index 026920705..000000000 --- a/src/Utility/ChatTools.cs +++ /dev/null @@ -1,287 +0,0 @@ -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.Json; -using System.Threading.Tasks; -using OpenAI.Agents; -using OpenAI.Chat; -using OpenAI.Embeddings; - -namespace OpenAI.Chat; - -/// -/// Provides functionality to manage and execute OpenAI function tools for chat completions. -/// -//[Experimental("OPENAIMCP001")] -public class ChatTools -{ - private readonly Dictionary _methods = []; - private readonly Dictionary>> _mcpMethods = []; - private readonly List _tools = []; - private readonly EmbeddingClient _client; - private readonly List _entries = []; - private readonly List _mcpClients = []; - private readonly Dictionary _mcpClientsByEndpoint = []; - - /// - /// Initializes a new instance of the ChatTools class with an optional embedding client. - /// - /// The embedding client used for tool vectorization, or null to disable vectorization. - public ChatTools(EmbeddingClient client = null) - { - _client = client; - } - - /// - /// Initializes a new instance of the ChatTools class with the specified tool types. - /// - /// Additional tool types to add. - public ChatTools(params Type[] tools) : this((EmbeddingClient)null) - { - foreach (var t in tools) - AddFunctionTool(t); - } - - /// - /// Gets the list of defined tools. - /// - public IList Tools => _tools; - - /// - /// Gets whether tools can be filtered using embeddings provided by the provided . - /// - public bool CanFilterTools => _client != null; - - /// - /// Adds local tool implementations from the provided types. - /// - /// Types containing static methods to be used as tools. - public void AddFunctionTools(params Type[] tools) - { - foreach (Type functionHolder in tools) - AddFunctionTool(functionHolder); - } - - /// - /// Adds all public static methods from the specified type as tools. - /// - /// The type containing tool methods. - internal void AddFunctionTool(Type tool) - { -#pragma warning disable IL2070 - foreach (MethodInfo function in tool.GetMethods(BindingFlags.Public | BindingFlags.Static)) - { - AddFunctionTool(function); - } -#pragma warning restore IL2070 - } - - internal void AddFunctionTool(MethodInfo function) - { - string name = function.Name; - var tool = ChatTool.CreateFunctionTool(name, ToolsUtility.GetMethodDescription(function), ToolsUtility.BuildParametersJson(function.GetParameters())); - _tools.Add(tool); - _methods[name] = function; - } - - /// - /// Adds a remote MCP server as a tool provider. - /// - /// The MCP client instance. - /// A task representing the asynchronous operation. - internal async Task AddMcpToolsAsync(McpClient client) - { - if (client == null) throw new ArgumentNullException(nameof(client)); - _mcpClientsByEndpoint[client.Endpoint.AbsoluteUri] = client; - await client.StartAsync().ConfigureAwait(false); - BinaryData tools = await client.ListToolsAsync().ConfigureAwait(false); - await AddMcpToolsAsync(tools, client).ConfigureAwait(false); - _mcpClients.Add(client); - } - - /// - /// Adds a remote MCP server as a tool provider. - /// - /// The URI endpoint of the MCP server. - /// A task representing the asynchronous operation. - public async Task AddMcpToolsAsync(Uri mcpEndpoint) - { - var client = new McpClient(mcpEndpoint); - await AddMcpToolsAsync(client).ConfigureAwait(false); - } - - private async Task AddMcpToolsAsync(BinaryData toolDefinitions, McpClient client) - { - List toolsToVectorize = new(); - var parsedTools = ToolsUtility.ParseMcpToolDefinitions(toolDefinitions, client); - - foreach (var (name, description, inputSchema) in parsedTools) - { - var chatTool = ChatTool.CreateFunctionTool(name, description, BinaryData.FromString(inputSchema)); - _tools.Add(chatTool); - toolsToVectorize.Add(chatTool); - _mcpMethods[name] = client.CallToolAsync; - } - - if (_client != null) - { - var embeddings = await _client.GenerateEmbeddingsAsync(toolsToVectorize.Select(t => t.FunctionDescription).ToList()).ConfigureAwait(false); - foreach (var embedding in embeddings.Value) - { - var vector = embedding.ToFloats(); - var item = toolsToVectorize[embedding.Index]; - var toolDefinition = SerializeTool(item); - _entries.Add(new VectorDatabaseEntry(vector, toolDefinition)); - } - } - } - - private BinaryData SerializeTool(ChatTool tool) - { - return ToolsUtility.SerializeTool(tool.FunctionName, tool.FunctionDescription, tool.FunctionParameters); - } - - private ChatTool ParseToolDefinition(BinaryData data) - { - using var document = JsonDocument.Parse(data); - var root = document.RootElement; - - return ChatTool.CreateFunctionTool( - root.GetProperty("name").GetString()!, - root.GetProperty("description").GetString()!, - BinaryData.FromString(root.GetProperty("inputSchema").GetRawText())); - } - - /// - /// Converts the tools collection to chat completion options. - /// - /// A new ChatCompletionOptions containing all defined tools. - public ChatCompletionOptions ToChatCompletionOptions() - { - var options = new ChatCompletionOptions(); - foreach (var tool in _tools) - options.Tools.Add(tool); - return options; - } - - /// - /// Converts the tools collection to , filtered by relevance to the given prompt. - /// - /// The prompt to find relevant tools for. - /// The maximum number of tools to return. Default is 3. - /// The similarity threshold for including tools. Default is 0.29. - /// A new containing the most relevant tools. - public ChatCompletionOptions CreateCompletionOptions(string prompt, int maxTools = 5, float minVectorDistance = 0.29f) - { - if (!CanFilterTools) - return ToChatCompletionOptions(); - - var completionOptions = new ChatCompletionOptions(); - foreach (var tool in FindRelatedTools(false, prompt, maxTools, minVectorDistance).GetAwaiter().GetResult()) - completionOptions.Tools.Add(tool); - return completionOptions; - } - - /// - /// Converts the tools collection to , filtered by relevance to the given prompt. - /// - /// The prompt to find relevant tools for. - /// The maximum number of tools to return. Default is 3. - /// The similarity threshold for including tools. Default is 0.29. - /// A new containing the most relevant tools. - public async Task ToChatCompletionOptions(string prompt, int maxTools = 5, float minVectorDistance = 0.29f) - { - if (!CanFilterTools) - return ToChatCompletionOptions(); - - var completionOptions = new ChatCompletionOptions(); - foreach (var tool in await FindRelatedTools(true, prompt, maxTools, minVectorDistance).ConfigureAwait(false)) - completionOptions.Tools.Add(tool); - return completionOptions; - } - - private async Task> FindRelatedTools(bool async, string prompt, int maxTools, float minVectorDistance) - { - if (!CanFilterTools) - return _tools; - - return (await FindVectorMatches(async, prompt, maxTools, minVectorDistance).ConfigureAwait(false)) - .Select(e => ParseToolDefinition(e.Data)); - } - - private async Task> FindVectorMatches(bool async, string prompt, int maxTools, float minVectorDistance) - { - var vector = async ? - await ToolsUtility.GetEmbeddingAsync(_client, prompt).ConfigureAwait(false) : - ToolsUtility.GetEmbedding(_client, prompt); - - lock (_entries) - { - return ToolsUtility.GetClosestEntries(_entries, maxTools, minVectorDistance, vector); - } - } - - internal async Task CallFunctionToolAsync(ChatToolCall call) - { - var arguments = new List(); - if (call.FunctionArguments != null) - { - if (!_methods.TryGetValue(call.FunctionName, out MethodInfo method)) - throw new InvalidOperationException($"Tool not found: {call.FunctionName}"); - - ToolsUtility.ParseFunctionCallArgs(method, call.FunctionArguments, out arguments); - } - return await ToolsUtility.CallFunctionToolAsync(_methods, call.FunctionName, [.. arguments]); - } - - internal async Task CallMcpAsync(ChatToolCall call) - { - if (!_mcpMethods.TryGetValue(call.FunctionName, out var method)) - throw new NotImplementedException($"MCP tool {call.FunctionName} not found."); - -#if !NETSTANDARD2_0 - var actualFunctionName = call.FunctionName.Split(ToolsUtility.McpToolSeparator, 2)[1]; -#else - var index = call.FunctionName.IndexOf(ToolsUtility.McpToolSeparator); - var actualFunctionName = call.FunctionName.Substring(index + ToolsUtility.McpToolSeparator.Length); -#endif - var result = await method(actualFunctionName, call.FunctionArguments).ConfigureAwait(false); - if (result == null) - throw new InvalidOperationException($"MCP tool {call.FunctionName} returned null. Function tools should always return a value."); - return result.ToString(); - } - - /// - /// Executes all tool calls and returns their results. - /// - /// The collection of tool calls to execute. - /// A collection of tool chat messages containing the results. - public async Task> CallAsync(IEnumerable toolCalls) - { - var messages = new List(); - foreach (ChatToolCall toolCall in toolCalls) - { - bool isMcpTool = false; - if (!_methods.ContainsKey(toolCall.FunctionName)) - { - if (_mcpMethods.ContainsKey(toolCall.FunctionName)) - { - isMcpTool = true; - } - else - { - throw new InvalidOperationException("Tool not found: " + toolCall.FunctionName); - } - } - - var result = isMcpTool ? await CallMcpAsync(toolCall).ConfigureAwait(false) : await CallFunctionToolAsync(toolCall).ConfigureAwait(false); - messages.Add(new ToolChatMessage(toolCall.Id, result)); - } - - return messages; - } -} - diff --git a/src/Utility/CodeGen/CodeGenVisibilityAttribute.cs b/src/Utility/CodeGen/CodeGenVisibilityAttribute.cs new file mode 100644 index 000000000..7e5e96f77 --- /dev/null +++ b/src/Utility/CodeGen/CodeGenVisibilityAttribute.cs @@ -0,0 +1,25 @@ + +using System; + +namespace OpenAI; + +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true)] +internal partial class CodeGenVisibilityAttribute : Attribute +{ + public string MemberName { get; } + public CodeGenVisibility Visibility { get; } + public Type[] Parameters { get; } + + public CodeGenVisibilityAttribute(string memberName, CodeGenVisibility visibility, params Type[] parameters) + { + MemberName = memberName; + Visibility = visibility; + Parameters = parameters; + } +} + +internal enum CodeGenVisibility +{ + Internal, + Public, +} \ No newline at end of file diff --git a/src/Utility/DataEncodingHelpers.cs b/src/Utility/DataEncodingHelpers.cs new file mode 100644 index 000000000..14df8b9d8 --- /dev/null +++ b/src/Utility/DataEncodingHelpers.cs @@ -0,0 +1,42 @@ +using System; +using System.Text.RegularExpressions; + +#nullable enable + +namespace OpenAI; + +internal static partial class DataEncodingHelpers +{ +#if NET8_0_OR_GREATER + [GeneratedRegex(@"^data:(?.+?);base64,(?.+)$")] + private static partial Regex ParseDataUriRegex(); +#else + private static Regex ParseDataUriRegex() => s_parseDataUriRegex; + private static readonly Regex s_parseDataUriRegex = new(@"^data:(?.+?);base64,(?.+)$", RegexOptions.Compiled); +#endif + + public static bool TryParseDataUri(string dataUri, out BinaryData? bytes, out string? bytesMediaType) + { + Match parsedDataUri = ParseDataUriRegex().Match(dataUri); + + if (!parsedDataUri.Success) + { + bytes = null; + bytesMediaType = null; + return false; + } + + string matchedBase64Data = parsedDataUri.Groups["data"].Value; + byte[] matchedBase64RawBytes = Convert.FromBase64String(matchedBase64Data); + + bytes = BinaryData.FromBytes(matchedBase64RawBytes); + bytesMediaType = parsedDataUri.Groups["type"].Value; + return true; + } + + public static string CreateDataUri(BinaryData bytes, string bytesMediaType) + { + string base64Bytes = Convert.ToBase64String(bytes.ToArray()); + return $"data:{bytesMediaType};base64,{base64Bytes}"; + } +} \ No newline at end of file diff --git a/src/Utility/MCP/McpClient.cs b/src/Utility/MCP/McpClient.cs deleted file mode 100644 index 5517af852..000000000 --- a/src/Utility/MCP/McpClient.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.ClientModel.Primitives; -using System.Threading.Tasks; - -namespace OpenAI.Agents; - -/// -/// Client for interacting with a Model Context Protocol (MCP) server. -/// -//[Experimental("OPENAIMCP001")] -internal class McpClient -{ - private readonly McpSession _session; - private readonly ClientPipeline _pipeline; - - /// - /// Gets the endpoint URI of the MCP server. - /// - public virtual Uri Endpoint { get; } - - /// - /// Initializes a new instance of the class. - /// - /// The URI endpoint of the MCP server. - public McpClient(Uri endpoint) - { - _pipeline = ClientPipeline.Create(); - _session = new McpSession(endpoint, _pipeline); - Endpoint = endpoint; - } - - /// - /// Starts the MCP client session by initializing the connection to the server. - /// - /// A task that represents the asynchronous operation. - public virtual async Task StartAsync() - { - await _session.EnsureInitializedAsync().ConfigureAwait(false); - } - - /// - /// Lists all available tools from the MCP server. - /// - /// A task that represents the asynchronous operation. The task result contains the binary data representing the tools list. - /// Thrown when the session is not initialized. - public virtual async Task ListToolsAsync() - { - if (_session == null) - throw new InvalidOperationException("Session is not initialized. Call StartAsync() first."); - - return await _session.SendMethod("tools/list").ConfigureAwait(false); - } - - /// - /// Calls a specific tool on the MCP server. - /// - /// The name of the tool to call. - /// The parameters to pass to the tool as binary data. - /// A task that represents the asynchronous operation. The task result contains the binary data representing the tool's response. - /// Thrown when the session is not initialized. - public virtual async Task CallToolAsync(string toolName, BinaryData parameters) - { - if (_session == null) - throw new InvalidOperationException("Session is not initialized. Call StartAsync() first."); - - return await _session.CallTool(toolName, parameters).ConfigureAwait(false); - } -} diff --git a/src/Utility/MCP/McpSession.cs b/src/Utility/MCP/McpSession.cs deleted file mode 100644 index 036673540..000000000 --- a/src/Utility/MCP/McpSession.cs +++ /dev/null @@ -1,517 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Concurrent; -using System.IO; -using System.Text; -using System.Text.Json; -using System.Threading; -using System.Threading.Tasks; - -namespace OpenAI; - -internal class McpSession : IDisposable -{ - private readonly Uri _serverEndpoint; - private readonly ClientPipeline _pipeline; - private readonly MessageRouter _messageRouter = new MessageRouter(); - private CancellationTokenSource _cancellationSource; - private PipelineMessage _activeHandshake; - private string _messageEndpoint = string.Empty; - private bool _isInitialized; - private int _nextId = 0; - private readonly SemaphoreSlim _initializationLock = new(1, 1); - private TaskCompletionSource _endpointTcs; - - public McpSession(Uri serverEndpoint, ClientPipeline pipeline) - { - _serverEndpoint = serverEndpoint; - _pipeline = pipeline; - _cancellationSource = new CancellationTokenSource(); - } - - public async Task EnsureInitializedAsync() - { - DebugPrint("Ensuring session is initialized..."); - if (_isInitialized && _activeHandshake != null) - { - DebugPrint("Session is already initialized."); - return; - } - - await _initializationLock.WaitAsync().ConfigureAwait(false); - try - { - if (_isInitialized && _activeHandshake != null) - { - DebugPrint("Session is already initialized."); - return; - } - - await InitializeSessionAsync().ConfigureAwait(false); - } - finally - { - _initializationLock.Release(); - } - } - - public void Stop() - { - _cancellationSource.Cancel(); - DebugPrint("Stopping session..."); - CleanupCurrentSession(); - _isInitialized = false; - _cancellationSource = new CancellationTokenSource(); - DebugPrint("Session stopped."); - } - - private async Task InitializeSessionAsync() - { - DebugPrint("Initializing session..."); - CleanupCurrentSession(); - - _activeHandshake = CreateHandshakeMessage(); - try - { - _pipeline.Send(_activeHandshake); - var response = _activeHandshake.Response; - - if (response?.IsError == true) - { - throw new InvalidOperationException($"Failed to initialize SSE connection: {response.Status}"); - } - - StartSseProcessing(response!.ContentStream!); - - // Get the message endpoint from the server - _messageEndpoint = await GetMessageEndpointAsync().ConfigureAwait(false); - DebugPrint($"Message endpoint: {_messageEndpoint}"); - await SendInitializeAsync().ConfigureAwait(false); - _isInitialized = true; - } - catch - { - CleanupCurrentSession(); - throw; - } - } - - private void StartSseProcessing(Stream responseStream) - { - var streamReader = new StreamReader(responseStream); - _ = Task.Run(async () => - { - try - { - await ProcessSseStreamAsync(streamReader).ConfigureAwait(false); - } - catch (Exception ex) - { - DebugPrint($"SSE processing failed: {ex.Message}"); - _isInitialized = false; - } - }, _cancellationSource.Token); - } - - private async Task ProcessSseStreamAsync(StreamReader streamReader) - { - string eventName = string.Empty; - var dataBuilder = new StringBuilder(); - - try - { - while (!_cancellationSource.Token.IsCancellationRequested) - { - DebugPrint("Reading line from SSE stream..."); - string line = await streamReader.ReadLineAsync().ConfigureAwait(false); - if (line == null) - { - throw new IOException("SSE stream closed unexpectedly"); - } - - DebugPrint($"Received line: '{line}'"); - - if (line.StartsWith("event:", StringComparison.OrdinalIgnoreCase)) - { - eventName = line.AsSpan(6).Trim().ToString(); - } - else if (line.StartsWith("data:")) - { -#if !NETSTANDARD2_0 - dataBuilder.Append(line.AsSpan(5)); -#else - dataBuilder.Append(line.AsSpan(5).ToString()); -#endif - } - else if (string.IsNullOrEmpty(line) && dataBuilder.Length > 0) - { - var sseEvent = new SseEvent(eventName, dataBuilder.ToString().TrimEnd()); - await ProcessEventAsync(sseEvent).ConfigureAwait(false); - eventName = string.Empty; - dataBuilder.Clear(); - } - } - DebugPrint("SSE stream processing stopped."); - } - catch (Exception ex) - { - DebugPrint($"Error processing SSE stream: {ex.Message}"); - } - finally - { - CleanupCurrentSession(); - } - } - - private async Task ProcessEventAsync(SseEvent sseEvent) - { - switch (sseEvent.Event) - { - case "endpoint": - if (_endpointTcs != null) - { - var serverUri = _serverEndpoint; - var endpoint = serverUri.GetLeftPart(UriPartial.Authority); - var path = sseEvent.Data.Trim(); - string trailingSlash = endpoint.EndsWith("/") || path.StartsWith("/") ? "" : "/"; - var messageEndpoint = $"{endpoint}{trailingSlash}{path}"; - _endpointTcs.TrySetResult(messageEndpoint); - } - break; - - case "message": - case "": // Handle empty event name as a message - DebugPrint($"Received message: {sseEvent.Data}"); - await _messageRouter.RouteMessageAsync(sseEvent).ConfigureAwait(false); - break; - - default: - DebugPrint($"Unknown event: {sseEvent.Event}"); - break; - } - } - - private async Task GetMessageEndpointAsync() - { - if (!string.IsNullOrEmpty(_messageEndpoint)) - { - return _messageEndpoint; - } - - _endpointTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30)); - using var registration = cts.Token.Register(() => - _endpointTcs.TrySetException(new TimeoutException("Timeout waiting for endpoint event"))); - - try - { - return await _endpointTcs.Task.ConfigureAwait(false); - } - finally - { - _endpointTcs = null; - } - } - - private async Task SendInitializeAsync() - { - var id = GetNextId(); - var initializeTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - - string json = $$""" - { - "jsonrpc": "2.0", - "id": {{id}}, - "method": "initialize", - "params": { - "protocolVersion": "2024-11-05", - "capabilities": { - "roots": { - "listChanged": true - }, - "sampling": {} - }, - "clientInfo": { - "name": "ExampleClient", - "version": "1.0.0" - } - } - } - """; - - // Register handler for initialize response - _messageRouter.RegisterHandler(id, async (sseEvent) => - { - try - { - // Send initialized notification after receiving initialize response - string initialized = $$""" - { - "jsonrpc": "2.0", - "method": "notifications/initialized" - } - """; - - await SendAsync(initialized).ConfigureAwait(false); - initializeTcs.SetResult(Task.CompletedTask); - } - catch (Exception ex) - { - initializeTcs.SetException(ex); - } - }); - - await SendAsync(json).ConfigureAwait(false); - - using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30)); - using var registration = cts.Token.Register(() => initializeTcs.TrySetCanceled()); - - await initializeTcs.Task.ConfigureAwait(false); - } - - private PipelineMessage CreateHandshakeMessage() - { - var message = _pipeline.CreateMessage(); - var request = message.Request; - request.Uri = _serverEndpoint; - request.Method = "GET"; - request.Headers.Add("Accept", "text/event-stream"); - message.BufferResponse = false; - return message; - } - - private int GetNextId() - { - return Interlocked.Increment(ref _nextId); - } - - public async Task SendMethod(string methodName) - { - await EnsureInitializedAsync().ConfigureAwait(false); - var id = GetNextId(); - var completionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - string json = $$""" - { - "jsonrpc" : "2.0", - "id" : {{id}}, - "method" : "{{methodName}}" - } - """; - - _messageRouter.RegisterHandler(id, (sseEvent) => - { - try - { - using JsonDocument doc = JsonDocument.Parse(sseEvent.Data); - var messageResult = doc.RootElement - .GetProperty("result"); - - var resultJson = messageResult.GetRawText(); - completionSource.SetResult(BinaryData.FromString(resultJson)); - } - catch (Exception ex) - { - completionSource.SetException(ex); - } - return Task.CompletedTask; - }); - - await SendAsync(json).ConfigureAwait(false); - return await completionSource.Task.ConfigureAwait(false); - } - - public async Task CallTool(string toolName, BinaryData arguments) - { - await EnsureInitializedAsync().ConfigureAwait(false); - var id = GetNextId(); - var completionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - - string json = $$""" - { - "jsonrpc": "2.0", - "id": {{id}}, - "method": "tools/call", - "params": { - "name": "{{toolName}}", - "arguments": {{arguments}} - } - } - """; - - _messageRouter.RegisterHandler(id, (sseEvent) => - { - try - { - using JsonDocument doc = JsonDocument.Parse(sseEvent.Data); - var messageResult = doc.RootElement - .GetProperty("result"); - - var resultJson = messageResult.GetRawText(); - completionSource.SetResult(BinaryData.FromString(resultJson)); - } - catch (Exception ex) - { - completionSource.SetException(ex); - } - return Task.CompletedTask; - }); - - await SendAsync(json).ConfigureAwait(false); - return await completionSource.Task.ConfigureAwait(false); - } - - public async Task SendAsync(string json) - { - DebugPrint($"sending:\n {json}\n"); - using PipelineMessage message = _pipeline.CreateMessage(); - using PipelineRequest request = message.Request; - request.Uri = new Uri(_messageEndpoint); - request.Method = "POST"; - request.Headers.Add("Content-Type", "application/json"); - request.Headers.Add("Accept", "text/event-stream"); - message.BufferResponse = false; - - var jsonBytes = BinaryData.FromString(json); - request.Content = BinaryContent.Create(jsonBytes); - await _pipeline.SendAsync(message).ConfigureAwait(false); - var response = message.Response; - } - - private void CleanupCurrentSession() - { - if (_activeHandshake != null) - { - _activeHandshake.Dispose(); - _activeHandshake = null; - } - _isInitialized = false; - } - - public void Dispose() - { - _cancellationSource.Cancel(); - CleanupCurrentSession(); - _initializationLock.Dispose(); - _cancellationSource.Dispose(); - } - - internal struct SseEvent - { - public string Event { get; set; } - public string Data { get; set; } - - public SseEvent(string eventName, string data) - { - Event = eventName; - Data = data; - } - - public override string ToString() - { - return $"====== SSE Event =====\nEvent: {Event}, Data: {Data}\n======================\n"; - } - } - - private class MessageRouter - { - // Dictionary to store message handlers and completion actions by ID - private readonly ConcurrentDictionary> _handlers = new(); - - // Register a handler with optional completion action - public void RegisterHandler(int id, Func handler) - { - if (!_handlers.TryAdd(id, handler)) - { - throw new InvalidOperationException($"Handler for message ID {id} already registered"); - } - } - - // Route a message to its registered handler - public async Task RouteMessageAsync(SseEvent sseEvent) - { - if (string.IsNullOrEmpty(sseEvent.Data)) - { - return; - } - - // Extract ID from the message payload - int id = ExtractId(sseEvent.Data); - if (id == -1) - { - return; - } - - // Try to get and remove the handler - if (_handlers.TryRemove(id, out var handler)) - { - try - { - // Execute handler - await handler(sseEvent).ConfigureAwait(false); - } - catch (Exception ex) - { - DebugPrint($"Error in message handler for ID {id}: {ex.Message}"); - } - } - } - - private static int ExtractId(string jsonPayload) - { - if (string.IsNullOrEmpty(jsonPayload)) - { - throw new ArgumentException("JSON payload cannot be null or empty", nameof(jsonPayload)); - } - - byte[] bytes = Encoding.UTF8.GetBytes(jsonPayload); - var reader = new Utf8JsonReader(bytes); - - try - { - // Look for the top-level "id" property - while (reader.Read()) - { - // We only care about property names at the top level - if (reader.TokenType == JsonTokenType.PropertyName && - reader.GetString() == "id" && - reader.CurrentDepth == 1) - { - // Move to the value - reader.Read(); - - // Handle number or string format - if (reader.TokenType == JsonTokenType.Number) - { - if (reader.TryGetInt32(out int id)) - { - return id; - } - } - - // Found "id" but it's not a valid integer - return -1; - } - } - - // No "id" property found - return -1; - } - catch (JsonException ex) - { - DebugPrint($"Error parsing JSON: {ex.Message}"); - return -1; - } - } - } - - private static void DebugPrint(string message) - { -#if DEBUGPRINT - var color = Console.ForegroundColor; - Console.ForegroundColor = ConsoleColor.DarkGray; - Console.WriteLine(message); - Console.ForegroundColor = color; -#endif - } -} diff --git a/src/Utility/ResponseTools.cs b/src/Utility/ResponseTools.cs deleted file mode 100644 index 281dc8011..000000000 --- a/src/Utility/ResponseTools.cs +++ /dev/null @@ -1,282 +0,0 @@ -using System; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.Json; -using System.Threading.Tasks; -using OpenAI.Agents; -using OpenAI.Embeddings; -using OpenAI.Responses; - -namespace OpenAI.Responses; - -/// -/// Provides functionality to manage and execute OpenAI function tools for responses. -/// -//[Experimental("OPENAIMCP001") -public class ResponseTools -{ - private readonly Dictionary _methods = []; - private readonly Dictionary>> _mcpMethods = []; - private readonly List _tools = []; - private readonly EmbeddingClient _client; - private readonly List _entries = []; - private readonly List _mcpClients = []; - private readonly Dictionary _mcpClientsByEndpoint = []; - - /// - /// Initializes a new instance of the ResponseTools class with an optional embedding client. - /// - /// The embedding client used for tool vectorization, or null to disable vectorization. - public ResponseTools(EmbeddingClient client = null) - { - _client = client; - } - - /// - /// Initializes a new instance of the ResponseTools class with the specified tool types. - /// - /// Additional tool types to add. - public ResponseTools(params Type[] tools) : this((EmbeddingClient)null) - { - foreach (var t in tools) - AddFunctionTool(t); - } - - /// - /// Gets the list of defined tools. - /// - public IList Tools => _tools; - - /// - /// Gets whether tools can be filtered using embeddings provided by the provided . - /// - public bool CanFilterTools => _client != null; - - /// - /// Adds local tool implementations from the provided types. - /// - /// Types containing static methods to be used as tools. - public void AddFunctionTools(params Type[] tools) - { - foreach (Type functionHolder in tools) - AddFunctionTool(functionHolder); - } - - /// - /// Adds all public static methods from the specified type as tools. - /// - /// The type containing tool methods. - internal void AddFunctionTool(Type tool) - { -#pragma warning disable IL2070 - foreach (MethodInfo function in tool.GetMethods(BindingFlags.Public | BindingFlags.Static)) - { - AddFunctionTool(function); - } -#pragma warning restore IL2070 - } - - internal void AddFunctionTool(MethodInfo function) - { - string name = function.Name; - var tool = ResponseTool.CreateFunctionTool(name, ToolsUtility.GetMethodDescription(function), ToolsUtility.BuildParametersJson(function.GetParameters())); - _tools.Add(tool); - _methods[name] = function; - } - - /// - /// Adds a remote MCP server as a tool provider. - /// - /// The MCP client instance. - /// A task representing the asynchronous operation. - internal async Task AddMcpToolsAsync(McpClient client) - { - if (client == null) throw new ArgumentNullException(nameof(client)); - _mcpClientsByEndpoint[client.Endpoint.AbsoluteUri] = client; - await client.StartAsync().ConfigureAwait(false); - BinaryData tools = await client.ListToolsAsync().ConfigureAwait(false); - await AddMcpToolsAsync(tools, client).ConfigureAwait(false); - _mcpClients.Add(client); - } - - /// - /// Adds a remote MCP server as a tool provider. - /// - /// The URI endpoint of the MCP server. - /// A task representing the asynchronous operation. - public async Task AddMcpToolsAsync(Uri mcpEndpoint) - { - var client = new McpClient(mcpEndpoint); - await AddMcpToolsAsync(client).ConfigureAwait(false); - } - - private async Task AddMcpToolsAsync(BinaryData toolDefinitions, McpClient client) - { - List toolsToVectorize = new(); - var parsedTools = ToolsUtility.ParseMcpToolDefinitions(toolDefinitions, client); - - foreach (var (name, description, inputSchema) in parsedTools) - { - var responseTool = ResponseTool.CreateFunctionTool(name, description, BinaryData.FromString(inputSchema)); - _tools.Add(responseTool); - toolsToVectorize.Add(responseTool); - _mcpMethods[name] = client.CallToolAsync; - } - - if (_client != null) - { - var embeddings = await _client.GenerateEmbeddingsAsync(toolsToVectorize.ConvertAll(GetDescription)).ConfigureAwait(false); - foreach (var embedding in embeddings.Value) - { - var vector = embedding.ToFloats(); - var item = toolsToVectorize[embedding.Index]; - var toolDefinition = SerializeTool(item); - _entries.Add(new VectorDatabaseEntry(vector, toolDefinition)); - } - } - } - - private string GetDescription(ResponseTool tool) => (tool as InternalResponsesFunctionTool)?.Description ?? ""; - - private BinaryData SerializeTool(ResponseTool tool) - { - var functionTool = tool as InternalResponsesFunctionTool; - return ToolsUtility.SerializeTool(functionTool?.Name, functionTool?.Description, functionTool?.Parameters ?? BinaryData.FromString("{}")); - } - - private ResponseTool ParseToolDefinition(BinaryData data) - { - using var document = JsonDocument.Parse(data); - var root = document.RootElement; - - return ResponseTool.CreateFunctionTool( - root.GetProperty("name").GetString()!, - root.GetProperty("description").GetString()!, - BinaryData.FromString(root.GetProperty("inputSchema").GetRawText())); - } - - /// - /// Converts the tools collection to configured with the tools contained in this instance.. - /// - /// A new ResponseCreationOptions containing all defined tools. - public ResponseCreationOptions ToResponseCreationOptions() - { - var options = new ResponseCreationOptions(); - foreach (var tool in _tools) - options.Tools.Add(tool); - return options; - } - - /// - /// Converts the tools collection to , filtered by relevance to the given prompt. - /// - /// The prompt to find relevant tools for. - /// The maximum number of tools to return. Default is 5. - /// The similarity threshold for including tools. Default is 0.29. - /// A new ResponseCreationOptions containing the most relevant tools. - public ResponseCreationOptions ToResponseCreationOptions(string prompt, int maxTools = 5, float minVectorDistance = 0.29f) - { - if (!CanFilterTools) - return ToResponseCreationOptions(); - - var completionOptions = new ResponseCreationOptions(); - foreach (var tool in FindRelatedTools(false, prompt, maxTools, minVectorDistance).GetAwaiter().GetResult()) - completionOptions.Tools.Add(tool); - return completionOptions; - } - - /// - /// Converts the tools collection to , filtered by relevance to the given prompt. - /// - /// The prompt to find relevant tools for. - /// The maximum number of tools to return. Default is 5. - /// The similarity threshold for including tools. Default is 0.29. - /// A new ResponseCreationOptions containing the most relevant tools. - public async Task ToResponseCreationOptionsAsync(string prompt, int maxTools = 5, float minVectorDistance = 0.29f) - { - if (!CanFilterTools) - return ToResponseCreationOptions(); - - var completionOptions = new ResponseCreationOptions(); - foreach (var tool in await FindRelatedTools(true, prompt, maxTools, minVectorDistance).ConfigureAwait(false)) - completionOptions.Tools.Add(tool); - return completionOptions; - } - - private async Task> FindRelatedTools(bool async, string prompt, int maxTools, float minVectorDistance) - { - if (!CanFilterTools) - return _tools; - - return (await FindVectorMatches(async, prompt, maxTools, minVectorDistance).ConfigureAwait(false)) - .Select(e => ParseToolDefinition(e.Data)); - } - - private async Task> FindVectorMatches(bool async, string prompt, int maxTools, float minVectorDistance) - { - var vector = async ? - await ToolsUtility.GetEmbeddingAsync(_client, prompt).ConfigureAwait(false) : - ToolsUtility.GetEmbedding(_client, prompt); - lock (_entries) - { - return ToolsUtility.GetClosestEntries(_entries, maxTools, minVectorDistance, vector); - } - } - - internal async Task CallFunctionToolAsync(FunctionCallResponseItem call) - { - List arguments = new(); - if (call.FunctionArguments != null) - { - if (!_methods.TryGetValue(call.FunctionName, out MethodInfo method)) - return $"I don't have a tool called {call.FunctionName}"; - - ToolsUtility.ParseFunctionCallArgs(method, call.FunctionArguments, out arguments); - } - - return await ToolsUtility.CallFunctionToolAsync(_methods, call.FunctionName, [.. arguments]); - } - - internal async Task CallMcpAsync(FunctionCallResponseItem call) - { - if (!_mcpMethods.TryGetValue(call.FunctionName, out var method)) - throw new NotImplementedException($"MCP tool {call.FunctionName} not found."); - -#if !NETSTANDARD2_0 - var actualFunctionName = call.FunctionName.Split(ToolsUtility.McpToolSeparator, 2)[1]; -#else - var index = call.FunctionName.IndexOf(ToolsUtility.McpToolSeparator); - var actualFunctionName = call.FunctionName.Substring(index + ToolsUtility.McpToolSeparator.Length); -#endif - var result = await method(actualFunctionName, call.FunctionArguments).ConfigureAwait(false); - return result.ToString(); - } - - /// - /// Executes a function call and returns its result as a FunctionCallOutputResponseItem. - /// - /// The function call to execute. - /// A task that represents the asynchronous operation and contains the function call result. - public async Task CallAsync(FunctionCallResponseItem toolCall) - { - bool isMcpTool = false; - if (!_methods.ContainsKey(toolCall.FunctionName)) - { - if (_mcpMethods.ContainsKey(toolCall.FunctionName)) - { - isMcpTool = true; - } - else - { - return new FunctionCallOutputResponseItem(toolCall.CallId, $"I don't have a tool called {toolCall.FunctionName}"); - } - } - - var result = isMcpTool ? await CallMcpAsync(toolCall).ConfigureAwait(false) : await CallFunctionToolAsync(toolCall); - return new FunctionCallOutputResponseItem(toolCall.CallId, result); - } -} - diff --git a/src/Utility/SseUpdateCollection.cs b/src/Utility/SseUpdateCollection.cs index ccc140aa7..c0833db65 100644 --- a/src/Utility/SseUpdateCollection.cs +++ b/src/Utility/SseUpdateCollection.cs @@ -20,6 +20,8 @@ internal class SseUpdateCollection : CollectionResult private readonly Func, IEnumerable> _eventDeserializerFunc; private readonly CancellationToken _cancellationToken; + public List AdditionalDisposalActions { get; } = []; + public SseUpdateCollection( Func sendRequestFunc, Func> jsonMultiDeserializerFunc, @@ -71,7 +73,7 @@ public override IEnumerable GetRawPages() protected override IEnumerable GetValuesFromPage(ClientResult page) { - using IEnumerator enumerator = new SseUpdateEnumerator(_eventDeserializerFunc, page, _cancellationToken); + using IEnumerator enumerator = new SseUpdateEnumerator(_eventDeserializerFunc, page, _cancellationToken, AdditionalDisposalActions); while (enumerator.MoveNext()) { yield return enumerator.Current; @@ -82,6 +84,8 @@ private sealed class SseUpdateEnumerator : IEnumerator { private static ReadOnlySpan TerminalData => "[DONE]"u8; + private List _additionalDisposalActions; + private readonly CancellationToken _cancellationToken; private readonly PipelineResponse _response; @@ -102,7 +106,8 @@ private sealed class SseUpdateEnumerator : IEnumerator public SseUpdateEnumerator( Func, IEnumerable> eventDeserializerFunc, ClientResult page, - CancellationToken cancellationToken) + CancellationToken cancellationToken, + List additionalDisposalActions) { Argument.AssertNotNull(eventDeserializerFunc, nameof(eventDeserializerFunc)); Argument.AssertNotNull(page, nameof(page)); @@ -110,6 +115,7 @@ public SseUpdateEnumerator( _eventDeserializerFunc = eventDeserializerFunc; _response = page.GetRawResponse(); _cancellationToken = cancellationToken; + _additionalDisposalActions = additionalDisposalActions; } U IEnumerator.Current => _current!; @@ -186,6 +192,12 @@ private void Dispose(bool disposing) // Dispose the response so we don't leave the network connection open. _response?.Dispose(); } + + foreach (Action additionalDisposalAction in _additionalDisposalActions ?? []) + { + additionalDisposalAction?.Invoke(); + } + _additionalDisposalActions?.Clear(); } } } diff --git a/src/Utility/ToolsUtility.cs b/src/Utility/ToolsUtility.cs deleted file mode 100644 index 84bc97434..000000000 --- a/src/Utility/ToolsUtility.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.Json; -using System.Threading.Tasks; -using OpenAI.Agents; -using OpenAI.Embeddings; - -namespace OpenAI; - -internal static class ToolsUtility -{ - internal static readonly BinaryData EmptyParameters = BinaryData.FromString("""{ "type" : "object", "properties" : {} }"""); - internal const string McpToolSeparator = "_-_"; - - internal static string GetMethodDescription(MethodInfo method) - { - var description = method.Name; - var attr = method.GetCustomAttribute(); - if (attr != null) - description = attr.Description; - return description; - } - - internal static string GetParameterDescription(ParameterInfo param) - { - string description = param.Name!; - var attr = param.GetCustomAttribute(); - if (attr != null) - description = attr.Description; - return description; - } - - internal static ReadOnlySpan ClrToJsonTypeUtf8(Type clrType) => - clrType switch - { - Type t when t == typeof(double) => "number"u8, - Type t when t == typeof(int) => "number"u8, - Type t when t == typeof(long) => "number"u8, - Type t when t == typeof(float) => "number"u8, - Type t when t == typeof(string) => "string"u8, - Type t when t == typeof(bool) => "boolean"u8, - _ => throw new NotImplementedException() - }; - - internal static BinaryData BuildParametersJson(ParameterInfo[] parameters) - { - if (parameters.Length == 0) - return EmptyParameters; - - var required = new List(); - using var stream = new MemoryStream(); - using var writer = new Utf8JsonWriter(stream); - writer.WriteStartObject(); - writer.WriteString("type"u8, "object"u8); - writer.WriteStartObject("properties"u8); - - foreach (ParameterInfo parameter in parameters) - { - writer.WriteStartObject(parameter.Name!); - writer.WriteString("type"u8, ClrToJsonTypeUtf8(parameter.ParameterType)); - writer.WriteString("description"u8, GetParameterDescription(parameter)); - writer.WriteEndObject(); - - if (!parameter.IsOptional || (parameter.HasDefaultValue && parameter.DefaultValue is not null)) - required.Add(parameter.Name!); - } - - writer.WriteEndObject(); // properties - writer.WriteStartArray("required"); - foreach (string param in required) - writer.WriteStringValue(param); - writer.WriteEndArray(); - writer.WriteEndObject(); - writer.Flush(); - stream.Position = 0; - return BinaryData.FromStream(stream); - } - - internal static async Task> GetEmbeddingAsync(EmbeddingClient client, string text) - { - var result = await client.GenerateEmbeddingAsync(text).ConfigureAwait(false); - return result.Value.ToFloats(); - } - - internal static ReadOnlyMemory GetEmbedding(EmbeddingClient client, string text) - { - var result = client.GenerateEmbedding(text); - return result.Value.ToFloats(); - } - - internal static float CosineSimilarity(ReadOnlySpan x, ReadOnlySpan y) - { - float dot = 0, xSumSquared = 0, ySumSquared = 0; - for (int i = 0; i < x.Length; i++) - { - dot += x[i] * y[i]; - xSumSquared += x[i] * x[i]; - ySumSquared += y[i] * y[i]; - } -#if NETSTANDARD2_0 - return dot / (float)(Math.Sqrt(xSumSquared) * (float)Math.Sqrt(ySumSquared)); -#else - return dot / (MathF.Sqrt(xSumSquared) * MathF.Sqrt(ySumSquared)); -#endif - } - - internal static IEnumerable<(string name, string description, string inputSchema)> ParseMcpToolDefinitions(BinaryData toolDefinitions, McpClient client) - { - using var document = JsonDocument.Parse(toolDefinitions); - if (!document.RootElement.TryGetProperty("tools", out JsonElement toolsElement)) - throw new JsonException("The JSON document must contain a 'tools' array."); - - var serverKey = client.Endpoint.Host + client.Endpoint.Port.ToString(); - var result = new List<(string name, string description, string inputSchema)>(); - - foreach (var tool in toolsElement.EnumerateArray()) - { - var name = $"{serverKey}{McpToolSeparator}{tool.GetProperty("name").GetString()!}"; - var description = tool.GetProperty("description").GetString()!; - var inputSchemaElement = tool.GetProperty("inputSchema"); - string inputSchema; - using (var stream = new MemoryStream()) - { - using (var writer = new Utf8JsonWriter(stream)) - { - inputSchemaElement.WriteTo(writer); - } - inputSchema = System.Text.Encoding.UTF8.GetString(stream.ToArray()); - } - - result.Add((name, description, inputSchema)); - } - - return result; - } - - internal static void ParseFunctionCallArgs(MethodInfo method, BinaryData functionCallArguments, out List arguments) - { - arguments = new List(); - using var document = JsonDocument.Parse(functionCallArguments); - var parameters = method.GetParameters(); - var argumentsByName = document.RootElement.EnumerateObject().ToDictionary(p => p.Name, p => p.Value); - - foreach (var param in parameters) - { - if (!argumentsByName.TryGetValue(param.Name!, out var value)) - { - if (param.HasDefaultValue) - { - arguments.Add(param.DefaultValue!); - continue; - } - throw new JsonException($"Required parameter '{param.Name}' not found in function call arguments."); - } - - arguments.Add(value.ValueKind switch - { - JsonValueKind.String => value.GetString()!, - JsonValueKind.Number when param.ParameterType == typeof(int) => value.GetInt32(), - JsonValueKind.Number when param.ParameterType == typeof(long) => value.GetInt64(), - JsonValueKind.Number when param.ParameterType == typeof(double) => value.GetDouble(), - JsonValueKind.Number when param.ParameterType == typeof(float) => value.GetSingle(), - JsonValueKind.True => true, - JsonValueKind.False => false, - JsonValueKind.Null when param.HasDefaultValue => param.DefaultValue!, - _ => throw new NotImplementedException($"Conversion from {value.ValueKind} to {param.ParameterType.Name} is not implemented.") - }); - } - } - - internal static IEnumerable GetClosestEntries(List entries, int maxTools, float minVectorDistance, ReadOnlyMemory vector) - { - var distances = entries - .Select((e, i) => (Distance: 1f - ToolsUtility.CosineSimilarity(e.Vector.Span, vector.Span), Index: i)) - .OrderBy(t => t.Distance) - .Take(maxTools) - .Where(t => t.Distance <= minVectorDistance); - - return distances.Select(d => entries[d.Index]); - } - - internal static BinaryData SerializeTool(string name, string description, BinaryData parameters) - { - using var stream = new MemoryStream(); - using var writer = new Utf8JsonWriter(stream, new JsonWriterOptions { Indented = true }); - - writer.WriteStartObject(); - writer.WriteString("name", name); - writer.WriteString("description", description); - writer.WritePropertyName("inputSchema"); - using (var doc = JsonDocument.Parse(parameters)) - doc.RootElement.WriteTo(writer); - writer.WriteEndObject(); - writer.Flush(); - - stream.Position = 0; - return BinaryData.FromStream(stream); - } - - internal static async Task CallFunctionToolAsync(Dictionary methods, string name, object[] arguments) - { - if (!methods.TryGetValue(name, out MethodInfo method)) - throw new InvalidOperationException($"Tool not found: {name}"); - - object result; - if (IsGenericTask(method.ReturnType, out Type taskResultType)) - { - // Method is async, invoke and await - var task = (Task)method.Invoke(null, arguments); - await task.ConfigureAwait(false); - // Get the Result property from the Task - result = taskResultType.GetProperty("Result").GetValue(task); - } - else - { - // Method is synchronous - result = method.Invoke(null, arguments); - } - - return result?.ToString() ?? string.Empty; - } - - private static bool IsGenericTask(Type type, out Type taskResultType) - { - while (type != null && type != typeof(object)) - { - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Task<>)) - { - taskResultType = type;//type.GetGenericArguments()[0]; - return true; - } - - type = type.BaseType!; - } - - taskResultType = null; - return false; - } -} diff --git a/src/Utility/VectorDatabaseEntry.cs b/src/Utility/VectorDatabaseEntry.cs deleted file mode 100644 index fca987972..000000000 --- a/src/Utility/VectorDatabaseEntry.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; - -namespace OpenAI; - -/// -/// A vector database entry. -/// -internal readonly struct VectorDatabaseEntry -{ - /// - /// Initializes a new instance of the class. - /// - /// - /// - /// - public VectorDatabaseEntry(ReadOnlyMemory vector, BinaryData data, int? id = default) - { - Vector = vector; - Data = data; - Id = id; - } - - /// - /// Gets the data associated with the entry. - /// - public BinaryData Data { get; } - - /// - /// Gets the vector associated with the entry. - /// - public ReadOnlyMemory Vector { get; } - - /// - /// Gets the id associated with the entry. - /// - public int? Id { get; } -} diff --git a/tests/Assets/fine_tuning_sample.jsonl b/tests/Assets/fine_tuning_sample.jsonl new file mode 100644 index 000000000..6a292355f --- /dev/null +++ b/tests/Assets/fine_tuning_sample.jsonl @@ -0,0 +1,10 @@ +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "How do I reset my password?"}, {"role": "assistant", "content": "To reset your password, go to the login page and click on 'Forgot Password'. Follow the instructions sent to your email."}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "I'm having trouble installing the software. Can you help?"}, {"role": "assistant", "content": "Sure! Could you please let me know what error message you're seeing or describe the issue in more detail?"}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "Where can I find the user manual?"}, {"role": "assistant", "content": "You can find the user manual on our website under the 'Support' section. Here is the direct link: [insert link]."}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "Do you offer refunds?"}, {"role": "assistant", "content": "Yes, we offer refunds within 30 days of purchase. Please contact our support team with your order number, and we'll process it for you."}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "What are the system requirements for the software?"}, {"role": "assistant", "content": "The system requirements for our software are: Windows 10 or later, 4GB RAM, 500MB of free disk space, and an internet connection for updates."}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "How can I contact customer support?"}, {"role": "assistant", "content": "You can contact our customer support team via email at support@company.com or call us at 1-800-123-4567."}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "Can I upgrade my software to the latest version?"}, {"role": "assistant", "content": "Yes, you can upgrade to the latest version by going to the 'Updates' section in the software and clicking on 'Check for updates'."}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "Is there a free trial available?"}, {"role": "assistant", "content": "Yes, we offer a 14-day free trial. You can sign up on our website by clicking on the 'Free Trial' button."}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "How do I cancel my subscription?"}, {"role": "assistant", "content": "To cancel your subscription, go to your account settings, click on 'Subscription', and then click on 'Cancel Subscription'."}]} +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "Can I change my payment method?"}, {"role": "assistant", "content": "Yes, you can change your payment method in your account settings under the 'Billing' section."}]} \ No newline at end of file diff --git a/tests/Assets/fine_tuning_sample_validation.jsonl b/tests/Assets/fine_tuning_sample_validation.jsonl new file mode 100644 index 000000000..ba8ac3749 --- /dev/null +++ b/tests/Assets/fine_tuning_sample_validation.jsonl @@ -0,0 +1,4 @@ +{"messages": [{"role": "system", "content": "You are a customer support assistant for a software company."}, {"role": "user", "content": "What is your return policy?"}, {"role": "assistant", "content": "You can view our return policy on our website by clicking on the 'return policy' link."}]} +{"messages": [ {"role": "system","content": "You are a customer support assistant for a software company."},{"role": "user","content": "How can I reset my password?"},{"role": "assistant","content": "You can reset your password by clicking on the 'Forgot Password' link on the login page."}]} +{"messages": [ {"role": "system","content": "You are a customer support assistant for a software company."},{"role": "user","content": "What are your customer support hours?"},{"role": "assistant","content": "Our customer support team is available 24/7. You can reach us anytime through our support page."}]} +{"messages": [ {"role": "system","content": "You are a customer support assistant for a software company."},{"role": "user","content": "How do I update my billing information?"},{"role": "assistant","content": "You can update your billing information by going to the 'Account Settings' section and selecting 'Billing Information.'"}]} \ No newline at end of file diff --git a/tests/Assets/realtime_api_description_pcm16_24khz_mono.wav b/tests/Assets/realtime_api_description_pcm16_24khz_mono.wav new file mode 100644 index 000000000..91cca447d Binary files /dev/null and b/tests/Assets/realtime_api_description_pcm16_24khz_mono.wav differ diff --git a/tests/Assistants/Assistants.VectorStoresTests.cs b/tests/Assistants/Assistants.VectorStoresTests.cs index d08bdf463..4011e7854 100644 --- a/tests/Assistants/Assistants.VectorStoresTests.cs +++ b/tests/Assistants/Assistants.VectorStoresTests.cs @@ -164,7 +164,7 @@ public async Task CanEnumerateVectorStoresAsync() AssertAsyncOnly(); VectorStoreClient client = GetTestClient(); - for (int i = 0; i < 10; i++) + for (int i = 0; i < 5; i++) { CreateVectorStoreOperation createOperation = await client.CreateVectorStoreAsync(waitUntilCompleted: true, new VectorStoreCreationOptions() @@ -177,6 +177,8 @@ public async Task CanEnumerateVectorStoresAsync() Assert.That(vectorStore.Name, Is.EqualTo($"Test Vector Store {i}")); } + Thread.Sleep(5000); + int lastIdSeen = int.MaxValue; int count = 0; diff --git a/tests/Audio/TranscriptionTests.cs b/tests/Audio/TranscriptionTests.cs index 0a6abb5a4..3132654e3 100644 --- a/tests/Audio/TranscriptionTests.cs +++ b/tests/Audio/TranscriptionTests.cs @@ -6,6 +6,7 @@ using System.ClientModel.Primitives; using System.Collections.Generic; using System.IO; +using System.Text; using System.Threading.Tasks; using System.Transactions; using static OpenAI.Tests.TestHelpers; @@ -196,6 +197,58 @@ public async Task TranscriptionFormatsWork(string responseFormat) } } + [Test] + public async Task IncludesWork() + { + AudioClient client = GetTestClient(TestScenario.Audio_Gpt_4o_Mini_Transcribe); + string filename = "audio_hello_world.mp3"; + string path = Path.Combine("Assets", filename); + + AudioTranscription transcription = await client.TranscribeAudioAsync(path, new AudioTranscriptionOptions() + { + Includes = AudioTranscriptionIncludes.Logprobs, + }); + + Assert.That(transcription.TranscriptionTokenLogProbabilities, Has.Count.GreaterThan(0)); + Assert.That(transcription.TranscriptionTokenLogProbabilities[0].Token, Is.Not.Null.And.Not.Empty); + Assert.That(transcription.TranscriptionTokenLogProbabilities[0].LogProbability, Is.Not.EqualTo(0)); + Assert.That(transcription.TranscriptionTokenLogProbabilities[0].Utf8Bytes.ToArray(), Is.Not.Null.And.Not.Empty); + } + + [Test] + public async Task StreamingIncludesWork() + { + AudioClient client = GetTestClient(TestScenario.Audio_Gpt_4o_Mini_Transcribe); + string filename = "audio_hello_world.mp3"; + string path = Path.Combine("Assets", filename); + + List streamedDeltaLogProbs = []; + + await foreach (StreamingAudioTranscriptionUpdate update + in client.TranscribeAudioStreamingAsync( + path, + new AudioTranscriptionOptions() + { + Includes = AudioTranscriptionIncludes.Logprobs, + })) + { + if (update is StreamingAudioTranscriptionTextDeltaUpdate deltaUpdate) + { + Assert.That(deltaUpdate.TranscriptionTokenLogProbabilities, Is.Not.Null); + streamedDeltaLogProbs.AddRange(deltaUpdate.TranscriptionTokenLogProbabilities); + } + else if (update is StreamingAudioTranscriptionTextDoneUpdate doneUpdate) + { + Assert.That(doneUpdate.TranscriptionTokenLogProbabilities, Has.Count.GreaterThan(0)); + Assert.That(doneUpdate.TranscriptionTokenLogProbabilities.Count, Is.EqualTo(streamedDeltaLogProbs.Count)); + Assert.That(doneUpdate.TranscriptionTokenLogProbabilities[0].Token, Is.Not.Null.And.Not.Empty); + Assert.That(doneUpdate.TranscriptionTokenLogProbabilities[0].Token, Is.EqualTo(streamedDeltaLogProbs[0].Token)); + } + } + + Assert.That(streamedDeltaLogProbs, Has.Count.GreaterThan(0)); + } + [Test] public async Task BadTranscriptionRequest() { @@ -224,4 +277,49 @@ public async Task BadTranscriptionRequest() Assert.That(caughtException, Is.InstanceOf()); Assert.That(caughtException.Message?.ToLower(), Contains.Substring("invalid language")); } + + [Test] + [TestCase(AudioSourceKind.UsingStream)] + [TestCase(AudioSourceKind.UsingFilePath)] + public async Task StreamingTranscriptionWorks(AudioSourceKind audioSourceKind) + { + AudioClient client = GetTestClient(TestScenario.Audio_Gpt_4o_Mini_Transcribe); + string filename = "audio_hello_world.mp3"; + string path = Path.Combine("Assets", filename); + + FileStream inputStream = null; + + AsyncCollectionResult streamingUpdates = null; + + if (audioSourceKind == AudioSourceKind.UsingStream) + { + inputStream = File.OpenRead(path); + streamingUpdates = client.TranscribeAudioStreamingAsync(inputStream, filename); + } + else if (audioSourceKind == AudioSourceKind.UsingFilePath) + { + streamingUpdates = client.TranscribeAudioStreamingAsync(path); + } + + StringBuilder deltaBuilder = new(); + + await foreach (StreamingAudioTranscriptionUpdate update in streamingUpdates) + { + if (update is StreamingAudioTranscriptionTextDeltaUpdate deltaUpdate) + { + deltaBuilder.Append(deltaUpdate.Delta); + Assert.That(deltaUpdate.TranscriptionTokenLogProbabilities, Has.Count.EqualTo(0)); + } + else if (update is StreamingAudioTranscriptionTextDoneUpdate doneUpdate) + { + Assert.That(doneUpdate.Text, Is.Not.Null.And.Not.Empty); + Assert.That(doneUpdate.Text, Is.EqualTo(deltaBuilder.ToString())); + Assert.That(doneUpdate.TranscriptionTokenLogProbabilities, Has.Count.EqualTo(0)); + } + } + + Assert.That(deltaBuilder.ToString().ToLower(), Does.Contain("hello world")); + + inputStream?.Dispose(); + } } diff --git a/tests/Chat/ChatSmokeTests.cs b/tests/Chat/ChatSmokeTests.cs index daf8a3492..b61dc4125 100644 --- a/tests/Chat/ChatSmokeTests.cs +++ b/tests/Chat/ChatSmokeTests.cs @@ -10,6 +10,7 @@ using System.Linq; using System.Net; using System.Reflection; +using System.Text; using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; @@ -961,4 +962,74 @@ public void IdempotentOptionsSerialization() string reserializedOptionsText = reserializedOptions.ToString(); Assert.That(serializedOptions.ToString(), Is.EqualTo(reserializedOptionsText)); } + + [Test] + public void StableImageContentPartSerialization() + { + string base64HelloWorld = Convert.ToBase64String(Encoding.UTF8.GetBytes("hello world")); + + void AssertExpectedImagePart(ChatMessageContentPart imagePart) + { + Assert.That(imagePart.Kind, Is.EqualTo(ChatMessageContentPartKind.Image)); + Assert.That(imagePart.ImageBytesMediaType, Is.EqualTo("image/png")); + Assert.That(imagePart.ImageDetailLevel, Is.EqualTo(ChatImageDetailLevel.High)); + Assert.That(Convert.FromBase64String(Convert.ToBase64String(imagePart.ImageBytes.ToArray())), Is.EqualTo("hello world")); + } + + ChatMessageContentPart imagePart = ChatMessageContentPart.CreateImagePart( + BinaryData.FromBytes(Encoding.UTF8.GetBytes("hello world")), + "image/png", + ChatImageDetailLevel.High); + + AssertExpectedImagePart(imagePart); + + BinaryData serializedImagePart = ModelReaderWriter.Write(imagePart); + Assert.That(serializedImagePart, Is.Not.Null); + + ChatMessageContentPart deserializedImagePart = ModelReaderWriter.Read(serializedImagePart); + + AssertExpectedImagePart(deserializedImagePart); + + ChatMessageContentPart nonDataImagePart = ChatMessageContentPart.CreateImagePart( + new Uri("https://test.openai.com/image.png"), + ChatImageDetailLevel.High); + + Assert.That(nonDataImagePart.Kind, Is.EqualTo(ChatMessageContentPartKind.Image)); + Assert.That(nonDataImagePart.ImageUri?.AbsoluteUri, Is.EqualTo("https://test.openai.com/image.png")); + + serializedImagePart = ModelReaderWriter.Write(nonDataImagePart); + Assert.That(serializedImagePart, Is.Not.Null); + + deserializedImagePart = ModelReaderWriter.Read(serializedImagePart); + Assert.That(deserializedImagePart.Kind, Is.EqualTo(ChatMessageContentPartKind.Image)); + Assert.That(deserializedImagePart.ImageUri?.AbsoluteUri, Is.EqualTo("https://test.openai.com/image.png")); + } + + [Test] + public void StableFileContentPartSerialization() + { + string base64HelloWorld = Convert.ToBase64String(Encoding.UTF8.GetBytes("hello world")); + + void AssertExpectedFilePart(ChatMessageContentPart filePart) + { + Assert.That(filePart.Kind, Is.EqualTo(ChatMessageContentPartKind.File)); + Assert.That(filePart.FileBytesMediaType, Is.EqualTo("text/plain")); + Assert.That(filePart.Filename, Is.EqualTo("test_content_part.txt")); + Assert.That(Convert.FromBase64String(Convert.ToBase64String(filePart.FileBytes.ToArray())), Is.EqualTo("hello world")); + } + + ChatMessageContentPart filePart = ChatMessageContentPart.CreateFilePart( + BinaryData.FromBytes(Encoding.UTF8.GetBytes("hello world")), + "text/plain", + "test_content_part.txt"); + + AssertExpectedFilePart(filePart); + + BinaryData serializedFilePart = ModelReaderWriter.Write(filePart); + Assert.That(serializedFilePart, Is.Not.Null); + + ChatMessageContentPart deserializedFilePart = ModelReaderWriter.Read(serializedFilePart); + + AssertExpectedFilePart(deserializedFilePart); + } } diff --git a/tests/Chat/ChatTests.cs b/tests/Chat/ChatTests.cs index aab533e65..b67412902 100644 --- a/tests/Chat/ChatTests.cs +++ b/tests/Chat/ChatTests.cs @@ -1114,6 +1114,39 @@ ChatMessageContentPart binaryFileContentPart Assert.That(completion.Content[0].Text?.ToLower(), Does.Contain("pizza")); } + [Test] + public async Task StoredChatCompletionsWork() + { + ChatClient client = GetTestClient(); + + ChatCompletionOptions options = new() + { + StoredOutputEnabled = true + }; + + ChatCompletion completion = await client.CompleteChatAsync( + [new UserChatMessage("Say `this is a test`.")], + options); + + Thread.Sleep(5000); + + ChatCompletion storedCompletion = await client.GetChatCompletionAsync(completion.Id); + + Assert.That(storedCompletion.Id, Is.EqualTo(completion.Id)); + Assert.That(storedCompletion.Content[0].Text, Is.EqualTo(completion.Content[0].Text)); + + ChatCompletionDeletionResult deletionResult = await client.DeleteChatCompletionAsync(completion.Id); + + Assert.That(deletionResult.Deleted, Is.True); + + Thread.Sleep(5000); + + Assert.ThrowsAsync(async () => + { + ChatCompletion deletedCompletion = await client.GetChatCompletionAsync(completion.Id); + }); + } + private List FileIdsToDelete = []; private void Validate(T item) { diff --git a/tests/Files/FilesMockTests.cs b/tests/Files/FilesMockTests.cs index eace0f3ff..2fdfe2b5f 100644 --- a/tests/Files/FilesMockTests.cs +++ b/tests/Files/FilesMockTests.cs @@ -240,6 +240,22 @@ public async Task UploadFileDeserializesStatusDetails(FileSourceKind fileSourceK } #pragma warning restore CS0618 + [Test] + public async Task UploadFileDeserializesBigSizes() + { + long bigSize = (long)int.MaxValue + (long)int.MaxValue / 2; + + OpenAIClientOptions clientOptions = GetClientOptionsWithMockResponse(200, $$""" + { + "bytes": {{bigSize}} + } + """); + OpenAIFile fileInfo = await InvokeUploadFileSyncOrAsync(clientOptions, FileSourceKind.UsingFilePath); + + Assert.That(fileInfo.SizeInBytesLong, Is.EqualTo(bigSize)); + Assert.Throws(() => _ = fileInfo.SizeInBytes); + } + [Test] public void UploadFileRespectsTheCancellationToken() { diff --git a/tests/Files/OpenAIFilesModelFactoryTests.cs b/tests/Files/OpenAIFilesModelFactoryTests.cs index fc4d6eadd..2db3391c6 100644 --- a/tests/Files/OpenAIFilesModelFactoryTests.cs +++ b/tests/Files/OpenAIFilesModelFactoryTests.cs @@ -78,7 +78,7 @@ public void OpenAIFileInfoWithIdWorks() public void OpenAIFileInfoWithSizeInBytesWorks() { int sizeInBytes = 1025; - OpenAIFile openAIFile = OpenAIFilesModelFactory.OpenAIFileInfo(sizeInBytes: sizeInBytes); + OpenAIFile openAIFile = OpenAIFilesModelFactory.OpenAIFileInfo(sizeInBytesLong: sizeInBytes); Assert.That(openAIFile.Id, Is.Null); Assert.That(openAIFile.SizeInBytes, Is.EqualTo(sizeInBytes)); diff --git a/tests/FineTuning/FineTuningClientTests.cs b/tests/FineTuning/FineTuningClientTests.cs new file mode 100644 index 000000000..e5fe5e293 --- /dev/null +++ b/tests/FineTuning/FineTuningClientTests.cs @@ -0,0 +1,301 @@ +using NUnit.Framework; +using NUnit.Framework.Internal; +using OpenAI.Files; +using OpenAI.FineTuning; +using System; +using System.ClientModel; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.FineTuning; + +public static class Extensions +{ + public static bool IsAsync(this Method method) => method == Method.Async; +} + +public enum Method +{ + Sync, + Async +} + + +[TestFixture] +[Parallelizable(ParallelScope.Fixtures)] +[Category("FineTuning")] +public class FineTuningClientTests +{ + + + FineTuningClient client; + OpenAIFileClient fileClient; + + string samplePath; + string validationPath; + + OpenAIFile sampleFile; + OpenAIFile validationFile; + + [OneTimeSetUp] + public void Setup() + { + client = GetTestClient(); + fileClient = GetTestClient(TestScenario.Files); + + samplePath = Path.Combine("Assets", "fine_tuning_sample.jsonl"); + validationPath = Path.Combine("Assets", "fine_tuning_sample_validation.jsonl"); + + sampleFile = fileClient.UploadFile(samplePath, FileUploadPurpose.FineTune); + validationFile = fileClient.UploadFile(validationPath, FileUploadPurpose.FineTune); + + } + + [OneTimeTearDown] + public void TearDown() + { + fileClient.DeleteFile(sampleFile.Id); + fileClient.DeleteFile(validationFile.Id); + } + + + + [Test] + [Parallelizable(ParallelScope.All)] + public async Task MinimalRequiredParams([Values(Method.Sync, Method.Async)] Method method) + { + FineTuningJob ft = method.IsAsync() + ? await client.FineTuneAsync("gpt-3.5-turbo", sampleFile.Id, false) + : client.FineTune("gpt-3.5-turbo", sampleFile.Id, false); + + // Assert.AreEqual(0, ft.Hyperparameters.CycleCount); + Assert.True(ft.Status.InProgress); + Assert.False(ft.HasCompleted); + + _ = method.IsAsync() + ? await ft.CancelAndUpdateAsync() + : ft.CancelAndUpdate(); + + Assert.AreEqual(FineTuningStatus.Cancelled, ft.Status); + Assert.False(ft.Status.InProgress); + Assert.True(ft.HasCompleted); + } + + + + [Test] + [Parallelizable(ParallelScope.All)] + public async Task AllParameters([Values(Method.Sync, Method.Async)] Method method) + { + // This test does not check for Integrations because it requires a valid API key + + var options = new FineTuningOptions() + { + TrainingMethod = FineTuningTrainingMethod.CreateSupervised( + epochCount: 1, + batchSize: 2, + learningRate: 3), + Suffix = "TestFTJob", + ValidationFile = validationFile.Id, + Seed = 1234567 + }; + + + FineTuningJob ft = method.IsAsync() + ? await client.FineTuneAsync("gpt-3.5-turbo", sampleFile.Id, false, options) + : client.FineTune("gpt-3.5-turbo", sampleFile.Id, false, options); + + ft.CancelAndUpdate(); + +#pragma warning disable CS0618 + Assert.AreEqual(1, ft.Hyperparameters.EpochCount); + Assert.AreEqual(2, ft.Hyperparameters.BatchSize); + Assert.AreEqual(3, ft.Hyperparameters.LearningRateMultiplier); +#pragma warning restore + + if (ft.MethodHyperparameters is HyperparametersForSupervised hp) + { + Assert.AreEqual(1, hp.EpochCount); + Assert.AreEqual(2, hp.BatchSize); + Assert.AreEqual(3, hp.LearningRateMultiplier); + } + else + { + Assert.Fail($"Expected HyperparametersForSupervised, got {ft.MethodHyperparameters?.GetType().ToString() ?? "null"}"); + } + + Assert.AreEqual(ft.UserProvidedSuffix, "TestFTJob"); + Assert.AreEqual(1234567, ft.Seed); + Assert.AreEqual(validationFile.Id, ft.ValidationFileId); + } + + [Test] + [Parallelizable] + [Explicit("This test requires wandb.ai account and api key integration.")] + public void WandBIntegrations() + { + FineTuningJob job = client.FineTune( + "gpt-3.5-turbo", + sampleFile.Id, + false, options: new() + { + Integrations = { new WeightsAndBiasesIntegration("ft-tests") }, + } + ); + job.CancelAndUpdate(); + } + + [Test] + [Parallelizable] + public void ExceptionThrownOnInvalidFileName() + { + Assert.Throws(() => + client.FineTune(baseModel: "gpt-3.5-turbo", trainingFileId: "Invalid File Name", waitUntilCompleted: false) + ); + } + + [Test] + [Parallelizable] + public void ExceptionThrownOnInvalidModelName() + { + Assert.Throws(() => + client.FineTune(baseModel: "gpt-nonexistent", trainingFileId: sampleFile.Id, waitUntilCompleted: false) + ); + } + + [Test] + [Parallelizable] + public void ExceptionThrownOnInvalidValidationId() + { + Assert.Throws(() => + { + client.FineTune( + "gpt-3.5-turbo", + sampleFile.Id, + false, new() { ValidationFile = "7" } + ); + }); + } + + [Test] + [Parallelizable] + public void ExceptionThrownOnInvalidValidationIdAsync() + { + Assert.ThrowsAsync(async () => + { + await client.FineTuneAsync( + "gpt-3.5-turbo", + sampleFile.Id, + false, new() { ValidationFile = "7" } + ); + }); + } + + [Test] + [Parallelizable(ParallelScope.All)] + public void GetJobs([Values(Method.Sync, Method.Async)] Method method) + { + // Arrange + Console.WriteLine("Getting jobs"); + var jobs = method.IsAsync() + ? client.GetJobsAsync().Take(10).ToBlockingEnumerable() + : client.GetJobs().Take(10); + + Console.WriteLine("Got jobs"); + + // Act + var counter = 0; + foreach (var job in jobs) // Network call will happen here on first iteration. + { + Console.WriteLine($"{counter} jobs"); + Console.WriteLine($"Job: {job.JobId}"); + Assert.IsTrue(job.JobId.StartsWith("ftjob")); + counter++; + } + Console.WriteLine($"Got {counter} jobs"); + + // Assert + Assert.Greater(counter, 0); + Assert.LessOrEqual(counter, 10); + } + + [Test] + [Parallelizable] + public void GetJobsWithAfter() + { + var firstJob = client.GetJobs().First(); + + if (firstJob is null) + { + Assert.Fail("No jobs found. At least 2 jobs have to be found to run this test."); + } + var secondJob = client.GetJobs(new() { AfterJobId = firstJob.JobId }).First(); + + Assert.AreNotEqual(firstJob.JobId, secondJob.JobId); + // Can't assert that one was created after the next because they might be created at the same second. + // Assert.Greater(secondJob.CreatedAt, firstJob.CreatedAt, $"{firstJob}, {secondJob}"); + } + + /// Manual experiments show that there are always at least 2 events: + /// First one is that the job is created + /// Second one is "validating training file" + /// If this test starts failing because of the wrong count, please first check if the above is still true + [Test] + [Parallelizable(ParallelScope.All)] + public void GetJobEvents([Values(Method.Sync, Method.Async)] Method method) + { + // Arrange + FineTuningJob job = client.FineTune("gpt-3.5-turbo", sampleFile.Id, false); + + GetEventsOptions options = new() + { + PageSize = 1 + }; + job.CancelAndUpdate(); + + // Act + var events = method.IsAsync() + ? job.GetEventsAsync(options).ToBlockingEnumerable() + : job.GetEvents(options); + + var first = events.FirstOrDefault(); + + // Assert + if (first is null) + { + Assert.Fail("No events found."); + } + } + + [Test] + [Parallelizable(ParallelScope.All)] + public void GetCheckpoints([Values(Method.Sync, Method.Async)] Method method) + { + // Arrange + // TODO: When `status` option becomes available, use it to get a succeeded job + FineTuningJob job = client.GetJobs(new() { PageSize = 100 }) + .Where((job) => job.Status == "succeeded") + .First(); + + + // Act + var checkpoints = method.IsAsync() + ? job.GetCheckpointsAsync().ToBlockingEnumerable() + : job.GetCheckpoints(); + FineTuningCheckpoint first = checkpoints.FirstOrDefault(); + + // Assert + if (first is null) + { + Assert.Fail("No checkpoints found."); + } + + FineTuningCheckpointMetrics metrics = first.Metrics; + Assert.NotNull(metrics); + Assert.Greater(metrics.StepNumber, 0); + } + + private static FineTuningClient GetTestClient() => GetTestClient(TestScenario.FineTuning); +} \ No newline at end of file diff --git a/tests/FineTuning/FineTuningOperationTests.cs b/tests/FineTuning/FineTuningOperationTests.cs new file mode 100644 index 000000000..05ce5843c --- /dev/null +++ b/tests/FineTuning/FineTuningOperationTests.cs @@ -0,0 +1,27 @@ +using NUnit.Framework; +using OpenAI.FineTuning; +using System; +using System.ClientModel.Primitives; +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace OpenAI.Tests.FineTuning; + + +[Parallelizable(ParallelScope.Fixtures)] +[Category("FineTuning")] +internal class FineTuningOperationTests +{ + [Test] + [Parallelizable] + [Category("Smoke")] + public void TestInProgress() + { + var success = FineTuningStatus.Queued; + Assert.IsTrue(success.InProgress); + + var fail = FineTuningStatus.Failed; + Assert.IsFalse(fail.InProgress); + } +} \ No newline at end of file diff --git a/tests/FineTuning/FineTuningTests.cs b/tests/FineTuning/FineTuningTests.cs deleted file mode 100644 index 2a2009078..000000000 --- a/tests/FineTuning/FineTuningTests.cs +++ /dev/null @@ -1,127 +0,0 @@ -using NUnit.Framework; -using OpenAI.Files; -using OpenAI.FineTuning; -using OpenAI.Tests.Utility; -using System; -using System.ClientModel; -using System.Collections.Generic; -using System.Text.Json; -using System.Threading.Tasks; -using static OpenAI.Tests.TestHelpers; - -namespace OpenAI.Tests.FineTuning; - -[TestFixture(true)] -[TestFixture(false)] -[Parallelizable(ParallelScope.All)] -[Category("FineTuning")] -internal class FineTuningTests : SyncAsyncTestBase -{ - public FineTuningTests(bool isAsync) - : base(isAsync) - { - } - - [Test] - public void CreateJobCanParseServiceError() - { - FineTuningClient client = GetTestClient(TestScenario.FineTuning); - BinaryData data = BinaryData.FromString($$""" - { - "model": "gpt-3.5-turbo" - } - """); - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.CreateFineTuningJobAsync(BinaryContent.Create(data), waitUntilCompleted: false)); - } - else - { - ex = Assert.Throws(() => client.CreateFineTuningJob(BinaryContent.Create(data), waitUntilCompleted: false)); - } - - Assert.That(ex.Status, Is.EqualTo(400)); - Assert.That(ex.Message, Contains.Substring("training_file")); - } - - [Test] - public void GetJobCanParseServiceError() - { - FineTuningClient client = GetTestClient(TestScenario.FineTuning); - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GetJobAsync("fakeJobId", options: null)); - } - else - { - ex = Assert.Throws(() => client.GetJob("fakeJobId", options: null)); - } - - Assert.That(ex.Status, Is.EqualTo(404)); - } - - [Test] - public async Task GetJobsAsyncWorks() - { - AssertAsyncOnly(); - - FineTuningClient client = GetTestClient(TestScenario.FineTuning); - - await foreach (ClientResult result in client.GetJobsAsync(after: null, limit: null, options: null).GetRawPagesAsync()) - { - BinaryData response = result.GetRawResponse().Content; - JsonDocument jsonDocument = JsonDocument.Parse(response); - JsonElement jsonRoot = jsonDocument.RootElement; - - Assert.That(jsonRoot.TryGetProperty("data", out _), Is.True); - Assert.That(jsonRoot.TryGetProperty("has_more", out _), Is.True); - } - } - - [Test] - public void GetJobsWorks() - { - AssertSyncOnly(); - - FineTuningClient client = GetTestClient(TestScenario.FineTuning); - - foreach (ClientResult result in client.GetJobs(after: null, limit: null, options: null).GetRawPages()) - { - BinaryData response = result.GetRawResponse().Content; - JsonDocument jsonDocument = JsonDocument.Parse(response); - JsonElement jsonRoot = jsonDocument.RootElement; - - Assert.That(jsonRoot.TryGetProperty("data", out _), Is.True); - Assert.That(jsonRoot.TryGetProperty("has_more", out _), Is.True); - } - } - - // We need to add this test back once we have access to the test resources - // - //[Test] - //public void BasicFineTuningJobOperationsWork() - //{ - // // Upload training file first - // FileClient fileClient = GetTestClient(TestScenario.Files); - // string filename = "toy_chat.jsonl"; - // BinaryData fileContent = BinaryData.FromString(""" - // {"messages": [{"role": "user", "content": "I lost my book today."}, {"role": "assistant", "content": "You can read everything on ebooks these days!"}]} - // {"messages": [{"role": "system", "content": "You are a happy assistant that puts a positive spin on everything."}, {"role": "assistant", "content": "You're great!"}]} - // """); - // OpenAIFile uploadedFile = fileClient.UploadFile(fileContent, filename, FileUploadPurpose.FineTune); - // Assert.That(uploadedFile?.Filename, Is.EqualTo(filename)); - - // // Submit fine-tuning job - // FineTuningClient client = GetTestClient(TestScenario.FineTuning); - - // string json = $"{{\"training_file\":\"{uploadedFile.Id}\",\"model\":\"gpt-3.5-turbo\"}}"; - // BinaryData input = BinaryData.FromString(json); - // using BinaryContent content = BinaryContent.Create(input); - - // FineTuningJobOperation operation = client.CreateJob(content, waitUntilCompleted: false); - //} -} diff --git a/tests/FineTuning/HyperparameterOptionsTests.cs b/tests/FineTuning/HyperparameterOptionsTests.cs new file mode 100644 index 000000000..111860470 --- /dev/null +++ b/tests/FineTuning/HyperparameterOptionsTests.cs @@ -0,0 +1,48 @@ +using NUnit.Framework; +using OpenAI.FineTuning; +using System; + +namespace OpenAI.Tests.FineTuning; + +[Parallelizable(ParallelScope.Fixtures)] +[Category("FineTuning")] +[Category("Smoke")] +class HyperparameterOptionsTests +{ + [Test] + [Parallelizable] + public void OptionsCanEasilyCompare() + { + Assert.AreEqual(HyperparameterEpochCount.CreateAuto(), "auto"); + Assert.AreEqual(HyperparameterBatchSize.CreateAuto(), "auto"); + Assert.AreEqual(HyperparameterLearningRate.CreateAuto(), "auto"); + Assert.AreEqual(HyperparameterBetaFactor.CreateAuto(), "auto"); + + Assert.AreEqual(new HyperparameterEpochCount(1), 1); + Assert.AreEqual(new HyperparameterBatchSize(1), 1); + Assert.AreEqual(new HyperparameterLearningRate(1), 1); + Assert.AreEqual(new HyperparameterBetaFactor(1), 1); + + Assert.AreEqual(1, new HyperparameterEpochCount(1)); + Assert.AreEqual(1, new HyperparameterBatchSize(1)); + Assert.AreEqual(1.0, new HyperparameterLearningRate(1)); + Assert.AreEqual(1, new HyperparameterBetaFactor(1)); + + Assert.That(1 == new HyperparameterEpochCount(1)); + Assert.That(1 == new HyperparameterBatchSize(1)); + Assert.That(0.5 == new HyperparameterLearningRate(0.5)); + + Assert.That(new HyperparameterBatchSize(1) == 1); + Assert.That(new HyperparameterEpochCount(1) == 1); + Assert.That(new HyperparameterLearningRate(1) == 1); + Assert.That(new HyperparameterBetaFactor(1) == 1); + } + + [Test] + [Parallelizable] + public void OptionsCanEasilySet() + { + FineTuningTrainingMethod supervisedMethod = FineTuningTrainingMethod.CreateSupervised(); + // TODO: Add more tests here + } +} diff --git a/tests/Images/ImageEditsTests.cs b/tests/Images/ImageEditsTests.cs new file mode 100644 index 000000000..4d20c8a17 --- /dev/null +++ b/tests/Images/ImageEditsTests.cs @@ -0,0 +1,573 @@ +using NUnit.Framework; +using OpenAI.Images; +using OpenAI.Tests.Utility; +using System; +using System.ClientModel; +using System.IO; +using System.Threading.Tasks; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Images; + +public partial class ImageEditsTests : ImageTestFixtureBase +{ + public ImageEditsTests(bool isAsync) : base(isAsync) + { + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateImageEditWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + + string maskFilename = "images_empty_room_with_mask.png"; + string maskImagePath = Path.Combine("Assets", maskFilename); + GeneratedImage image = null; + + ImageEditOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Uri, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream mask = File.OpenRead(maskImagePath); + + image = IsAsync + ? await client.GenerateImageEditAsync(mask, maskFilename, CatPrompt, options) + : client.GenerateImageEdit(mask, maskFilename, CatPrompt, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + image = IsAsync + ? await client.GenerateImageEditAsync(maskImagePath, CatPrompt, options) + : client.GenerateImageEdit(maskImagePath, CatPrompt, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + Assert.That(image.ImageUri, Is.Not.Null); + Assert.That(image.ImageBytes, Is.Null); + + Console.WriteLine(image.ImageUri.AbsoluteUri); + + ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateImageEditWithBytesResponseWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + + string maskFilename = "images_empty_room_with_mask.png"; + string maskImagePath = Path.Combine("Assets", maskFilename); + GeneratedImage image = null; + + ImageEditOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Bytes, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream mask = File.OpenRead(maskImagePath); + + image = IsAsync + ? await client.GenerateImageEditAsync(mask, maskFilename, CatPrompt, options) + : client.GenerateImageEdit(mask, maskFilename, CatPrompt, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + image = IsAsync + ? await client.GenerateImageEditAsync(maskImagePath, CatPrompt, options) + : client.GenerateImageEdit(maskImagePath, CatPrompt, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + Assert.That(image.ImageUri, Is.Null); + Assert.That(image.ImageBytes, Is.Not.Null); + + ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + + [Test] + public void GenerateImageEditFromStreamCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string maskFilename = "images_empty_room_with_mask.png"; + string maskImagePath = Path.Combine("Assets", maskFilename); + using FileStream mask = File.OpenRead(maskImagePath); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditAsync(mask, maskFilename, CatPrompt)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageEdit(mask, maskFilename, CatPrompt)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + public void GenerateImageEditFromPathCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string maskFilename = "images_empty_room_with_mask.png"; + string maskImagePath = Path.Combine("Assets", maskFilename); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditAsync(maskImagePath, CatPrompt)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageEdit(maskImagePath, CatPrompt)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateImageEditWithMaskFileWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + + string originalImageFilename = "images_empty_room.png"; + string maskFilename = "images_empty_room_with_mask.png"; + string originalImagePath = Path.Combine("Assets", originalImageFilename); + string maskImagePath = Path.Combine("Assets", maskFilename); + GeneratedImage image = null; + + ImageEditOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Uri, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream originalImage = File.OpenRead(originalImagePath); + using FileStream mask = File.OpenRead(maskImagePath); + + image = IsAsync + ? await client.GenerateImageEditAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, options) + : client.GenerateImageEdit(mask, maskFilename, CatPrompt, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + image = IsAsync + ? await client.GenerateImageEditAsync(originalImagePath, CatPrompt, maskImagePath, options) + : client.GenerateImageEdit(maskImagePath, CatPrompt, maskImagePath, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + Assert.That(image.ImageUri, Is.Not.Null); + Assert.That(image.ImageBytes, Is.Null); + + Console.WriteLine(image.ImageUri.AbsoluteUri); + + ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateImageEditWithMaskFileWithBytesResponseWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + + string originalImageFilename = "images_empty_room.png"; + string maskFilename = "images_empty_room_with_mask.png"; + string originalImagePath = Path.Combine("Assets", originalImageFilename); + string maskImagePath = Path.Combine("Assets", maskFilename); + GeneratedImage image = null; + + ImageEditOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Bytes, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream originalImage = File.OpenRead(originalImagePath); + using FileStream mask = File.OpenRead(maskImagePath); + + image = IsAsync + ? await client.GenerateImageEditAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, options) + : client.GenerateImageEdit(mask, maskFilename, CatPrompt, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + image = IsAsync + ? await client.GenerateImageEditAsync(originalImagePath, CatPrompt, maskImagePath, options) + : client.GenerateImageEdit(maskImagePath, CatPrompt, maskImagePath, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + Assert.That(image.ImageUri, Is.Null); + Assert.That(image.ImageBytes, Is.Not.Null); + + ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + + [Test] + public void GenerateImageEditWithMaskFileFromStreamCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string originalImageFilename = "images_empty_room.png"; + string maskFilename = "images_empty_room_with_mask.png"; + string originalImagePath = Path.Combine("Assets", originalImageFilename); + string maskImagePath = Path.Combine("Assets", maskFilename); + using FileStream originalImage = File.OpenRead(originalImagePath); + using FileStream mask = File.OpenRead(maskImagePath); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageEdit(originalImage, originalImageFilename, CatPrompt, mask, maskFilename)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + public void GenerateImageEditWithMaskFileFromPathCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string originalImageFilename = "images_empty_room.png"; + string maskFilename = "images_empty_room_with_mask.png"; + string originalImagePath = Path.Combine("Assets", originalImageFilename); + string maskImagePath = Path.Combine("Assets", maskFilename); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditAsync(originalImagePath, CatPrompt, maskImagePath)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageEdit(originalImagePath, CatPrompt, maskImagePath)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateMultipleImageEditsWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + + string maskFilename = "images_empty_room_with_mask.png"; + string maskImagePath = Path.Combine("Assets", maskFilename); + GeneratedImageCollection images = null; + + ImageEditOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Uri, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream mask = File.OpenRead(maskImagePath); + + images = IsAsync + ? await client.GenerateImageEditsAsync(mask, maskFilename, CatPrompt, 2, options) + : client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + images = IsAsync + ? await client.GenerateImageEditsAsync(maskImagePath, CatPrompt, 2, options) + : client.GenerateImageEdits(maskImagePath, CatPrompt, 2, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); + + Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); + Assert.That(images.Count, Is.EqualTo(2)); + + foreach (GeneratedImage image in images) + { + Assert.That(image.ImageUri, Is.Not.Null); + Assert.That(image.ImageBytes, Is.Null); + Console.WriteLine(image.ImageUri.AbsoluteUri); + ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateMultipleImageEditsWithBytesResponseWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + + string maskFilename = "images_empty_room_with_mask.png"; + string maskImagePath = Path.Combine("Assets", maskFilename); + GeneratedImageCollection images = null; + + ImageEditOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Bytes, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream mask = File.OpenRead(maskImagePath); + + images = IsAsync + ? await client.GenerateImageEditsAsync(mask, maskFilename, CatPrompt, 2, options) + : client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + images = IsAsync + ? await client.GenerateImageEditsAsync(maskImagePath, CatPrompt, 2, options) + : client.GenerateImageEdits(maskImagePath, CatPrompt, 2, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); + + Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); + Assert.That(images.Count, Is.EqualTo(2)); + + foreach (GeneratedImage image in images) + { + Assert.That(image.ImageUri, Is.Null); + Assert.That(image.ImageBytes, Is.Not.Null); + ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + } + + [Test] + public void GenerateMultipleImageEditsFromStreamCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string maskFilename = "images_empty_room_with_mask.png"; + string maskImagePath = Path.Combine("Assets", maskFilename); + using FileStream mask = File.OpenRead(maskImagePath); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditsAsync(mask, maskFilename, CatPrompt, 2)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + public void GenerateMultipleImageEditsFromPathCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string maskFilename = "images_empty_room_with_mask.png"; + string maskImagePath = Path.Combine("Assets", maskFilename); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditsAsync(maskImagePath, CatPrompt, 2)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageEdits(maskImagePath, CatPrompt, 2)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateMultipleImageEditsWithMaskFileWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + + string originalImageFilename = "images_empty_room.png"; + string maskFilename = "images_empty_room_with_mask.png"; + string originalImagePath = Path.Combine("Assets", originalImageFilename); + string maskImagePath = Path.Combine("Assets", maskFilename); + GeneratedImageCollection images = null; + + ImageEditOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Uri, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream originalImage = File.OpenRead(originalImagePath); + using FileStream mask = File.OpenRead(maskImagePath); + + images = IsAsync + ? await client.GenerateImageEditsAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, 2, options) + : client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + images = IsAsync + ? await client.GenerateImageEditsAsync(originalImagePath, CatPrompt, maskImagePath, 2, options) + : client.GenerateImageEdits(maskImagePath, CatPrompt, maskImagePath, 2, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); + + Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); + Assert.That(images.Count, Is.EqualTo(2)); + + foreach (GeneratedImage image in images) + { + Assert.That(image.ImageUri, Is.Not.Null); + Assert.That(image.ImageBytes, Is.Null); + Console.WriteLine(image.ImageUri.AbsoluteUri); + ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateMultipleImageEditsWithMaskFileWithBytesResponseWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + + string originalImageFilename = "images_empty_room.png"; + string maskFilename = "images_empty_room_with_mask.png"; + string originalImagePath = Path.Combine("Assets", originalImageFilename); + string maskImagePath = Path.Combine("Assets", maskFilename); + GeneratedImageCollection images = null; + + ImageEditOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Bytes, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream originalImage = File.OpenRead(originalImagePath); + using FileStream mask = File.OpenRead(maskImagePath); + + images = IsAsync + ? await client.GenerateImageEditsAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, 2, options) + : client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + images = IsAsync + ? await client.GenerateImageEditsAsync(originalImagePath, CatPrompt, maskImagePath, 2, options) + : client.GenerateImageEdits(maskImagePath, CatPrompt, maskImagePath, 2, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); + + Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); + Assert.That(images.Count, Is.EqualTo(2)); + + foreach (GeneratedImage image in images) + { + Assert.That(image.ImageUri, Is.Null); + Assert.That(image.ImageBytes, Is.Not.Null); + ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + } + + [Test] + public void GenerateMultipleImageEditsWithMaskFileFromStreamCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string originalImageFilename = "images_empty_room.png"; + string maskFilename = "images_empty_room_with_mask.png"; + string originalImagePath = Path.Combine("Assets", originalImageFilename); + string maskImagePath = Path.Combine("Assets", maskFilename); + using FileStream originalImage = File.OpenRead(originalImagePath); + using FileStream mask = File.OpenRead(maskImagePath); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditsAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, 2)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageEdits(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, 2)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + public void GenerateMultipleImageEditsWithMaskFileFromPathCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string originalImageFilename = "images_empty_room.png"; + string maskFilename = "images_empty_room_with_mask.png"; + string originalImagePath = Path.Combine("Assets", originalImageFilename); + string maskImagePath = Path.Combine("Assets", maskFilename); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditsAsync(originalImagePath, CatPrompt, maskImagePath, 2)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageEdits(originalImagePath, CatPrompt, maskImagePath, 2)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } +} diff --git a/tests/Images/ImageTestFixtureBase.cs b/tests/Images/ImageTestFixtureBase.cs new file mode 100644 index 000000000..14fa3c063 --- /dev/null +++ b/tests/Images/ImageTestFixtureBase.cs @@ -0,0 +1,65 @@ +using NUnit.Framework; +using OpenAI.Chat; +using OpenAI.Tests.Utility; +using System; +using System.ClientModel; +using System.Collections.Generic; +using System.Linq; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Images; + +[TestFixture(true)] +[TestFixture(false)] +[Parallelizable(ParallelScope.All)] +[Category("Images")] +public class ImageTestFixtureBase : SyncAsyncTestBase +{ + public ImageTestFixtureBase(bool isAsync) : base(isAsync) + { + } + + public enum ImageSourceKind + { + UsingStream, + UsingFilePath + } + + internal const string CatPrompt = "A big cat with big round eyes and large cat ears, sitting in an empty room and looking at the camera."; + + internal static Array s_imageSourceKindSource = Enum.GetValues(typeof(ImageSourceKind)); + + public void ValidateGeneratedImage(Uri imageUri, IEnumerable possibleExpectedSubstrings, string descriptionHint = null) + { + ChatClient chatClient = GetTestClient(TestScenario.Chat); + IEnumerable messages = [ + new UserChatMessage( + ChatMessageContentPart.CreateTextPart($"Describe this image for me. {descriptionHint}"), + ChatMessageContentPart.CreateImagePart(imageUri)), + ]; + ChatCompletionOptions chatOptions = new() { MaxOutputTokenCount = 2048 }; + ClientResult result = chatClient.CompleteChat(messages, chatOptions); + + Assert.That(result.Value?.Content, Has.Count.EqualTo(1)); + string contentText = result.Value.Content[0].Text.ToLowerInvariant(); + + Assert.That(possibleExpectedSubstrings.Any(possibleExpectedSubstring => contentText.Contains(possibleExpectedSubstring))); + } + + public void ValidateGeneratedImage(BinaryData imageBytes, IEnumerable possibleExpectedSubstrings, string descriptionHint = null) + { + ChatClient chatClient = GetTestClient(TestScenario.Chat); + IEnumerable messages = [ + new UserChatMessage( + ChatMessageContentPart.CreateTextPart($"Describe this image for me. {descriptionHint}"), + ChatMessageContentPart.CreateImagePart(imageBytes, "image/png")), + ]; + ChatCompletionOptions chatOptions = new() { MaxOutputTokenCount = 2048 }; + ClientResult result = chatClient.CompleteChat(messages, chatOptions); + + Assert.That(result.Value?.Content, Has.Count.EqualTo(1)); + string contentText = result.Value.Content[0].Text.ToLowerInvariant(); + + Assert.That(possibleExpectedSubstrings.Any(possibleExpectedSubstring => contentText.Contains(possibleExpectedSubstring))); + } +} diff --git a/tests/Images/ImageVariationsTests.cs b/tests/Images/ImageVariationsTests.cs new file mode 100644 index 000000000..f8ae378de --- /dev/null +++ b/tests/Images/ImageVariationsTests.cs @@ -0,0 +1,279 @@ +using NUnit.Framework; +using OpenAI.Images; +using System; +using System.ClientModel; +using System.IO; +using System.Threading.Tasks; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Images; + +public partial class ImageVariationsTests : ImageTestFixtureBase +{ + public ImageVariationsTests(bool isAsync) : base(isAsync) + { + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateImageVariationWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + string imageFilename = "images_dog_and_cat.png"; + string imagePath = Path.Combine("Assets", imageFilename); + GeneratedImage image = null; + + ImageVariationOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Uri, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream imageFile = File.OpenRead(imagePath); + + image = IsAsync + ? await client.GenerateImageVariationAsync(imageFile, imageFilename, options) + : client.GenerateImageVariation(imageFile, imageFilename, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + image = IsAsync + ? await client.GenerateImageVariationAsync(imagePath, options) + : client.GenerateImageVariation(imagePath, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + Assert.That(image.ImageUri, Is.Not.Null); + Assert.That(image.ImageBytes, Is.Null); + + Console.WriteLine(image.ImageUri.AbsoluteUri); + + ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateImageVariationWithBytesResponseWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + string imageFilename = "images_dog_and_cat.png"; + string imagePath = Path.Combine("Assets", imageFilename); + GeneratedImage image = null; + + ImageVariationOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Bytes, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream imageFile = File.OpenRead(imagePath); + + image = IsAsync + ? await client.GenerateImageVariationAsync(imageFile, imageFilename, options) + : client.GenerateImageVariation(imageFile, imageFilename, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + image = IsAsync + ? await client.GenerateImageVariationAsync(imagePath, options) + : client.GenerateImageVariation(imagePath, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + Assert.That(image.ImageUri, Is.Null); + Assert.That(image.ImageBytes, Is.Not.Null); + + ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + + [Test] + public void GenerateImageVariationFromStreamCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string imageFilename = "images_dog_and_cat.png"; + string imagePath = Path.Combine("Assets", imageFilename); + using FileStream imageFile = File.OpenRead(imagePath); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageVariationAsync(imageFile, imageFilename)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageVariation(imageFile, imageFilename)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + public void GenerateImageVariationFromPathCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string imageFilename = "images_dog_and_cat.png"; + string imagePath = Path.Combine("Assets", imageFilename); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageVariationAsync(imagePath)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageVariation(imagePath)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateMultipleImageVariationsWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + string imageFilename = "images_dog_and_cat.png"; + string imagePath = Path.Combine("Assets", imageFilename); + GeneratedImageCollection images = null; + + ImageVariationOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Uri, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream imageFile = File.OpenRead(imagePath); + + images = IsAsync + ? await client.GenerateImageVariationsAsync(imageFile, imageFilename, 2, options) + : client.GenerateImageVariations(imageFile, imageFilename, 2, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + images = IsAsync + ? await client.GenerateImageVariationsAsync(imagePath, 2, options) + : client.GenerateImageVariations(imagePath, 2, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); + + Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); + Assert.That(images.Count, Is.EqualTo(2)); + + foreach (GeneratedImage image in images) + { + Assert.That(image.ImageUri, Is.Not.Null); + Assert.That(image.ImageBytes, Is.Null); + Console.WriteLine(image.ImageUri.AbsoluteUri); + ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + } + + [Test] + [TestCaseSource(nameof(s_imageSourceKindSource))] + public async Task GenerateMultipleImageVariationsWithBytesResponseWorks(ImageSourceKind imageSourceKind) + { + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + string imageFilename = "images_dog_and_cat.png"; + string imagePath = Path.Combine("Assets", imageFilename); + GeneratedImageCollection images = null; + + ImageVariationOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Bytes, + Size = GeneratedImageSize.W256xH256 + }; + + if (imageSourceKind == ImageSourceKind.UsingStream) + { + using FileStream imageFile = File.OpenRead(imagePath); + + images = IsAsync + ? await client.GenerateImageVariationsAsync(imageFile, imageFilename, 2, options) + : client.GenerateImageVariations(imageFile, imageFilename, 2, options); + } + else if (imageSourceKind == ImageSourceKind.UsingFilePath) + { + images = IsAsync + ? await client.GenerateImageVariationsAsync(imagePath, 2, options) + : client.GenerateImageVariations(imagePath, 2, options); + } + else + { + Assert.Fail("Invalid source kind."); + } + + long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); + + Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); + Assert.That(images.Count, Is.EqualTo(2)); + + foreach (GeneratedImage image in images) + { + Assert.That(image.ImageUri, Is.Null); + Assert.That(image.ImageBytes, Is.Not.Null); + ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); + } + } + + [Test] + public void GenerateMultipleImageVariationsFromStreamCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string imageFilename = "images_dog_and_cat.png"; + string imagePath = Path.Combine("Assets", imageFilename); + using FileStream imageFile = File.OpenRead(imagePath); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageVariationsAsync(imageFile, imageFilename, 2)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageVariations(imageFile, imageFilename, 2)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } + + [Test] + public void GenerateMultipleImageVariationsFromPathCanParseServiceError() + { + ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); + string imageFilename = "images_dog_and_cat.png"; + string imagePath = Path.Combine("Assets", imageFilename); + + ClientResultException ex = null; + + if (IsAsync) + { + ex = Assert.ThrowsAsync(async () => await client.GenerateImageVariationsAsync(imagePath, 2)); + } + else + { + ex = Assert.Throws(() => client.GenerateImageVariations(imagePath, 2)); + } + + Assert.That(ex.Status, Is.EqualTo(401)); + } +} diff --git a/tests/Images/ImagesTests.cs b/tests/Images/ImagesTests.cs index 2246da363..9bce752dc 100644 --- a/tests/Images/ImagesTests.cs +++ b/tests/Images/ImagesTests.cs @@ -1,43 +1,23 @@ using NUnit.Framework; -using OpenAI.Chat; using OpenAI.Images; using OpenAI.Tests.Utility; using System; using System.ClientModel; -using System.Collections.Generic; -using System.IO; -using System.Linq; using System.Threading.Tasks; using static OpenAI.Tests.TestHelpers; namespace OpenAI.Tests.Images; -[TestFixture(true)] -[TestFixture(false)] -[Parallelizable(ParallelScope.All)] -[Category("Images")] -public class ImagesTests : SyncAsyncTestBase +public partial class ImagesTests : ImageTestFixtureBase { - private const string CatPrompt = "A big cat with big round eyes and large cat ears, sitting in an empty room and looking at the camera."; - public ImagesTests(bool isAsync) : base(isAsync) { } - public enum ImageSourceKind - { - UsingStream, - UsingFilePath - } - - private static Array s_imageSourceKindSource = Enum.GetValues(typeof(ImageSourceKind)); - - #region GenerateImages - [Test] public async Task BasicGenerationWorks() { - ImageClient client = GetTestClient(TestScenario.Images); + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-3"); string prompt = "An isolated stop sign."; @@ -54,7 +34,7 @@ public async Task BasicGenerationWorks() [Test] public async Task GenerationWithOptionsWorks() { - ImageClient client = GetTestClient(TestScenario.Images); + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-3"); string prompt = "An isolated stop sign."; @@ -76,7 +56,7 @@ public async Task GenerationWithOptionsWorks() [Test] public async Task GenerationWithBytesResponseWorks() { - ImageClient client = GetTestClient(TestScenario.Images); + ImageClient client = GetTestClient(TestScenario.Images, "dall-e-3"); string prompt = "An isolated stop sign."; @@ -97,7 +77,7 @@ public async Task GenerationWithBytesResponseWorks() [Test] public void GenerateImageCanParseServiceError() { - ImageClient client = new("dall-e-3", new ApiKeyCredential("fake_key")); + ImageClient client = new("gpt-image-1", new ApiKeyCredential("fake_key")); string prompt = "An isolated stop sign."; ClientResultException ex = null; @@ -120,9 +100,15 @@ public async Task GenerationOfMultipleImagesWorks() string prompt = "An isolated stop sign."; + ImageGenerationOptions options = new() + { + ResponseFormat = GeneratedImageFormat.Uri, + Size = GeneratedImageSize.W256xH256 + }; + GeneratedImageCollection images = IsAsync - ? await client.GenerateImagesAsync(prompt, 2) - : client.GenerateImages(prompt, 2); + ? await client.GenerateImagesAsync(prompt, 2, options) + : client.GenerateImages(prompt, 2, options); long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); @@ -140,18 +126,13 @@ public async Task GenerationOfMultipleImagesWorks() [Test] public async Task GenerationOfMultipleImagesWithBytesResponseWorks() { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); + ImageClient client = GetTestClient(TestScenario.Images); string prompt = "An isolated stop sign."; - ImageGenerationOptions options = new() - { - ResponseFormat = GeneratedImageFormat.Bytes - }; - GeneratedImageCollection images = IsAsync - ? await client.GenerateImagesAsync(prompt, 2, options) - : client.GenerateImages(prompt, 2, options); + ? await client.GenerateImagesAsync(prompt, 2) + : client.GenerateImages(prompt, 2); long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); @@ -169,7 +150,7 @@ public async Task GenerationOfMultipleImagesWithBytesResponseWorks() [Test] public void GenerateImagesCanParseServiceError() { - ImageClient client = new("dall-e-3", new ApiKeyCredential("fake_key")); + ImageClient client = new("gpt-image-1", new ApiKeyCredential("fake_key")); string prompt = "An isolated stop sign."; ClientResultException ex = null; @@ -185,824 +166,41 @@ public void GenerateImagesCanParseServiceError() Assert.That(ex.Status, Is.EqualTo(401)); } - #endregion - - #region GenerateImageEdits - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateImageEditWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - - string maskFilename = "images_empty_room_with_mask.png"; - string maskImagePath = Path.Combine("Assets", maskFilename); - GeneratedImage image = null; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream mask = File.OpenRead(maskImagePath); - - image = IsAsync - ? await client.GenerateImageEditAsync(mask, maskFilename, CatPrompt) - : client.GenerateImageEdit(mask, maskFilename, CatPrompt); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - image = IsAsync - ? await client.GenerateImageEditAsync(maskImagePath, CatPrompt) - : client.GenerateImageEdit(maskImagePath, CatPrompt); - } - else - { - Assert.Fail("Invalid source kind."); - } - - Assert.That(image.ImageUri, Is.Not.Null); - Assert.That(image.ImageBytes, Is.Null); - - Console.WriteLine(image.ImageUri.AbsoluteUri); - - ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateImageEditWithBytesResponseWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - - string maskFilename = "images_empty_room_with_mask.png"; - string maskImagePath = Path.Combine("Assets", maskFilename); - GeneratedImage image = null; - - ImageEditOptions options = new() - { - ResponseFormat = GeneratedImageFormat.Bytes - }; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream mask = File.OpenRead(maskImagePath); - - image = IsAsync - ? await client.GenerateImageEditAsync(mask, maskFilename, CatPrompt, options) - : client.GenerateImageEdit(mask, maskFilename, CatPrompt, options); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - image = IsAsync - ? await client.GenerateImageEditAsync(maskImagePath, CatPrompt, options) - : client.GenerateImageEdit(maskImagePath, CatPrompt, options); - } - else - { - Assert.Fail("Invalid source kind."); - } - - Assert.That(image.ImageUri, Is.Null); - Assert.That(image.ImageBytes, Is.Not.Null); - - ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - - [Test] - public void GenerateImageEditFromStreamCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string maskFilename = "images_empty_room_with_mask.png"; - string maskImagePath = Path.Combine("Assets", maskFilename); - using FileStream mask = File.OpenRead(maskImagePath); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditAsync(mask, maskFilename, CatPrompt)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageEdit(mask, maskFilename, CatPrompt)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - [Test] - public void GenerateImageEditFromPathCanParseServiceError() + public async Task GptImage1Works() { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string maskFilename = "images_empty_room_with_mask.png"; - string maskImagePath = Path.Combine("Assets", maskFilename); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditAsync(maskImagePath, CatPrompt)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageEdit(maskImagePath, CatPrompt)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateImageEditWithMaskFileWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - - string originalImageFilename = "images_empty_room.png"; - string maskFilename = "images_empty_room_with_mask.png"; - string originalImagePath = Path.Combine("Assets", originalImageFilename); - string maskImagePath = Path.Combine("Assets", maskFilename); - GeneratedImage image = null; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream originalImage = File.OpenRead(originalImagePath); - using FileStream mask = File.OpenRead(maskImagePath); - - image = IsAsync - ? await client.GenerateImageEditAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename) - : client.GenerateImageEdit(mask, maskFilename, CatPrompt); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - image = IsAsync - ? await client.GenerateImageEditAsync(originalImagePath, CatPrompt, maskImagePath) - : client.GenerateImageEdit(maskImagePath, CatPrompt, maskImagePath); - } - else - { - Assert.Fail("Invalid source kind."); - } - - Assert.That(image.ImageUri, Is.Not.Null); - Assert.That(image.ImageBytes, Is.Null); - - Console.WriteLine(image.ImageUri.AbsoluteUri); - - ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateImageEditWithMaskFileWithBytesResponseWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - - string originalImageFilename = "images_empty_room.png"; - string maskFilename = "images_empty_room_with_mask.png"; - string originalImagePath = Path.Combine("Assets", originalImageFilename); - string maskImagePath = Path.Combine("Assets", maskFilename); - GeneratedImage image = null; - - ImageEditOptions options = new() - { - ResponseFormat = GeneratedImageFormat.Bytes - }; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream originalImage = File.OpenRead(originalImagePath); - using FileStream mask = File.OpenRead(maskImagePath); - - image = IsAsync - ? await client.GenerateImageEditAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, options) - : client.GenerateImageEdit(mask, maskFilename, CatPrompt, options); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - image = IsAsync - ? await client.GenerateImageEditAsync(originalImagePath, CatPrompt, maskImagePath, options) - : client.GenerateImageEdit(maskImagePath, CatPrompt, maskImagePath, options); - } - else - { - Assert.Fail("Invalid source kind."); - } - - Assert.That(image.ImageUri, Is.Null); - Assert.That(image.ImageBytes, Is.Not.Null); - - ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - - [Test] - public void GenerateImageEditWithMaskFileFromStreamCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string originalImageFilename = "images_empty_room.png"; - string maskFilename = "images_empty_room_with_mask.png"; - string originalImagePath = Path.Combine("Assets", originalImageFilename); - string maskImagePath = Path.Combine("Assets", maskFilename); - using FileStream originalImage = File.OpenRead(originalImagePath); - using FileStream mask = File.OpenRead(maskImagePath); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageEdit(originalImage, originalImageFilename, CatPrompt, mask, maskFilename)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - public void GenerateImageEditWithMaskFileFromPathCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string originalImageFilename = "images_empty_room.png"; - string maskFilename = "images_empty_room_with_mask.png"; - string originalImagePath = Path.Combine("Assets", originalImageFilename); - string maskImagePath = Path.Combine("Assets", maskFilename); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditAsync(originalImagePath, CatPrompt, maskImagePath)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageEdit(originalImagePath, CatPrompt, maskImagePath)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateMultipleImageEditsWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - - string maskFilename = "images_empty_room_with_mask.png"; - string maskImagePath = Path.Combine("Assets", maskFilename); - GeneratedImageCollection images = null; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream mask = File.OpenRead(maskImagePath); - - images = IsAsync - ? await client.GenerateImageEditsAsync(mask, maskFilename, CatPrompt, 2) - : client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - images = IsAsync - ? await client.GenerateImageEditsAsync(maskImagePath, CatPrompt, 2) - : client.GenerateImageEdits(maskImagePath, CatPrompt, 2); - } - else - { - Assert.Fail("Invalid source kind."); - } - - long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); - - Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); - Assert.That(images.Count, Is.EqualTo(2)); - - foreach (GeneratedImage image in images) - { - Assert.That(image.ImageUri, Is.Not.Null); - Assert.That(image.ImageBytes, Is.Null); - Console.WriteLine(image.ImageUri.AbsoluteUri); - ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateMultipleImageEditsWithBytesResponseWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - - string maskFilename = "images_empty_room_with_mask.png"; - string maskImagePath = Path.Combine("Assets", maskFilename); - GeneratedImageCollection images = null; - - ImageEditOptions options = new() - { - ResponseFormat = GeneratedImageFormat.Bytes - }; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream mask = File.OpenRead(maskImagePath); - - images = IsAsync - ? await client.GenerateImageEditsAsync(mask, maskFilename, CatPrompt, 2, options) - : client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2, options); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - images = IsAsync - ? await client.GenerateImageEditsAsync(maskImagePath, CatPrompt, 2, options) - : client.GenerateImageEdits(maskImagePath, CatPrompt, 2, options); - } - else - { - Assert.Fail("Invalid source kind."); - } - - long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); - - Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); - Assert.That(images.Count, Is.EqualTo(2)); - - foreach (GeneratedImage image in images) - { - Assert.That(image.ImageUri, Is.Null); - Assert.That(image.ImageBytes, Is.Not.Null); - ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - } - - [Test] - public void GenerateMultipleImageEditsFromStreamCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string maskFilename = "images_empty_room_with_mask.png"; - string maskImagePath = Path.Combine("Assets", maskFilename); - using FileStream mask = File.OpenRead(maskImagePath); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditsAsync(mask, maskFilename, CatPrompt, 2)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - public void GenerateMultipleImageEditsFromPathCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string maskFilename = "images_empty_room_with_mask.png"; - string maskImagePath = Path.Combine("Assets", maskFilename); - - ClientResultException ex = null; + ImageClient client = GetTestClient(TestScenario.Images, "gpt-image-1"); - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditsAsync(maskImagePath, CatPrompt, 2)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageEdits(maskImagePath, CatPrompt, 2)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateMultipleImageEditsWithMaskFileWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - - string originalImageFilename = "images_empty_room.png"; - string maskFilename = "images_empty_room_with_mask.png"; - string originalImagePath = Path.Combine("Assets", originalImageFilename); - string maskImagePath = Path.Combine("Assets", maskFilename); - GeneratedImageCollection images = null; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream originalImage = File.OpenRead(originalImagePath); - using FileStream mask = File.OpenRead(maskImagePath); - - images = IsAsync - ? await client.GenerateImageEditsAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, 2) - : client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - images = IsAsync - ? await client.GenerateImageEditsAsync(originalImagePath, CatPrompt, maskImagePath, 2) - : client.GenerateImageEdits(maskImagePath, CatPrompt, maskImagePath, 2); - } - else - { - Assert.Fail("Invalid source kind."); - } - - long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); - - Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); - Assert.That(images.Count, Is.EqualTo(2)); - - foreach (GeneratedImage image in images) - { - Assert.That(image.ImageUri, Is.Not.Null); - Assert.That(image.ImageBytes, Is.Null); - Console.WriteLine(image.ImageUri.AbsoluteUri); - ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateMultipleImageEditsWithMaskFileWithBytesResponseWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - - string originalImageFilename = "images_empty_room.png"; - string maskFilename = "images_empty_room_with_mask.png"; - string originalImagePath = Path.Combine("Assets", originalImageFilename); - string maskImagePath = Path.Combine("Assets", maskFilename); - GeneratedImageCollection images = null; - - ImageEditOptions options = new() - { - ResponseFormat = GeneratedImageFormat.Bytes - }; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream originalImage = File.OpenRead(originalImagePath); - using FileStream mask = File.OpenRead(maskImagePath); - - images = IsAsync - ? await client.GenerateImageEditsAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, 2, options) - : client.GenerateImageEdits(mask, maskFilename, CatPrompt, 2, options); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - images = IsAsync - ? await client.GenerateImageEditsAsync(originalImagePath, CatPrompt, maskImagePath, 2, options) - : client.GenerateImageEdits(maskImagePath, CatPrompt, maskImagePath, 2, options); - } - else - { - Assert.Fail("Invalid source kind."); - } - - long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); - - Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); - Assert.That(images.Count, Is.EqualTo(2)); - - foreach (GeneratedImage image in images) - { - Assert.That(image.ImageUri, Is.Null); - Assert.That(image.ImageBytes, Is.Not.Null); - ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - } - - [Test] - public void GenerateMultipleImageEditsWithMaskFileFromStreamCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string originalImageFilename = "images_empty_room.png"; - string maskFilename = "images_empty_room_with_mask.png"; - string originalImagePath = Path.Combine("Assets", originalImageFilename); - string maskImagePath = Path.Combine("Assets", maskFilename); - using FileStream originalImage = File.OpenRead(originalImagePath); - using FileStream mask = File.OpenRead(maskImagePath); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditsAsync(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, 2)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageEdits(originalImage, originalImageFilename, CatPrompt, mask, maskFilename, 2)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - public void GenerateMultipleImageEditsWithMaskFileFromPathCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string originalImageFilename = "images_empty_room.png"; - string maskFilename = "images_empty_room_with_mask.png"; - string originalImagePath = Path.Combine("Assets", originalImageFilename); - string maskImagePath = Path.Combine("Assets", maskFilename); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageEditsAsync(originalImagePath, CatPrompt, maskImagePath, 2)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageEdits(originalImagePath, CatPrompt, maskImagePath, 2)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - #endregion - - #region GenerateImageVariations - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateImageVariationWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - string imageFilename = "images_dog_and_cat.png"; - string imagePath = Path.Combine("Assets", imageFilename); - GeneratedImage image = null; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream imageFile = File.OpenRead(imagePath); - - image = IsAsync - ? await client.GenerateImageVariationAsync(imageFile, imageFilename) - : client.GenerateImageVariation(imageFile, imageFilename); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - image = IsAsync - ? await client.GenerateImageVariationAsync(imagePath) - : client.GenerateImageVariation(imagePath); - } - else - { - Assert.Fail("Invalid source kind."); - } - - Assert.That(image.ImageUri, Is.Not.Null); - Assert.That(image.ImageBytes, Is.Null); - - Console.WriteLine(image.ImageUri.AbsoluteUri); - - ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateImageVariationWithBytesResponseWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - string imageFilename = "images_dog_and_cat.png"; - string imagePath = Path.Combine("Assets", imageFilename); - GeneratedImage image = null; + string prompt = "An isolated stop sign."; - ImageVariationOptions options = new() + ImageGenerationOptions options = new() { - ResponseFormat = GeneratedImageFormat.Bytes + OutputFileFormat = GeneratedImageFileFormat.Webp, + OutputCompressionFactor = 42, + Background = GeneratedImageBackground.Transparent, + ModerationLevel = GeneratedImageModerationLevel.Low, + Size = GeneratedImageSize.W1024xH1536, }; - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream imageFile = File.OpenRead(imagePath); - - image = IsAsync - ? await client.GenerateImageVariationAsync(imageFile, imageFilename, options) - : client.GenerateImageVariation(imageFile, imageFilename, options); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - image = IsAsync - ? await client.GenerateImageVariationAsync(imagePath, options) - : client.GenerateImageVariation(imagePath, options); - } - else - { - Assert.Fail("Invalid source kind."); - } - - Assert.That(image.ImageUri, Is.Null); - Assert.That(image.ImageBytes, Is.Not.Null); - - ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - - [Test] - public void GenerateImageVariationFromStreamCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string imageFilename = "images_dog_and_cat.png"; - string imagePath = Path.Combine("Assets", imageFilename); - using FileStream imageFile = File.OpenRead(imagePath); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageVariationAsync(imageFile, imageFilename)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageVariation(imageFile, imageFilename)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - public void GenerateImageVariationFromPathCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string imageFilename = "images_dog_and_cat.png"; - string imagePath = Path.Combine("Assets", imageFilename); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageVariationAsync(imagePath)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageVariation(imagePath)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateMultipleImageVariationsWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - string imageFilename = "images_dog_and_cat.png"; - string imagePath = Path.Combine("Assets", imageFilename); - GeneratedImageCollection images = null; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream imageFile = File.OpenRead(imagePath); - - images = IsAsync - ? await client.GenerateImageVariationsAsync(imageFile, imageFilename, 2) - : client.GenerateImageVariations(imageFile, imageFilename, 2); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - images = IsAsync - ? await client.GenerateImageVariationsAsync(imagePath, 2) - : client.GenerateImageVariations(imagePath, 2); - } - else - { - Assert.Fail("Invalid source kind."); - } + GeneratedImageCollection images = IsAsync + ? await client.GenerateImagesAsync(prompt, 2, options) + : client.GenerateImages(prompt, 2, options); - long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); + long unixTime2025 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); - Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); + Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2025)); Assert.That(images.Count, Is.EqualTo(2)); - foreach (GeneratedImage image in images) - { - Assert.That(image.ImageUri, Is.Not.Null); - Assert.That(image.ImageBytes, Is.Null); - Console.WriteLine(image.ImageUri.AbsoluteUri); - ValidateGeneratedImage(image.ImageUri, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - } - - [Test] - [TestCaseSource(nameof(s_imageSourceKindSource))] - public async Task GenerateMultipleImageVariationsWithBytesResponseWorks(ImageSourceKind imageSourceKind) - { - ImageClient client = GetTestClient(TestScenario.Images, "dall-e-2"); - string imageFilename = "images_dog_and_cat.png"; - string imagePath = Path.Combine("Assets", imageFilename); - GeneratedImageCollection images = null; - - ImageVariationOptions options = new() - { - ResponseFormat = GeneratedImageFormat.Bytes - }; - - if (imageSourceKind == ImageSourceKind.UsingStream) - { - using FileStream imageFile = File.OpenRead(imagePath); - - images = IsAsync - ? await client.GenerateImageVariationsAsync(imageFile, imageFilename, 2, options) - : client.GenerateImageVariations(imageFile, imageFilename, 2, options); - } - else if (imageSourceKind == ImageSourceKind.UsingFilePath) - { - images = IsAsync - ? await client.GenerateImageVariationsAsync(imagePath, 2, options) - : client.GenerateImageVariations(imagePath, 2, options); - } - else - { - Assert.Fail("Invalid source kind."); - } - - long unixTime2024 = (new DateTimeOffset(2024, 01, 01, 0, 0, 0, TimeSpan.Zero)).ToUnixTimeSeconds(); - - Assert.That(images.CreatedAt.ToUnixTimeSeconds(), Is.GreaterThan(unixTime2024)); - Assert.That(images.Count, Is.EqualTo(2)); + Assert.That(images.Usage.InputTokenCount, Is.GreaterThan(0)); + Assert.That(images.Usage.OutputTokenCount, Is.GreaterThan(0)); + Assert.That(images.Usage.TotalTokenCount, Is.GreaterThan(0)); + Assert.That(images.Usage.InputTokenDetails.TextTokenCount, Is.GreaterThan(0)); + Assert.That(images.Usage.InputTokenDetails.ImageTokenCount, Is.EqualTo(0)); foreach (GeneratedImage image in images) { Assert.That(image.ImageUri, Is.Null); Assert.That(image.ImageBytes, Is.Not.Null); - ValidateGeneratedImage(image.ImageBytes, ["cat", "owl", "animal"], "Note that it likely depicts some sort of animal."); - } - } - - [Test] - public void GenerateMultipleImageVariationsFromStreamCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string imageFilename = "images_dog_and_cat.png"; - string imagePath = Path.Combine("Assets", imageFilename); - using FileStream imageFile = File.OpenRead(imagePath); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageVariationsAsync(imageFile, imageFilename, 2)); } - else - { - ex = Assert.Throws(() => client.GenerateImageVariations(imageFile, imageFilename, 2)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - [Test] - public void GenerateMultipleImageVariationsFromPathCanParseServiceError() - { - ImageClient client = new("dall-e-2", new ApiKeyCredential("fake_key")); - string imageFilename = "images_dog_and_cat.png"; - string imagePath = Path.Combine("Assets", imageFilename); - - ClientResultException ex = null; - - if (IsAsync) - { - ex = Assert.ThrowsAsync(async () => await client.GenerateImageVariationsAsync(imagePath, 2)); - } - else - { - ex = Assert.Throws(() => client.GenerateImageVariations(imagePath, 2)); - } - - Assert.That(ex.Status, Is.EqualTo(401)); - } - - #endregion - - private void ValidateGeneratedImage(Uri imageUri, IEnumerable possibleExpectedSubstrings, string descriptionHint = null) - { - ChatClient chatClient = GetTestClient(TestScenario.Chat); - IEnumerable messages = [ - new UserChatMessage( - ChatMessageContentPart.CreateTextPart($"Describe this image for me. {descriptionHint}"), - ChatMessageContentPart.CreateImagePart(imageUri)), - ]; - ChatCompletionOptions chatOptions = new() { MaxOutputTokenCount = 2048 }; - ClientResult result = chatClient.CompleteChat(messages, chatOptions); - - Assert.That(result.Value?.Content, Has.Count.EqualTo(1)); - string contentText = result.Value.Content[0].Text.ToLowerInvariant(); - - Assert.That(possibleExpectedSubstrings.Any(possibleExpectedSubstring => contentText.Contains(possibleExpectedSubstring))); - } - - private void ValidateGeneratedImage(BinaryData imageBytes, IEnumerable possibleExpectedSubstrings, string descriptionHint = null) - { - ChatClient chatClient = GetTestClient(TestScenario.Chat); - IEnumerable messages = [ - new UserChatMessage( - ChatMessageContentPart.CreateTextPart($"Describe this image for me. {descriptionHint}"), - ChatMessageContentPart.CreateImagePart(imageBytes, "image/png")), - ]; - ChatCompletionOptions chatOptions = new() { MaxOutputTokenCount = 2048 }; - ClientResult result = chatClient.CompleteChat(messages, chatOptions); - - Assert.That(result.Value?.Content, Has.Count.EqualTo(1)); - string contentText = result.Value.Content[0].Text.ToLowerInvariant(); - - Assert.That(possibleExpectedSubstrings.Any(possibleExpectedSubstring => contentText.Contains(possibleExpectedSubstring))); } } diff --git a/tests/OpenAI.Tests.csproj b/tests/OpenAI.Tests.csproj index 8776cc207..797a810ea 100644 --- a/tests/OpenAI.Tests.csproj +++ b/tests/OpenAI.Tests.csproj @@ -10,13 +10,6 @@ latest - - - - true - ..\src\OpenAI.snk - - @@ -29,4 +22,8 @@ + + + + \ No newline at end of file diff --git a/tests/Realtime/RealtimeProtocolTests.cs b/tests/Realtime/RealtimeProtocolTests.cs new file mode 100644 index 000000000..a04f829c3 --- /dev/null +++ b/tests/Realtime/RealtimeProtocolTests.cs @@ -0,0 +1,99 @@ +using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using NUnit.Framework; +using OpenAI.Chat; +using OpenAI.Realtime; +using OpenAI.Tests.Telemetry; +using OpenAI.Tests.Utility; +using System; +using System.ClientModel; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Threading; +using System.Threading.Tasks; +using static OpenAI.Tests.Telemetry.TestMeterListener; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Realtime; + +#pragma warning disable OPENAI002 + +[TestFixture(true)] +[TestFixture(false)] +public class RealtimeProtocolTests : RealtimeTestFixtureBase +{ + public RealtimeProtocolTests(bool isAsync) : base(isAsync) + { } + + [Test] + public async Task ProtocolCanConfigureSession() + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync(GetTestModel(), CancellationToken); + + BinaryData configureSessionCommand = BinaryData.FromString(""" + { + "type": "session.update", + "session": { + "turn_detection": null + } + } + """); + await session.SendCommandAsync(configureSessionCommand, CancellationOptions); + + List receivedCommands = []; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + BinaryData rawContentBytes = update.GetRawContent(); + JsonNode jsonNode = JsonNode.Parse(rawContentBytes); + string updateType = jsonNode["type"]?.GetValue(); + Assert.That(updateType, Is.Not.Null.And.Not.Empty); + + receivedCommands.Add(jsonNode); + + if (updateType == "error") + { + Assert.Fail($"Error encountered: {rawContentBytes.ToString()}"); + } + else if (updateType == "session.created") + { + BinaryData createResponseCommand = BinaryData.FromString(""" + { + "type": "response.create", + "response": { + "max_output_tokens": null + } + } + """); + await session.SendCommandAsync(createResponseCommand, CancellationOptions); + } + else if (updateType == "response.done") + { + break; + } + } + + List NodesOfType(string type) => receivedCommands.Where(command => command["type"].GetValue() == type).ToList(); + + Assert.That(NodesOfType("session.created"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("session.updated"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("response.created"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("response.done"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("response.output_item.added"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("conversation.item.created"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("response.content_part.added"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("response.audio_transcript.delta"), Has.Count.GreaterThan(0)); + Assert.That(NodesOfType("response.audio.delta"), Has.Count.GreaterThan(0)); + Assert.That(NodesOfType("response.audio_transcript.done"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("response.content_part.done"), Has.Count.EqualTo(1)); + Assert.That(NodesOfType("response.output_item.done"), Has.Count.EqualTo(1)); + } +} diff --git a/tests/Realtime/RealtimeSmokeTests.cs b/tests/Realtime/RealtimeSmokeTests.cs new file mode 100644 index 000000000..f57ee4856 --- /dev/null +++ b/tests/Realtime/RealtimeSmokeTests.cs @@ -0,0 +1,214 @@ +using NUnit.Framework; +using OpenAI.Realtime; +using System; +using System.ClientModel.Primitives; +using System.Linq; +using System.Text.Json.Nodes; + +namespace OpenAI.Tests.Realtime; + +#pragma warning disable OPENAI002 + +[TestFixture(false)] +[Category("Smoke")] +public class RealtimeSmokeTests : RealtimeTestFixtureBase +{ + public RealtimeSmokeTests(bool isAsync) : base(isAsync) + { } + + [Test] + public void ToolChoiceSerializationInSessionOptionsWorks() + { + foreach((ConversationToolChoice toolChoice, string expected) in new (ConversationToolChoice, string)[] + { + (null, "{}"), + (ConversationToolChoice.CreateNoneToolChoice(), @"{""tool_choice"":""none""}"), + (ConversationToolChoice.CreateAutoToolChoice(), @"{""tool_choice"":""auto""}"), + (ConversationToolChoice.CreateRequiredToolChoice(), @"{""tool_choice"":""required""}"), + (ConversationToolChoice.CreateFunctionToolChoice("foo"), @"""function"":{""name"":""foo""") + }) + { + ConversationSessionOptions options = new() + { + ToolChoice = toolChoice, + }; + Assert.That(ModelReaderWriter.Write(options).ToString(), Does.Contain(expected)); + } + + ConversationToolChoice mrwToolChoice = ModelReaderWriter.Read( + BinaryData.FromString(""" + { + "type":"some_manual_type" + } + """)); + Assert.That(mrwToolChoice.Kind, Is.EqualTo(ConversationToolChoiceKind.Unknown)); + Assert.That(ModelReaderWriter.Write(mrwToolChoice).ToString(), Does.Contain(@"""type"":""some_manual_type""")); + } + + [Test] + public void ItemCreation() + { + RealtimeItem messageItem = RealtimeItem.CreateUserMessage(["Hello, world!"]); + Assert.That(messageItem?.MessageContentParts?.Count, Is.EqualTo(1)); + Assert.That(messageItem.MessageContentParts[0].Text, Is.EqualTo("Hello, world!")); + } + + [Test] + public void OptionsSerializationWorks() + { + ConversationSessionOptions options = new() + { + ContentModalities = RealtimeContentModalities.Text, + InputAudioFormat = RealtimeAudioFormat.G711Alaw, + InputTranscriptionOptions = new InputTranscriptionOptions() + { + Model = "whisper-1", + }, + Instructions = "test instructions", + MaxOutputTokens = 42, + OutputAudioFormat = RealtimeAudioFormat.G711Ulaw, + Temperature = 0.42f, + ToolChoice = ConversationToolChoice.CreateFunctionToolChoice("test-function"), + Tools = + { + ConversationTool.CreateFunctionTool( + name: "test-function-tool-name", + description: "description of test function tool", + parameters: BinaryData.FromString(""" + { + "type": "object", + "properties": {} + } + """)), + }, + TurnDetectionOptions = TurnDetectionOptions.CreateServerVoiceActivityTurnDetectionOptions( + detectionThreshold: 0.42f, + prefixPaddingDuration: TimeSpan.FromMilliseconds(234), + silenceDuration: TimeSpan.FromMilliseconds(345)), + Voice = ConversationVoice.Echo, + }; + BinaryData serializedOptions = ModelReaderWriter.Write(options); + JsonNode jsonNode = JsonNode.Parse(serializedOptions.ToString()); + Assert.That(jsonNode["modalities"]?.AsArray()?.ToList(), Has.Count.EqualTo(1)); + Assert.That(jsonNode["modalities"].AsArray().First().GetValue(), Is.EqualTo("text")); + Assert.That(jsonNode["input_audio_format"]?.GetValue(), Is.EqualTo("g711_alaw")); + Assert.That(jsonNode["input_audio_transcription"]?["model"]?.GetValue(), Is.EqualTo("whisper-1")); + Assert.That(jsonNode["instructions"]?.GetValue(), Is.EqualTo("test instructions")); + Assert.That(jsonNode["max_response_output_tokens"]?.GetValue(), Is.EqualTo(42)); + Assert.That(jsonNode["output_audio_format"]?.GetValue(), Is.EqualTo("g711_ulaw")); + Assert.That(jsonNode["temperature"]?.GetValue(), Is.EqualTo(0.42f)); + Assert.That(jsonNode["tools"]?.AsArray()?.ToList(), Has.Count.EqualTo(1)); + Assert.That(jsonNode["tools"].AsArray().First()["name"]?.GetValue(), Is.EqualTo("test-function-tool-name")); + Assert.That(jsonNode["tools"].AsArray().First()["description"]?.GetValue(), Is.EqualTo("description of test function tool")); + Assert.That(jsonNode["tools"].AsArray().First()["parameters"]?["type"]?.GetValue(), Is.EqualTo("object")); + Assert.That(jsonNode["tool_choice"]?["function"]?["name"]?.GetValue(), Is.EqualTo("test-function")); + Assert.That(jsonNode["turn_detection"]?["threshold"]?.GetValue(), Is.EqualTo(0.42f)); + Assert.That(jsonNode["turn_detection"]?["prefix_padding_ms"]?.GetValue(), Is.EqualTo(234)); + Assert.That(jsonNode["turn_detection"]?["silence_duration_ms"]?.GetValue(), Is.EqualTo(345)); + Assert.That(jsonNode["voice"]?.GetValue(), Is.EqualTo("echo")); + ConversationSessionOptions deserializedOptions = ModelReaderWriter.Read(serializedOptions); + Assert.That(deserializedOptions.ContentModalities.HasFlag(RealtimeContentModalities.Text)); + Assert.That(deserializedOptions.ContentModalities.HasFlag(RealtimeContentModalities.Audio), Is.False); + Assert.That(deserializedOptions.InputAudioFormat, Is.EqualTo(RealtimeAudioFormat.G711Alaw)); + Assert.That(deserializedOptions.InputTranscriptionOptions?.Model, Is.EqualTo(InputTranscriptionModel.Whisper1)); + Assert.That(deserializedOptions.Instructions, Is.EqualTo("test instructions")); + Assert.That(deserializedOptions.MaxOutputTokens.NumericValue, Is.EqualTo(42)); + Assert.That(deserializedOptions.OutputAudioFormat, Is.EqualTo(RealtimeAudioFormat.G711Ulaw)); + Assert.That(deserializedOptions.Tools, Has.Count.EqualTo(1)); + Assert.That(deserializedOptions.Tools[0].Kind, Is.EqualTo(ConversationToolKind.Function)); + Assert.That((deserializedOptions.Tools[0] as ConversationFunctionTool)?.Name, Is.EqualTo("test-function-tool-name")); + Assert.That((deserializedOptions.Tools[0] as ConversationFunctionTool)?.Description, Is.EqualTo("description of test function tool")); + Assert.That((deserializedOptions.Tools[0] as ConversationFunctionTool)?.Parameters?.ToString(), Does.Contain("properties")); + Assert.That(deserializedOptions.ToolChoice?.Kind, Is.EqualTo(ConversationToolChoiceKind.Function)); + Assert.That(deserializedOptions.ToolChoice?.FunctionName, Is.EqualTo("test-function")); + Assert.That(deserializedOptions.TurnDetectionOptions?.Kind, Is.EqualTo(TurnDetectionKind.ServerVoiceActivityDetection)); + Assert.That(deserializedOptions.Voice, Is.EqualTo(ConversationVoice.Echo)); + + ConversationSessionOptions emptyOptions = new(); + Assert.That(emptyOptions.ContentModalities.HasFlag(RealtimeContentModalities.Audio), Is.False); + Assert.That(ModelReaderWriter.Write(emptyOptions).ToString(), Does.Not.Contain("modal")); + emptyOptions.ContentModalities |= RealtimeContentModalities.Audio; + Assert.That(emptyOptions.ContentModalities.HasFlag(RealtimeContentModalities.Audio), Is.True); + Assert.That(emptyOptions.ContentModalities.HasFlag(RealtimeContentModalities.Text), Is.False); + Assert.That(ModelReaderWriter.Write(emptyOptions).ToString(), Does.Contain("modal")); + } + + [Test] + public void MaxTokensSerializationWorks() + { + // Implicit omission + ConversationSessionOptions options = new() { }; + BinaryData serializedOptions = ModelReaderWriter.Write(options); + Assert.That(serializedOptions.ToString(), Does.Not.Contain("max_response_output_tokens")); + + // Explicit omission + options = new() + { + MaxOutputTokens = null + }; + serializedOptions = ModelReaderWriter.Write(options); + Assert.That(serializedOptions.ToString(), Does.Not.Contain("max_response_output_tokens")); + + // Explicit default (null) + options = new() + { + MaxOutputTokens = ConversationMaxTokensChoice.CreateDefaultMaxTokensChoice() + }; + serializedOptions = ModelReaderWriter.Write(options); + Assert.That(serializedOptions.ToString(), Does.Contain(@"""max_response_output_tokens"":null")); + + // Numeric literal + options = new() + { + MaxOutputTokens = 42, + }; + serializedOptions = ModelReaderWriter.Write(options); + Assert.That(serializedOptions.ToString(), Does.Contain(@"""max_response_output_tokens"":42")); + + // Numeric by factory + options = new() + { + MaxOutputTokens = ConversationMaxTokensChoice.CreateNumericMaxTokensChoice(42) + }; + serializedOptions = ModelReaderWriter.Write(options); + Assert.That(serializedOptions.ToString(), Does.Contain(@"""max_response_output_tokens"":42")); + } + + [Test] + public void TurnDetectionSerializationWorks() + { + // Implicit omission + ConversationSessionOptions sessionOptions = new(); + BinaryData serializedOptions = ModelReaderWriter.Write(sessionOptions); + Assert.That(serializedOptions.ToString(), Does.Not.Contain("turn_detection")); + + sessionOptions = new() + { + TurnDetectionOptions = TurnDetectionOptions.CreateDisabledTurnDetectionOptions(), + }; + serializedOptions = ModelReaderWriter.Write(sessionOptions); + Assert.That(serializedOptions.ToString(), Does.Contain(@"""turn_detection"":null")); + + sessionOptions = new() + { + TurnDetectionOptions = TurnDetectionOptions.CreateServerVoiceActivityTurnDetectionOptions( + detectionThreshold: 0.42f) + }; + serializedOptions = ModelReaderWriter.Write(sessionOptions); + JsonNode serializedNode = JsonNode.Parse(serializedOptions); + Assert.That(serializedNode["turn_detection"]?["type"]?.GetValue(), Is.EqualTo("server_vad")); + Assert.That(serializedNode["turn_detection"]?["threshold"]?.GetValue(), Is.EqualTo(0.42f)); + } + + [Test] + public void UnknownCommandSerializationWorks() + { + BinaryData serializedUnknownCommand = BinaryData.FromString(""" + { + "type": "unknown_command_type_for_test" + } + """); + RealtimeUpdate deserializedUpdate = ModelReaderWriter.Read(serializedUnknownCommand); + Assert.That(deserializedUpdate, Is.Not.Null); + } +} diff --git a/tests/Realtime/RealtimeTestFixtureBase.cs b/tests/Realtime/RealtimeTestFixtureBase.cs new file mode 100644 index 000000000..22b39417c --- /dev/null +++ b/tests/Realtime/RealtimeTestFixtureBase.cs @@ -0,0 +1,69 @@ +using NUnit.Framework; +using OpenAI.Realtime; +using OpenAI.Tests.Utility; +using System; +using System.ClientModel.Primitives; +using System.Diagnostics; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Threading; +using static OpenAI.Tests.TestHelpers; + +namespace OpenAI.Tests.Realtime; + +#pragma warning disable OPENAI002 + +[Parallelizable(ParallelScope.All)] +[Category("Conversation")] +public class RealtimeTestFixtureBase : SyncAsyncTestBase +{ + public CancellationTokenSource CancellationTokenSource { get; } + public CancellationToken CancellationToken => CancellationTokenSource?.Token ?? default; + public RequestOptions CancellationOptions => new() { CancellationToken = CancellationToken }; + + public RealtimeTestFixtureBase(bool isAsync) : base(isAsync) + { + CancellationTokenSource = new(); + if (!Debugger.IsAttached) + { + CancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(15)); + } + } + + public static string GetTestModel() => GetModelForScenario(TestScenario.Realtime); + + public static RealtimeClient GetTestClient() + { + RealtimeClient client = GetTestClient(TestScenario.Realtime); + client.OnSendingCommand += (_, data) => PrintMessageData(data, "> "); + client.OnReceivingCommand += (_, data) => PrintMessageData(data, " < "); + return client; + } + + public static void PrintMessageData(BinaryData data, string prefix = "") + { + JsonNode jsonNode = JsonNode.Parse(data.ToString()); + + foreach ((string labelKey, string labelValue, string dataKey) in new (string, string, string)[] + { + ("type", "input_audio_buffer.append", "audio"), + ("type", "audio", "data"), + ("event", "add_user_audio", "data"), + ("type", "response.audio.delta", "delta") + }) + { + if (jsonNode[labelKey]?.GetValue() == labelValue) + { + string rawBase64Data = jsonNode[dataKey]?.GetValue(); + if (rawBase64Data is not null) + { + byte[] base64Data = rawBase64Data == null ? [] : Convert.FromBase64String(rawBase64Data); + jsonNode[dataKey] = $"<{base64Data.Length} bytes>"; + } + } + } + + string rawMessage = jsonNode.ToJsonString(new JsonSerializerOptions()); + Console.WriteLine($"{prefix}{rawMessage}"); + } +} diff --git a/tests/Realtime/RealtimeTests.cs b/tests/Realtime/RealtimeTests.cs new file mode 100644 index 000000000..1be6a9078 --- /dev/null +++ b/tests/Realtime/RealtimeTests.cs @@ -0,0 +1,725 @@ +using NUnit.Framework; +using OpenAI.Realtime; +using System; +using System.Buffers; +using System.ClientModel.Primitives; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace OpenAI.Tests.Realtime; + +#pragma warning disable OPENAI002 + +[TestFixture(true)] +[TestFixture(false)] +public class RealtimeTests : RealtimeTestFixtureBase +{ + public RealtimeTests(bool isAsync) : base(isAsync) { } + + [Test] + public async Task CanConfigureSession() + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync( + GetTestModel(), + CancellationToken); + + ConversationSessionOptions sessionOptions = new() + { + Instructions = "You are a helpful assistant.", + TurnDetectionOptions = TurnDetectionOptions.CreateDisabledTurnDetectionOptions(), + OutputAudioFormat = RealtimeAudioFormat.G711Ulaw, + MaxOutputTokens = 2048, + }; + + await session.ConfigureConversationSessionAsync(sessionOptions, CancellationToken); + ConversationResponseOptions responseOverrideOptions = new() + { + ContentModalities = RealtimeContentModalities.Text, + }; + if (!client.GetType().IsSubclassOf(typeof(RealtimeClient))) + { + responseOverrideOptions.MaxOutputTokens = ConversationMaxTokensChoice.CreateInfiniteMaxTokensChoice(); + } + await session.AddItemAsync( + RealtimeItem.CreateUserMessage(["Hello, assistant! Tell me a joke."]), + CancellationToken); + await session.StartResponseAsync(responseOverrideOptions, CancellationToken); + + List receivedUpdates = []; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + receivedUpdates.Add(update); + + if (update is RealtimeErrorUpdate errorUpdate) + { + Assert.That(errorUpdate.Kind, Is.EqualTo(RealtimeUpdateKind.Error)); + Assert.Fail($"Error: {ModelReaderWriter.Write(errorUpdate)}"); + } + else if ((update is OutputDeltaUpdate deltaUpdate && deltaUpdate.AudioBytes is not null) + || update is OutputAudioFinishedUpdate) + { + Assert.Fail($"Audio content streaming unexpected after configuring response-level text-only modalities"); + } + else if (update is ConversationSessionConfiguredUpdate sessionConfiguredUpdate) + { + Assert.That(sessionConfiguredUpdate.OutputAudioFormat == sessionOptions.OutputAudioFormat); + Assert.That(sessionConfiguredUpdate.TurnDetectionOptions.Kind, Is.EqualTo(TurnDetectionKind.Disabled)); + Assert.That(sessionConfiguredUpdate.MaxOutputTokens.NumericValue, Is.EqualTo(sessionOptions.MaxOutputTokens.NumericValue)); + } + else if (update is ResponseFinishedUpdate turnFinishedUpdate) + { + break; + } + } + + List GetReceivedUpdates() where T : RealtimeUpdate + => receivedUpdates.Select(update => update as T) + .Where(update => update is not null) + .ToList(); + + Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); + Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); + Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); + Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); + Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); + } + + [Test] + public async Task TextOnlyWorks() + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync(GetTestModel(), CancellationToken); + await session.AddItemAsync( + RealtimeItem.CreateUserMessage(["Hello, world!"]), + cancellationToken: CancellationToken); + await session.StartResponseAsync(CancellationToken); + + StringBuilder responseBuilder = new(); + bool gotResponseDone = false; + bool gotRateLimits = false; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + if (update is ConversationSessionStartedUpdate sessionStartedUpdate) + { + Assert.That(sessionStartedUpdate.SessionId, Is.Not.Null.And.Not.Empty); + } + if (update is OutputDeltaUpdate deltaUpdate) + { + responseBuilder.Append(deltaUpdate.AudioTranscript); + } + + if (update is ItemCreatedUpdate itemCreatedUpdate) + { + if (itemCreatedUpdate.MessageRole == ConversationMessageRole.Assistant) + { + // The assistant-created item should be streamed and should not have content yet when acknowledged + Assert.That(itemCreatedUpdate.MessageContentParts, Has.Count.EqualTo(0)); + } + else if (itemCreatedUpdate.MessageRole == ConversationMessageRole.User) + { + // When acknowledging an item added by the client (user), the text should already be there + Assert.That(itemCreatedUpdate.MessageContentParts, Has.Count.EqualTo(1)); + Assert.That(itemCreatedUpdate.MessageContentParts[0].Text, Is.EqualTo("Hello, world!")); + } + else + { + Assert.Fail($"Test didn't expect an acknowledged item with role: {itemCreatedUpdate.MessageRole}"); + } + } + + if (update is ResponseFinishedUpdate responseFinishedUpdate) + { + Assert.That(responseFinishedUpdate.CreatedItems, Has.Count.GreaterThan(0)); + Assert.That(responseFinishedUpdate.Usage?.TotalTokenCount, Is.GreaterThan(0)); + Assert.That(responseFinishedUpdate.Usage.InputTokenCount, Is.GreaterThan(0)); + Assert.That(responseFinishedUpdate.Usage.OutputTokenCount, Is.GreaterThan(0)); + gotResponseDone = true; + break; + } + + if (update is RateLimitsUpdate rateLimitsUpdate) + { + Assert.That(rateLimitsUpdate.AllDetails, Has.Count.EqualTo(2)); + Assert.That(rateLimitsUpdate.TokenDetails, Is.Not.Null); + Assert.That(rateLimitsUpdate.TokenDetails.Name, Is.EqualTo("tokens")); + Assert.That(rateLimitsUpdate.TokenDetails.MaximumCount, Is.GreaterThan(0)); + Assert.That(rateLimitsUpdate.TokenDetails.RemainingCount, Is.GreaterThan(0)); + Assert.That(rateLimitsUpdate.TokenDetails.RemainingCount, Is.LessThan(rateLimitsUpdate.TokenDetails.MaximumCount)); + Assert.That(rateLimitsUpdate.TokenDetails.TimeUntilReset, Is.GreaterThan(TimeSpan.Zero)); + Assert.That(rateLimitsUpdate.RequestDetails, Is.Not.Null); + gotRateLimits = true; + } + } + + Assert.That(responseBuilder.ToString(), Is.Not.Null.Or.Empty); + Assert.That(gotResponseDone, Is.True); + + if (!client.GetType().IsSubclassOf(typeof(RealtimeClient))) + { + // Temporarily assume that subclients don't support rate limit commands + Assert.That(gotRateLimits, Is.True); + } + } + + [Test] + public async Task TranscriptionOnlyWorks() + { + RealtimeClient client = GetTestClient(); + TranscriptionSessionOptions options = new() + { + InputAudioFormat = RealtimeAudioFormat.Pcm16, + TurnDetectionOptions = TurnDetectionOptions.CreateServerVoiceActivityTurnDetectionOptions(), + InputNoiseReductionOptions = InputNoiseReductionOptions.CreateNearFieldOptions(), + InputTranscriptionOptions = new() + { + Model = "gpt-4o-mini-transcribe", + }, + }; + RealtimeSession session = await client.StartTranscriptionSessionAsync(CancellationToken); + await session.ConfigureTranscriptionSessionAsync(options, CancellationToken); + + // Sending the audio in a delayed stream allows us to validate bidirectional behavior, i.e. + // transcription data arriving while audio is still being sent. + string inputPath = Path.Join("Assets", "realtime_api_description_pcm16_24khz_mono.wav"); + using TestDelayedFileReadStream inputStream = new(inputPath, TimeSpan.FromMilliseconds(50), readsBeforeDelay: 2); + _ = session.SendInputAudioAsync(inputStream, CancellationToken); + + Stopwatch stopwatch = Stopwatch.StartNew(); + + List<(RealtimeUpdate, TimeSpan, long)> updatesReceived = []; + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + updatesReceived.Add((update, stopwatch.Elapsed, inputStream.Position)); + + if (update is InputAudioTranscriptionFinishedUpdate transcriptionFinishedUpdate + && transcriptionFinishedUpdate.Transcript.Contains("the following URL")) + { + break; + } + } + + List<(TranscriptionSessionConfiguredUpdate, TimeSpan, long)> sessionConfiguredUpdates + = updatesReceived + .Where(tuple => tuple.Item1.Kind == RealtimeUpdateKind.TranscriptionSessionConfigured) + .Select(tuple => (tuple.Item1 as TranscriptionSessionConfiguredUpdate, tuple.Item2, tuple.Item3)) + .ToList(); + Assert.That(sessionConfiguredUpdates, Has.Count.EqualTo(1)); + List<(InputAudioTranscriptionDeltaUpdate, TimeSpan, long)> transcriptionDeltaUpdates + = updatesReceived + .Where(tuple => tuple.Item1.Kind == RealtimeUpdateKind.InputTranscriptionDelta) + .Select(tuple => (tuple.Item1 as InputAudioTranscriptionDeltaUpdate, tuple.Item2, tuple.Item3)) + .ToList(); + Assert.That(transcriptionDeltaUpdates, Has.Count.GreaterThan(0)); + List<(InputAudioTranscriptionFinishedUpdate, TimeSpan, long)> transcriptionFinishedUpdates + = updatesReceived + .Where(tuple => tuple.Item1.Kind == RealtimeUpdateKind.InputTranscriptionFinished) + .Select(tuple => (tuple.Item1 as InputAudioTranscriptionFinishedUpdate, tuple.Item2, tuple.Item3)) + .ToList(); + Assert.That(transcriptionDeltaUpdates, Has.Count.GreaterThan(0)); + string fullTranscriptFromDeltas + = String.Join( + string.Empty, + transcriptionDeltaUpdates + .Select(deltaTuple => deltaTuple.Item1.Delta)); + Assert.That(fullTranscriptFromDeltas.ToLower(), Does.Contain("stream the transcription")); + + Assert.That(transcriptionDeltaUpdates.Last().Item3, Is.GreaterThan(transcriptionDeltaUpdates.First().Item3)); + Assert.That(transcriptionFinishedUpdates.Last().Item3, Is.GreaterThan(transcriptionDeltaUpdates.First().Item3)); + } + + [Test] + public async Task ItemManipulationWorks() + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync( + GetTestModel(), + CancellationToken); + + await session.ConfigureConversationSessionAsync( + new ConversationSessionOptions() + { + TurnDetectionOptions = TurnDetectionOptions.CreateDisabledTurnDetectionOptions(), + ContentModalities = RealtimeContentModalities.Text, + }, + CancellationToken); + + await session.AddItemAsync( + RealtimeItem.CreateUserMessage(["The first special word you know about is 'aardvark'."]), + CancellationToken); + await session.AddItemAsync( + RealtimeItem.CreateUserMessage(["The next special word you know about is 'banana'."]), + CancellationToken); + await session.AddItemAsync( + RealtimeItem.CreateUserMessage(["The next special word you know about is 'coconut'."]), + CancellationToken); + + bool gotSessionStarted = false; + bool gotSessionConfigured = false; + bool gotResponseFinished = false; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + if (update is ConversationSessionStartedUpdate) + { + gotSessionStarted = true; + } + + if (update is ConversationSessionConfiguredUpdate sessionConfiguredUpdate) + { + Assert.That(sessionConfiguredUpdate.TurnDetectionOptions.Kind, Is.EqualTo(TurnDetectionKind.Disabled)); + Assert.That(sessionConfiguredUpdate.ContentModalities.HasFlag(RealtimeContentModalities.Text), Is.True); + Assert.That(sessionConfiguredUpdate.ContentModalities.HasFlag(RealtimeContentModalities.Audio), Is.False); + gotSessionConfigured = true; + } + + if (update is ItemCreatedUpdate itemCreatedUpdate) + { + if (itemCreatedUpdate.MessageContentParts.Count > 0 + && itemCreatedUpdate.MessageContentParts[0].Text.Contains("banana")) + { + await session.DeleteItemAsync(itemCreatedUpdate.ItemId, CancellationToken); + await session.AddItemAsync( + RealtimeItem.CreateUserMessage(["What's the second special word you know about?"]), + CancellationToken); + await session.StartResponseAsync(CancellationToken); + } + } + + if (update is ResponseFinishedUpdate responseFinishedUpdate) + { + Assert.That(responseFinishedUpdate.CreatedItems.Count, Is.EqualTo(1)); + Assert.That(responseFinishedUpdate.CreatedItems[0].MessageContentParts.Count, Is.EqualTo(1)); + Assert.That(responseFinishedUpdate.CreatedItems[0].MessageContentParts[0].Text, Does.Contain("coconut")); + Assert.That(responseFinishedUpdate.CreatedItems[0].MessageContentParts[0].Text, Does.Not.Contain("banana")); + gotResponseFinished = true; + break; + } + } + + Assert.That(gotSessionStarted, Is.True); + if (!client.GetType().IsSubclassOf(typeof(RealtimeClient))) + { + Assert.That(gotSessionConfigured, Is.True); + } + Assert.That(gotResponseFinished, Is.True); + } + + [Test] + public async Task AudioStreamConvenienceBlocksCorrectly() + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync(GetTestModel(), CancellationToken); + + string inputAudioFilePath = Path.Join("Assets", "realtime_whats_the_weather_pcm16_24khz_mono.wav"); + using TestDelayedFileReadStream delayedStream = new(inputAudioFilePath, TimeSpan.FromMilliseconds(200), readsBeforeDelay: 2); + _ = session.SendInputAudioAsync(delayedStream, CancellationToken); + + bool gotSpeechStarted = false; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + if (update is InputAudioSpeechStartedUpdate) + { + gotSpeechStarted = true; + Assert.ThrowsAsync( + async () => + { + using MemoryStream dummyStream = new(); + await session.SendInputAudioAsync(dummyStream, CancellationToken); + }, + "Sending a Stream while another Stream is being sent should throw!"); + Assert.ThrowsAsync( + async () => + { + BinaryData dummyData = BinaryData.FromString("hello, world! this isn't audio."); + await session.SendInputAudioAsync(dummyData, CancellationToken); + }, + "Sending BinaryData while a Stream is being sent should throw!"); + break; + } + } + + Assert.That(gotSpeechStarted, Is.True); + } + + [Test] + [TestCase(TestAudioSendType.WithAudioStreamHelper)] + [TestCase(TestAudioSendType.WithManualAudioChunks)] + public async Task AudioWithToolsWorks(TestAudioSendType audioSendType) + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync(GetTestModel(), CancellationToken); + + ConversationFunctionTool getWeatherTool = new("get_weather_for_location") + { + Description = "gets the weather for a location", + Parameters = BinaryData.FromString(""" + { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state e.g. San Francisco, CA" + }, + "unit": { + "type": "string", + "enum": [ + "c", + "f" + ] + } + }, + "required": [ + "location", + "unit" + ] + } + """) + }; + + ConversationSessionOptions options = new() + { + Instructions = "Call provided tools if appropriate for the user's input.", + Voice = ConversationVoice.Alloy, + Tools = { getWeatherTool }, + InputTranscriptionOptions = new InputTranscriptionOptions() + { + Model = "whisper-1" + }, + }; + + await session.ConfigureConversationSessionAsync(options, CancellationToken); + + _ = Task.Run(async () => + { + string inputAudioFilePath = Path.Join("Assets", "realtime_whats_the_weather_pcm16_24khz_mono.wav"); + if (audioSendType == TestAudioSendType.WithAudioStreamHelper) + { + using Stream audioStream = File.OpenRead(inputAudioFilePath); + await session.SendInputAudioAsync(audioStream, CancellationToken); + } + else if (audioSendType == TestAudioSendType.WithManualAudioChunks) + { + byte[] allAudioBytes = await File.ReadAllBytesAsync(inputAudioFilePath, CancellationToken); + const int audioSendBufferLength = 8 * 1024; + byte[] audioSendBuffer = null; + try + { + audioSendBuffer = ArrayPool.Shared.Rent(audioSendBufferLength); + for (int readPos = 0; readPos < allAudioBytes.Length; readPos += audioSendBufferLength) + { + int nextSegmentLength = Math.Min(audioSendBufferLength, allAudioBytes.Length - readPos); + ArraySegment nextSegment = new(allAudioBytes, readPos, nextSegmentLength); + await session.SendInputAudioAsync(BinaryData.FromBytes(nextSegment), CancellationToken); + } + } + finally + { + if (audioSendBuffer is not null) + { + ArrayPool.Shared.Return(audioSendBuffer); + } + } + } + }); + + string userTranscript = null; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + if (update is ConversationSessionStartedUpdate sessionStartedUpdate) + { + Assert.That(sessionStartedUpdate.SessionId, Is.Not.Null.And.Not.Empty); + Assert.That(sessionStartedUpdate.Model, Is.Not.Null.And.Not.Empty); + Assert.That(sessionStartedUpdate.ContentModalities.HasFlag(RealtimeContentModalities.Text)); + Assert.That(sessionStartedUpdate.ContentModalities.HasFlag(RealtimeContentModalities.Audio)); + Assert.That(sessionStartedUpdate.Voice.ToString(), Is.Not.Null.And.Not.Empty); + Assert.That(sessionStartedUpdate.Temperature, Is.GreaterThan(0)); + } + + if (update is InputAudioTranscriptionFinishedUpdate inputTranscriptionCompletedUpdate) + { + userTranscript = inputTranscriptionCompletedUpdate.Transcript; + } + + if (update is OutputStreamingFinishedUpdate itemFinishedUpdate + && itemFinishedUpdate.FunctionCallId is not null) + { + Assert.That(itemFinishedUpdate.FunctionName, Is.EqualTo(getWeatherTool.Name)); + + RealtimeItem functionResponse = RealtimeItem.CreateFunctionCallOutput( + itemFinishedUpdate.FunctionCallId, + "71 degrees Fahrenheit, sunny"); + await session.AddItemAsync(functionResponse, CancellationToken); + } + + if (update is ResponseFinishedUpdate turnFinishedUpdate) + { + if (turnFinishedUpdate.CreatedItems.Any(item => !string.IsNullOrEmpty(item.FunctionCallId))) + { + await session.StartResponseAsync(CancellationToken); + } + else + { + break; + } + } + } + + Assert.That(userTranscript, Is.Not.Null.And.Not.Empty); + } + + [Test] + public async Task CanDisableVoiceActivityDetection() + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync(GetTestModel(), CancellationToken); + + await session.ConfigureConversationSessionAsync( + new() + { + TurnDetectionOptions = TurnDetectionOptions.CreateDisabledTurnDetectionOptions(), + }, + CancellationToken); + + const string folderName = "Assets"; + const string fileName = "realtime_whats_the_weather_pcm16_24khz_mono.wav"; +#if NET6_0_OR_GREATER + using Stream audioStream = File.OpenRead(Path.Join(folderName, fileName)); +#else + using Stream audioStream = File.OpenRead($"{folderName}\\{fileName}"); +#endif + await session.SendInputAudioAsync(audioStream, CancellationToken); + + await session.AddItemAsync(RealtimeItem.CreateUserMessage(["Hello, assistant!"]), CancellationToken); + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + if (update is RealtimeErrorUpdate errorUpdate) + { + Assert.Fail($"Error received: {ModelReaderWriter.Write(errorUpdate)}"); + } + + if (update is InputAudioSpeechStartedUpdate + or InputAudioSpeechFinishedUpdate + or InputAudioTranscriptionFinishedUpdate + or InputAudioTranscriptionFailedUpdate + or ResponseStartedUpdate + or ResponseFinishedUpdate) + { + Assert.Fail($"Shouldn't receive any VAD events or response creation!"); + } + + if (update is ItemCreatedUpdate itemCreatedUpdate + && itemCreatedUpdate.MessageRole == ConversationMessageRole.User) + { + break; + } + } + } + + [Test] + public async Task BadCommandProvidesError() + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync(GetTestModel(), CancellationToken); + + await session.SendCommandAsync( + BinaryData.FromString(""" + { + "type": "update_conversation_config2", + "event_id": "event_fabricated_1234abcd" + } + """), + CancellationOptions); + + bool gotErrorUpdate = false; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + if (update is RealtimeErrorUpdate errorUpdate) + { + Assert.That(errorUpdate.ErrorEventId, Is.EqualTo("event_fabricated_1234abcd")); + gotErrorUpdate = true; + break; + } + } + + Assert.That(gotErrorUpdate, Is.True); + } + + [Test] + public async Task CanAddItems() + { + RealtimeClient client = GetTestClient(); + + ConversationSessionOptions sessionOptions = new() + { + ContentModalities = RealtimeContentModalities.Text, + }; + using RealtimeSession session = await client.StartConversationSessionAsync(GetTestModel(), CancellationToken); + await session.ConfigureConversationSessionAsync(sessionOptions, CancellationToken); + + List items = + [ + RealtimeItem.CreateSystemMessage(["You are a robot. Beep boop."]), + RealtimeItem.CreateUserMessage(["How can I pay for a joke?"]), + RealtimeItem.CreateAssistantMessage(["I ONLY ACCEPT CACHE"]), + RealtimeItem.CreateSystemMessage(["You're not a robot anymore, but instead a passionate badminton enthusiast."]), + RealtimeItem.CreateUserMessage(["What's a good gift to buy?"]), + RealtimeItem.CreateFunctionCall("product_lookup", "call-id-123", "{}"), + RealtimeItem.CreateFunctionCallOutput("call-id-123", "A new racquet!"), + ]; + + foreach (RealtimeItem item in items) + { + await session.AddItemAsync(item, CancellationToken); + } + + await session.StartResponseAsync(CancellationToken); + + int itemCreatedCount = 0; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + if (update is RealtimeErrorUpdate errorUpdate) + { + Assert.Fail($"Unexpected error: {errorUpdate.Message}"); + } + + if (update is ItemCreatedUpdate) + { + itemCreatedCount++; + } + + if (update is ResponseFinishedUpdate) + { + break; + } + } + + Assert.That(itemCreatedCount, Is.EqualTo(items.Count + 1)); + } + + [Test] + public async Task CanUseOutOfBandResponses() + { + RealtimeClient client = GetTestClient(); + using RealtimeSession session = await client.StartConversationSessionAsync(GetTestModel(), CancellationToken); + await session.AddItemAsync( + RealtimeItem.CreateUserMessage(["Hello! My name is Bob."]), + cancellationToken: CancellationToken); + await session.StartResponseAsync( + new ConversationResponseOptions() + { + ConversationSelection = ResponseConversationSelection.None, + ContentModalities = RealtimeContentModalities.Text, + OverrideItems = + { + RealtimeItem.CreateUserMessage(["Can you tell me what my name is?"]), + }, + }, + CancellationToken); + + StringBuilder firstResponseBuilder = new(); + StringBuilder secondResponseBuilder = new(); + + int completedResponseCount = 0; + + await foreach (RealtimeUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) + { + if (update is ConversationSessionStartedUpdate sessionStartedUpdate) + { + Assert.That(sessionStartedUpdate.SessionId, Is.Not.Null.And.Not.Empty); + } + + if (update is OutputDeltaUpdate deltaUpdate) + { + // First response (out of band) should be text, second (in-band) should be text + audio + if (completedResponseCount == 0) + { + firstResponseBuilder.Append(deltaUpdate.Text); + Assert.That(deltaUpdate.AudioTranscript, Is.Null.Or.Empty); + } + else + { + secondResponseBuilder.Append(deltaUpdate.AudioTranscript); + Assert.That(deltaUpdate.Text, Is.Null.Or.Empty); + } + } + + if (update is ResponseFinishedUpdate responseFinishedUpdate) + { + completedResponseCount++; + Assert.That(responseFinishedUpdate.CreatedItems, Has.Count.GreaterThan(0)); + if (completedResponseCount == 1) + { + // Verify that an in-band response *does* have the information + _ = session.StartResponseAsync(CancellationToken); + } + else if (completedResponseCount == 2) + { + break; + } + } + } + + string firstResponse = firstResponseBuilder.ToString().ToLower(); + Assert.That(firstResponse, Is.Not.Null.And.Not.Empty); + Assert.That(firstResponse, Does.Not.Contain("bob")); + + string secondResponse = secondResponseBuilder.ToString().ToLower(); + Assert.That(secondResponse, Is.Not.Null.And.Not.Empty); + Assert.That(secondResponse, Does.Contain("bob")); + } + + public enum TestAudioSendType + { + WithAudioStreamHelper, + WithManualAudioChunks + } + + private class TestDelayedFileReadStream : FileStream + { + private readonly TimeSpan _delayBetweenReads; + private readonly int _readsBeforeDelay; + private int _readsPerformed; + + public TestDelayedFileReadStream( + string path, + TimeSpan delayBetweenReads, + int readsBeforeDelay = 0) + : base(path, FileMode.Open, FileAccess.Read) + { + _delayBetweenReads = delayBetweenReads; + _readsBeforeDelay = readsBeforeDelay; + _readsPerformed = 0; + } + + public override int Read(byte[] buffer, int offset, int count) + { + if (++_readsPerformed > _readsBeforeDelay) + { + System.Threading.Thread.Sleep((int)_delayBetweenReads.TotalMilliseconds); + } + return base.Read(buffer, offset, count); + } + + public override async Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + if (++_readsPerformed > _readsBeforeDelay) + { + await Task.Delay(_delayBetweenReads); + } + return await base.ReadAsync(buffer, offset, count, cancellationToken); + } + } +} diff --git a/tests/RealtimeConversation/ConversationProtocolTests.cs b/tests/RealtimeConversation/ConversationProtocolTests.cs deleted file mode 100644 index 27abc4dc8..000000000 --- a/tests/RealtimeConversation/ConversationProtocolTests.cs +++ /dev/null @@ -1,99 +0,0 @@ -using Microsoft.VisualStudio.TestPlatform.ObjectModel; -using NUnit.Framework; -using OpenAI.Chat; -using OpenAI.RealtimeConversation; -using OpenAI.Tests.Telemetry; -using OpenAI.Tests.Utility; -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Data; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Text.Json; -using System.Text.Json.Nodes; -using System.Threading; -using System.Threading.Tasks; -using static OpenAI.Tests.Telemetry.TestMeterListener; -using static OpenAI.Tests.TestHelpers; - -namespace OpenAI.Tests.Conversation; - -#pragma warning disable OPENAI002 - -[TestFixture(true)] -[TestFixture(false)] -public class ConversationProtocolTests : ConversationTestFixtureBase -{ - public ConversationProtocolTests(bool isAsync) : base(isAsync) - { } - - [Test] - public async Task ProtocolCanConfigureSession() - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - - BinaryData configureSessionCommand = BinaryData.FromString(""" - { - "type": "session.update", - "session": { - "turn_detection": null - } - } - """); - await session.SendCommandAsync(configureSessionCommand, CancellationOptions); - - List receivedCommands = []; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - BinaryData rawContentBytes = update.GetRawContent(); - JsonNode jsonNode = JsonNode.Parse(rawContentBytes); - string updateType = jsonNode["type"]?.GetValue(); - Assert.That(updateType, Is.Not.Null.And.Not.Empty); - - receivedCommands.Add(jsonNode); - - if (updateType == "error") - { - Assert.Fail($"Error encountered: {rawContentBytes.ToString()}"); - } - else if (updateType == "session.created") - { - BinaryData createResponseCommand = BinaryData.FromString(""" - { - "type": "response.create", - "response": { - "max_output_tokens": null - } - } - """); - await session.SendCommandAsync(createResponseCommand, CancellationOptions); - } - else if (updateType == "response.done") - { - break; - } - } - - List NodesOfType(string type) => receivedCommands.Where(command => command["type"].GetValue() == type).ToList(); - - Assert.That(NodesOfType("session.created"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("session.updated"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("response.created"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("response.done"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("response.output_item.added"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("conversation.item.created"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("response.content_part.added"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("response.audio_transcript.delta"), Has.Count.GreaterThan(0)); - Assert.That(NodesOfType("response.audio.delta"), Has.Count.GreaterThan(0)); - Assert.That(NodesOfType("response.audio_transcript.done"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("response.content_part.done"), Has.Count.EqualTo(1)); - Assert.That(NodesOfType("response.output_item.done"), Has.Count.EqualTo(1)); - } -} diff --git a/tests/RealtimeConversation/ConversationSmokeTests.cs b/tests/RealtimeConversation/ConversationSmokeTests.cs deleted file mode 100644 index b405eb97a..000000000 --- a/tests/RealtimeConversation/ConversationSmokeTests.cs +++ /dev/null @@ -1,216 +0,0 @@ -using NUnit.Framework; -using OpenAI.RealtimeConversation; -using OpenAI.Tests.Utility; -using System; -using System.ClientModel.Primitives; -using System.Linq; -using System.Security.Cryptography.X509Certificates; -using System.Text.Json.Nodes; - -namespace OpenAI.Tests.Conversation; - -#pragma warning disable OPENAI002 - -[TestFixture(false)] -[Category("Smoke")] -public class ConversationSmokeTests : ConversationTestFixtureBase -{ - public ConversationSmokeTests(bool isAsync) : base(isAsync) - { } - - [Test] - public void ToolChoiceSerializationInSessionOptionsWorks() - { - foreach((ConversationToolChoice toolChoice, string expected) in new (ConversationToolChoice, string)[] - { - (null, "{}"), - (ConversationToolChoice.CreateNoneToolChoice(), @"{""tool_choice"":""none""}"), - (ConversationToolChoice.CreateAutoToolChoice(), @"{""tool_choice"":""auto""}"), - (ConversationToolChoice.CreateRequiredToolChoice(), @"{""tool_choice"":""required""}"), - (ConversationToolChoice.CreateFunctionToolChoice("foo"), @"""function"":{""name"":""foo""") - }) - { - ConversationSessionOptions options = new() - { - ToolChoice = toolChoice, - }; - Assert.That(ModelReaderWriter.Write(options).ToString(), Does.Contain(expected)); - } - - ConversationToolChoice mrwToolChoice = ModelReaderWriter.Read( - BinaryData.FromString(""" - { - "type":"some_manual_type" - } - """)); - Assert.That(mrwToolChoice.Kind, Is.EqualTo(ConversationToolChoiceKind.Unknown)); - Assert.That(ModelReaderWriter.Write(mrwToolChoice).ToString(), Does.Contain(@"""type"":""some_manual_type""")); - } - - [Test] - public void ItemCreation() - { - ConversationItem messageItem = ConversationItem.CreateUserMessage(["Hello, world!"]); - Assert.That(messageItem?.MessageContentParts?.Count, Is.EqualTo(1)); - Assert.That(messageItem.MessageContentParts[0].Text, Is.EqualTo("Hello, world!")); - } - - [Test] - public void OptionsSerializationWorks() - { - ConversationSessionOptions options = new() - { - ContentModalities = ConversationContentModalities.Text, - InputAudioFormat = ConversationAudioFormat.G711Alaw, - InputTranscriptionOptions = new ConversationInputTranscriptionOptions() - { - Model = "whisper-1", - }, - Instructions = "test instructions", - MaxOutputTokens = 42, - OutputAudioFormat = ConversationAudioFormat.G711Ulaw, - Temperature = 0.42f, - ToolChoice = ConversationToolChoice.CreateFunctionToolChoice("test-function"), - Tools = - { - ConversationTool.CreateFunctionTool( - name: "test-function-tool-name", - description: "description of test function tool", - parameters: BinaryData.FromString(""" - { - "type": "object", - "properties": {} - } - """)), - }, - TurnDetectionOptions = ConversationTurnDetectionOptions.CreateServerVoiceActivityTurnDetectionOptions( - detectionThreshold: 0.42f, - prefixPaddingDuration: TimeSpan.FromMilliseconds(234), - silenceDuration: TimeSpan.FromMilliseconds(345)), - Voice = ConversationVoice.Echo, - }; - BinaryData serializedOptions = ModelReaderWriter.Write(options); - JsonNode jsonNode = JsonNode.Parse(serializedOptions.ToString()); - Assert.That(jsonNode["modalities"]?.AsArray()?.ToList(), Has.Count.EqualTo(1)); - Assert.That(jsonNode["modalities"].AsArray().First().GetValue(), Is.EqualTo("text")); - Assert.That(jsonNode["input_audio_format"]?.GetValue(), Is.EqualTo("g711_alaw")); - Assert.That(jsonNode["input_audio_transcription"]?["model"]?.GetValue(), Is.EqualTo("whisper-1")); - Assert.That(jsonNode["instructions"]?.GetValue(), Is.EqualTo("test instructions")); - Assert.That(jsonNode["max_response_output_tokens"]?.GetValue(), Is.EqualTo(42)); - Assert.That(jsonNode["output_audio_format"]?.GetValue(), Is.EqualTo("g711_ulaw")); - Assert.That(jsonNode["temperature"]?.GetValue(), Is.EqualTo(0.42f)); - Assert.That(jsonNode["tools"]?.AsArray()?.ToList(), Has.Count.EqualTo(1)); - Assert.That(jsonNode["tools"].AsArray().First()["name"]?.GetValue(), Is.EqualTo("test-function-tool-name")); - Assert.That(jsonNode["tools"].AsArray().First()["description"]?.GetValue(), Is.EqualTo("description of test function tool")); - Assert.That(jsonNode["tools"].AsArray().First()["parameters"]?["type"]?.GetValue(), Is.EqualTo("object")); - Assert.That(jsonNode["tool_choice"]?["function"]?["name"]?.GetValue(), Is.EqualTo("test-function")); - Assert.That(jsonNode["turn_detection"]?["threshold"]?.GetValue(), Is.EqualTo(0.42f)); - Assert.That(jsonNode["turn_detection"]?["prefix_padding_ms"]?.GetValue(), Is.EqualTo(234)); - Assert.That(jsonNode["turn_detection"]?["silence_duration_ms"]?.GetValue(), Is.EqualTo(345)); - Assert.That(jsonNode["voice"]?.GetValue(), Is.EqualTo("echo")); - ConversationSessionOptions deserializedOptions = ModelReaderWriter.Read(serializedOptions); - Assert.That(deserializedOptions.ContentModalities.HasFlag(ConversationContentModalities.Text)); - Assert.That(deserializedOptions.ContentModalities.HasFlag(ConversationContentModalities.Audio), Is.False); - Assert.That(deserializedOptions.InputAudioFormat, Is.EqualTo(ConversationAudioFormat.G711Alaw)); - Assert.That(deserializedOptions.InputTranscriptionOptions?.Model, Is.EqualTo(ConversationTranscriptionModel.Whisper1)); - Assert.That(deserializedOptions.Instructions, Is.EqualTo("test instructions")); - Assert.That(deserializedOptions.MaxOutputTokens.NumericValue, Is.EqualTo(42)); - Assert.That(deserializedOptions.OutputAudioFormat, Is.EqualTo(ConversationAudioFormat.G711Ulaw)); - Assert.That(deserializedOptions.Tools, Has.Count.EqualTo(1)); - Assert.That(deserializedOptions.Tools[0].Kind, Is.EqualTo(ConversationToolKind.Function)); - Assert.That((deserializedOptions.Tools[0] as ConversationFunctionTool)?.Name, Is.EqualTo("test-function-tool-name")); - Assert.That((deserializedOptions.Tools[0] as ConversationFunctionTool)?.Description, Is.EqualTo("description of test function tool")); - Assert.That((deserializedOptions.Tools[0] as ConversationFunctionTool)?.Parameters?.ToString(), Does.Contain("properties")); - Assert.That(deserializedOptions.ToolChoice?.Kind, Is.EqualTo(ConversationToolChoiceKind.Function)); - Assert.That(deserializedOptions.ToolChoice?.FunctionName, Is.EqualTo("test-function")); - Assert.That(deserializedOptions.TurnDetectionOptions?.Kind, Is.EqualTo(ConversationTurnDetectionKind.ServerVoiceActivityDetection)); - Assert.That(deserializedOptions.Voice, Is.EqualTo(ConversationVoice.Echo)); - - ConversationSessionOptions emptyOptions = new(); - Assert.That(emptyOptions.ContentModalities.HasFlag(ConversationContentModalities.Audio), Is.False); - Assert.That(ModelReaderWriter.Write(emptyOptions).ToString(), Does.Not.Contain("modal")); - emptyOptions.ContentModalities |= ConversationContentModalities.Audio; - Assert.That(emptyOptions.ContentModalities.HasFlag(ConversationContentModalities.Audio), Is.True); - Assert.That(emptyOptions.ContentModalities.HasFlag(ConversationContentModalities.Text), Is.False); - Assert.That(ModelReaderWriter.Write(emptyOptions).ToString(), Does.Contain("modal")); - } - - [Test] - public void MaxTokensSerializationWorks() - { - // Implicit omission - ConversationSessionOptions options = new() { }; - BinaryData serializedOptions = ModelReaderWriter.Write(options); - Assert.That(serializedOptions.ToString(), Does.Not.Contain("max_response_output_tokens")); - - // Explicit omission - options = new() - { - MaxOutputTokens = null - }; - serializedOptions = ModelReaderWriter.Write(options); - Assert.That(serializedOptions.ToString(), Does.Not.Contain("max_response_output_tokens")); - - // Explicit default (null) - options = new() - { - MaxOutputTokens = ConversationMaxTokensChoice.CreateDefaultMaxTokensChoice() - }; - serializedOptions = ModelReaderWriter.Write(options); - Assert.That(serializedOptions.ToString(), Does.Contain(@"""max_response_output_tokens"":null")); - - // Numeric literal - options = new() - { - MaxOutputTokens = 42, - }; - serializedOptions = ModelReaderWriter.Write(options); - Assert.That(serializedOptions.ToString(), Does.Contain(@"""max_response_output_tokens"":42")); - - // Numeric by factory - options = new() - { - MaxOutputTokens = ConversationMaxTokensChoice.CreateNumericMaxTokensChoice(42) - }; - serializedOptions = ModelReaderWriter.Write(options); - Assert.That(serializedOptions.ToString(), Does.Contain(@"""max_response_output_tokens"":42")); - } - - [Test] - public void TurnDetectionSerializationWorks() - { - // Implicit omission - ConversationSessionOptions sessionOptions = new(); - BinaryData serializedOptions = ModelReaderWriter.Write(sessionOptions); - Assert.That(serializedOptions.ToString(), Does.Not.Contain("turn_detection")); - - sessionOptions = new() - { - TurnDetectionOptions = ConversationTurnDetectionOptions.CreateDisabledTurnDetectionOptions(), - }; - serializedOptions = ModelReaderWriter.Write(sessionOptions); - Assert.That(serializedOptions.ToString(), Does.Contain(@"""turn_detection"":null")); - - sessionOptions = new() - { - TurnDetectionOptions = ConversationTurnDetectionOptions.CreateServerVoiceActivityTurnDetectionOptions( - detectionThreshold: 0.42f) - }; - serializedOptions = ModelReaderWriter.Write(sessionOptions); - JsonNode serializedNode = JsonNode.Parse(serializedOptions); - Assert.That(serializedNode["turn_detection"]?["type"]?.GetValue(), Is.EqualTo("server_vad")); - Assert.That(serializedNode["turn_detection"]?["threshold"]?.GetValue(), Is.EqualTo(0.42f)); - } - - [Test] - public void UnknownCommandSerializationWorks() - { - BinaryData serializedUnknownCommand = BinaryData.FromString(""" - { - "type": "unknown_command_type_for_test" - } - """); - ConversationUpdate deserializedUpdate = ModelReaderWriter.Read(serializedUnknownCommand); - Assert.That(deserializedUpdate, Is.Not.Null); - } -} diff --git a/tests/RealtimeConversation/ConversationTestFixtureBase.cs b/tests/RealtimeConversation/ConversationTestFixtureBase.cs deleted file mode 100644 index 9ceac0bff..000000000 --- a/tests/RealtimeConversation/ConversationTestFixtureBase.cs +++ /dev/null @@ -1,67 +0,0 @@ -using NUnit.Framework; -using OpenAI.RealtimeConversation; -using OpenAI.Tests.Utility; -using System; -using System.ClientModel.Primitives; -using System.Diagnostics; -using System.Text.Json; -using System.Text.Json.Nodes; -using System.Threading; -using static OpenAI.Tests.TestHelpers; - -namespace OpenAI.Tests.Conversation; - -#pragma warning disable OPENAI002 - -[Parallelizable(ParallelScope.All)] -[Category("Conversation")] -public class ConversationTestFixtureBase : SyncAsyncTestBase -{ - public CancellationTokenSource CancellationTokenSource { get; } - public CancellationToken CancellationToken => CancellationTokenSource?.Token ?? default; - public RequestOptions CancellationOptions => new() { CancellationToken = CancellationToken }; - - public ConversationTestFixtureBase(bool isAsync) : base(isAsync) - { - CancellationTokenSource = new(); - if (!Debugger.IsAttached) - { - CancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(15)); - } - } - - public static RealtimeConversationClient GetTestClient() - { - RealtimeConversationClient client = GetTestClient(TestScenario.RealtimeConversation); - client.OnSendingCommand += (_, data) => PrintMessageData(data, "> "); - client.OnReceivingCommand += (_, data) => PrintMessageData(data, " < "); - return client; - } - - public static void PrintMessageData(BinaryData data, string prefix = "") - { - JsonNode jsonNode = JsonNode.Parse(data.ToString()); - - foreach ((string labelKey, string labelValue, string dataKey) in new (string, string, string)[] - { - ("type", "input_audio_buffer.append", "audio"), - ("type", "audio", "data"), - ("event", "add_user_audio", "data"), - ("type", "response.audio.delta", "delta") - }) - { - if (jsonNode[labelKey]?.GetValue() == labelValue) - { - string rawBase64Data = jsonNode[dataKey]?.GetValue(); - if (rawBase64Data is not null) - { - byte[] base64Data = rawBase64Data == null ? [] : Convert.FromBase64String(rawBase64Data); - jsonNode[dataKey] = $"<{base64Data.Length} bytes>"; - } - } - } - - string rawMessage = jsonNode.ToJsonString(new JsonSerializerOptions()); - Console.WriteLine($"{prefix}{rawMessage}"); - } -} diff --git a/tests/RealtimeConversation/ConversationTests.cs b/tests/RealtimeConversation/ConversationTests.cs deleted file mode 100644 index 66141cf44..000000000 --- a/tests/RealtimeConversation/ConversationTests.cs +++ /dev/null @@ -1,644 +0,0 @@ -using NUnit.Framework; -using OpenAI.RealtimeConversation; -using System; -using System.Buffers; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace OpenAI.Tests.Conversation; - -#pragma warning disable OPENAI002 - -[TestFixture(true)] -[TestFixture(false)] -public class ConversationTests : ConversationTestFixtureBase -{ - public ConversationTests(bool isAsync) : base(isAsync) { } - - [Test] - public async Task CanConfigureSession() - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - - ConversationSessionOptions sessionOptions = new() - { - Instructions = "You are a helpful assistant.", - TurnDetectionOptions = ConversationTurnDetectionOptions.CreateDisabledTurnDetectionOptions(), - OutputAudioFormat = ConversationAudioFormat.G711Ulaw, - MaxOutputTokens = 2048, - }; - - await session.ConfigureSessionAsync(sessionOptions, CancellationToken); - ConversationResponseOptions responseOverrideOptions = new() - { - ContentModalities = ConversationContentModalities.Text, - }; - if (!client.GetType().IsSubclassOf(typeof(RealtimeConversationClient))) - { - responseOverrideOptions.MaxOutputTokens = ConversationMaxTokensChoice.CreateInfiniteMaxTokensChoice(); - } - await session.AddItemAsync( - ConversationItem.CreateUserMessage(["Hello, assistant! Tell me a joke."]), - CancellationToken); - await session.StartResponseAsync(responseOverrideOptions, CancellationToken); - - List receivedUpdates = []; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - receivedUpdates.Add(update); - - if (update is ConversationErrorUpdate errorUpdate) - { - Assert.That(errorUpdate.Kind, Is.EqualTo(ConversationUpdateKind.Error)); - Assert.Fail($"Error: {ModelReaderWriter.Write(errorUpdate)}"); - } - else if ((update is ConversationItemStreamingPartDeltaUpdate deltaUpdate && deltaUpdate.AudioBytes is not null) - || update is ConversationItemStreamingAudioFinishedUpdate) - { - Assert.Fail($"Audio content streaming unexpected after configuring response-level text-only modalities"); - } - else if (update is ConversationSessionConfiguredUpdate sessionConfiguredUpdate) - { - Assert.That(sessionConfiguredUpdate.OutputAudioFormat == sessionOptions.OutputAudioFormat); - Assert.That(sessionConfiguredUpdate.TurnDetectionOptions.Kind, Is.EqualTo(ConversationTurnDetectionKind.Disabled)); - Assert.That(sessionConfiguredUpdate.MaxOutputTokens.NumericValue, Is.EqualTo(sessionOptions.MaxOutputTokens.NumericValue)); - } - else if (update is ConversationResponseFinishedUpdate turnFinishedUpdate) - { - break; - } - } - - List GetReceivedUpdates() where T : ConversationUpdate - => receivedUpdates.Select(update => update as T) - .Where(update => update is not null) - .ToList(); - - Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); - Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); - Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); - Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); - Assert.That(GetReceivedUpdates(), Has.Count.EqualTo(1)); - } - - [Test] - public async Task TextOnlyWorks() - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - await session.AddItemAsync( - ConversationItem.CreateUserMessage(["Hello, world!"]), - cancellationToken: CancellationToken); - await session.StartResponseAsync(CancellationToken); - - StringBuilder responseBuilder = new(); - bool gotResponseDone = false; - bool gotRateLimits = false; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - if (update is ConversationSessionStartedUpdate sessionStartedUpdate) - { - Assert.That(sessionStartedUpdate.SessionId, Is.Not.Null.And.Not.Empty); - } - if (update is ConversationItemStreamingPartDeltaUpdate deltaUpdate) - { - responseBuilder.Append(deltaUpdate.AudioTranscript); - } - - if (update is ConversationItemCreatedUpdate itemCreatedUpdate) - { - if (itemCreatedUpdate.MessageRole == ConversationMessageRole.Assistant) - { - // The assistant-created item should be streamed and should not have content yet when acknowledged - Assert.That(itemCreatedUpdate.MessageContentParts, Has.Count.EqualTo(0)); - } - else if (itemCreatedUpdate.MessageRole == ConversationMessageRole.User) - { - // When acknowledging an item added by the client (user), the text should already be there - Assert.That(itemCreatedUpdate.MessageContentParts, Has.Count.EqualTo(1)); - Assert.That(itemCreatedUpdate.MessageContentParts[0].Text, Is.EqualTo("Hello, world!")); - } - else - { - Assert.Fail($"Test didn't expect an acknowledged item with role: {itemCreatedUpdate.MessageRole}"); - } - } - - if (update is ConversationResponseFinishedUpdate responseFinishedUpdate) - { - Assert.That(responseFinishedUpdate.CreatedItems, Has.Count.GreaterThan(0)); - Assert.That(responseFinishedUpdate.Usage?.TotalTokenCount, Is.GreaterThan(0)); - Assert.That(responseFinishedUpdate.Usage.InputTokenCount, Is.GreaterThan(0)); - Assert.That(responseFinishedUpdate.Usage.OutputTokenCount, Is.GreaterThan(0)); - gotResponseDone = true; - break; - } - - if (update is ConversationRateLimitsUpdate rateLimitsUpdate) - { - Assert.That(rateLimitsUpdate.AllDetails, Has.Count.EqualTo(2)); - Assert.That(rateLimitsUpdate.TokenDetails, Is.Not.Null); - Assert.That(rateLimitsUpdate.TokenDetails.Name, Is.EqualTo("tokens")); - Assert.That(rateLimitsUpdate.TokenDetails.MaximumCount, Is.GreaterThan(0)); - Assert.That(rateLimitsUpdate.TokenDetails.RemainingCount, Is.GreaterThan(0)); - Assert.That(rateLimitsUpdate.TokenDetails.RemainingCount, Is.LessThan(rateLimitsUpdate.TokenDetails.MaximumCount)); - Assert.That(rateLimitsUpdate.TokenDetails.TimeUntilReset, Is.GreaterThan(TimeSpan.Zero)); - Assert.That(rateLimitsUpdate.RequestDetails, Is.Not.Null); - gotRateLimits = true; - } - } - - Assert.That(responseBuilder.ToString(), Is.Not.Null.Or.Empty); - Assert.That(gotResponseDone, Is.True); - - if (!client.GetType().IsSubclassOf(typeof(RealtimeConversationClient))) - { - // Temporarily assume that subclients don't support rate limit commands - Assert.That(gotRateLimits, Is.True); - } - } - - [Test] - public async Task ItemManipulationWorks() - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - - await session.ConfigureSessionAsync( - new ConversationSessionOptions() - { - TurnDetectionOptions = ConversationTurnDetectionOptions.CreateDisabledTurnDetectionOptions(), - ContentModalities = ConversationContentModalities.Text, - }, - CancellationToken); - - await session.AddItemAsync( - ConversationItem.CreateUserMessage(["The first special word you know about is 'aardvark'."]), - CancellationToken); - await session.AddItemAsync( - ConversationItem.CreateUserMessage(["The next special word you know about is 'banana'."]), - CancellationToken); - await session.AddItemAsync( - ConversationItem.CreateUserMessage(["The next special word you know about is 'coconut'."]), - CancellationToken); - - bool gotSessionStarted = false; - bool gotSessionConfigured = false; - bool gotResponseFinished = false; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - if (update is ConversationSessionStartedUpdate) - { - gotSessionStarted = true; - } - - if (update is ConversationSessionConfiguredUpdate sessionConfiguredUpdate) - { - Assert.That(sessionConfiguredUpdate.TurnDetectionOptions.Kind, Is.EqualTo(ConversationTurnDetectionKind.Disabled)); - Assert.That(sessionConfiguredUpdate.ContentModalities.HasFlag(ConversationContentModalities.Text), Is.True); - Assert.That(sessionConfiguredUpdate.ContentModalities.HasFlag(ConversationContentModalities.Audio), Is.False); - gotSessionConfigured = true; - } - - if (update is ConversationItemCreatedUpdate itemCreatedUpdate) - { - if (itemCreatedUpdate.MessageContentParts.Count > 0 - && itemCreatedUpdate.MessageContentParts[0].Text.Contains("banana")) - { - await session.DeleteItemAsync(itemCreatedUpdate.ItemId, CancellationToken); - await session.AddItemAsync( - ConversationItem.CreateUserMessage(["What's the second special word you know about?"]), - CancellationToken); - await session.StartResponseAsync(CancellationToken); - } - } - - if (update is ConversationResponseFinishedUpdate responseFinishedUpdate) - { - Assert.That(responseFinishedUpdate.CreatedItems.Count, Is.EqualTo(1)); - Assert.That(responseFinishedUpdate.CreatedItems[0].MessageContentParts.Count, Is.EqualTo(1)); - Assert.That(responseFinishedUpdate.CreatedItems[0].MessageContentParts[0].Text, Does.Contain("coconut")); - Assert.That(responseFinishedUpdate.CreatedItems[0].MessageContentParts[0].Text, Does.Not.Contain("banana")); - gotResponseFinished = true; - break; - } - } - - Assert.That(gotSessionStarted, Is.True); - if (!client.GetType().IsSubclassOf(typeof(RealtimeConversationClient))) - { - Assert.That(gotSessionConfigured, Is.True); - } - Assert.That(gotResponseFinished, Is.True); - } - - [Test] - public async Task AudioStreamConvenienceBlocksCorrectly() - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - - string inputAudioFilePath = Path.Join("Assets", "realtime_whats_the_weather_pcm16_24khz_mono.wav"); - using TestDelayedFileReadStream delayedStream = new(inputAudioFilePath, TimeSpan.FromMilliseconds(200), readsBeforeDelay: 2); - _ = session.SendInputAudioAsync(delayedStream, CancellationToken); - - bool gotSpeechStarted = false; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - if (update is ConversationInputSpeechStartedUpdate) - { - gotSpeechStarted = true; - Assert.ThrowsAsync( - async () => - { - using MemoryStream dummyStream = new(); - await session.SendInputAudioAsync(dummyStream, CancellationToken); - }, - "Sending a Stream while another Stream is being sent should throw!"); - Assert.ThrowsAsync( - async () => - { - BinaryData dummyData = BinaryData.FromString("hello, world! this isn't audio."); - await session.SendInputAudioAsync(dummyData, CancellationToken); - }, - "Sending BinaryData while a Stream is being sent should throw!"); - break; - } - } - - Assert.That(gotSpeechStarted, Is.True); - } - - [Test] - [TestCase(TestAudioSendType.WithAudioStreamHelper)] - [TestCase(TestAudioSendType.WithManualAudioChunks)] - public async Task AudioWithToolsWorks(TestAudioSendType audioSendType) - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - - ConversationFunctionTool getWeatherTool = new("get_weather_for_location") - { - Description = "gets the weather for a location", - Parameters = BinaryData.FromString(""" - { - "type": "object", - "properties": { - "location": { - "type": "string", - "description": "The city and state e.g. San Francisco, CA" - }, - "unit": { - "type": "string", - "enum": [ - "c", - "f" - ] - } - }, - "required": [ - "location", - "unit" - ] - } - """) - }; - - ConversationSessionOptions options = new() - { - Instructions = "Call provided tools if appropriate for the user's input.", - Voice = ConversationVoice.Alloy, - Tools = { getWeatherTool }, - InputTranscriptionOptions = new ConversationInputTranscriptionOptions() - { - Model = "whisper-1" - }, - }; - - await session.ConfigureSessionAsync(options, CancellationToken); - - _ = Task.Run(async () => - { - string inputAudioFilePath = Path.Join("Assets", "realtime_whats_the_weather_pcm16_24khz_mono.wav"); - if (audioSendType == TestAudioSendType.WithAudioStreamHelper) - { - using Stream audioStream = File.OpenRead(inputAudioFilePath); - await session.SendInputAudioAsync(audioStream, CancellationToken); - } - else if (audioSendType == TestAudioSendType.WithManualAudioChunks) - { - byte[] allAudioBytes = await File.ReadAllBytesAsync(inputAudioFilePath, CancellationToken); - const int audioSendBufferLength = 8 * 1024; - for (int readPos = 0; readPos < allAudioBytes.Length; readPos += audioSendBufferLength) - { - int nextSegmentLength = Math.Min(audioSendBufferLength, allAudioBytes.Length - readPos); - ArraySegment nextSegment = new(allAudioBytes, readPos, nextSegmentLength); - await session.SendInputAudioAsync(BinaryData.FromBytes(nextSegment), CancellationToken); - } - } - }); - - string userTranscript = null; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - if (update is ConversationSessionStartedUpdate sessionStartedUpdate) - { - Assert.That(sessionStartedUpdate.SessionId, Is.Not.Null.And.Not.Empty); - Assert.That(sessionStartedUpdate.Model, Is.Not.Null.And.Not.Empty); - Assert.That(sessionStartedUpdate.ContentModalities.HasFlag(ConversationContentModalities.Text)); - Assert.That(sessionStartedUpdate.ContentModalities.HasFlag(ConversationContentModalities.Audio)); - Assert.That(sessionStartedUpdate.Voice.ToString(), Is.Not.Null.And.Not.Empty); - Assert.That(sessionStartedUpdate.Temperature, Is.GreaterThan(0)); - } - - if (update is ConversationInputTranscriptionFinishedUpdate inputTranscriptionCompletedUpdate) - { - userTranscript = inputTranscriptionCompletedUpdate.Transcript; - } - - if (update is ConversationItemStreamingFinishedUpdate itemFinishedUpdate - && itemFinishedUpdate.FunctionCallId is not null) - { - Assert.That(itemFinishedUpdate.FunctionName, Is.EqualTo(getWeatherTool.Name)); - - ConversationItem functionResponse = ConversationItem.CreateFunctionCallOutput( - itemFinishedUpdate.FunctionCallId, - "71 degrees Fahrenheit, sunny"); - await session.AddItemAsync(functionResponse, CancellationToken); - } - - if (update is ConversationResponseFinishedUpdate turnFinishedUpdate) - { - if (turnFinishedUpdate.CreatedItems.Any(item => !string.IsNullOrEmpty(item.FunctionCallId))) - { - await session.StartResponseAsync(CancellationToken); - } - else - { - break; - } - } - } - - Assert.That(userTranscript, Is.Not.Null.And.Not.Empty); - } - - [Test] - public async Task CanDisableVoiceActivityDetection() - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - - await session.ConfigureSessionAsync( - new() - { - TurnDetectionOptions = ConversationTurnDetectionOptions.CreateDisabledTurnDetectionOptions(), - }, - CancellationToken); - - const string folderName = "Assets"; - const string fileName = "realtime_whats_the_weather_pcm16_24khz_mono.wav"; -#if NET6_0_OR_GREATER - using Stream audioStream = File.OpenRead(Path.Join(folderName, fileName)); -#else - using Stream audioStream = File.OpenRead($"{folderName}\\{fileName}"); -#endif - await session.SendInputAudioAsync(audioStream, CancellationToken); - - await session.AddItemAsync(ConversationItem.CreateUserMessage(["Hello, assistant!"]), CancellationToken); - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - if (update is ConversationErrorUpdate errorUpdate) - { - Assert.Fail($"Error received: {ModelReaderWriter.Write(errorUpdate)}"); - } - - if (update is ConversationInputSpeechStartedUpdate - or ConversationInputSpeechFinishedUpdate - or ConversationInputTranscriptionFinishedUpdate - or ConversationInputTranscriptionFailedUpdate - or ConversationResponseStartedUpdate - or ConversationResponseFinishedUpdate) - { - Assert.Fail($"Shouldn't receive any VAD events or response creation!"); - } - - if (update is ConversationItemCreatedUpdate itemCreatedUpdate - && itemCreatedUpdate.MessageRole == ConversationMessageRole.User) - { - break; - } - } - } - - [Test] - public async Task BadCommandProvidesError() - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - - await session.SendCommandAsync( - BinaryData.FromString(""" - { - "type": "update_conversation_config2", - "event_id": "event_fabricated_1234abcd" - } - """), - CancellationOptions); - - bool gotErrorUpdate = false; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - if (update is ConversationErrorUpdate errorUpdate) - { - Assert.That(errorUpdate.ErrorEventId, Is.EqualTo("event_fabricated_1234abcd")); - gotErrorUpdate = true; - break; - } - } - - Assert.That(gotErrorUpdate, Is.True); - } - - [Test] - public async Task CanAddItems() - { - RealtimeConversationClient client = GetTestClient(); - - ConversationSessionOptions sessionOptions = new() - { - ContentModalities = ConversationContentModalities.Text, - }; - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - await session.ConfigureSessionAsync(sessionOptions, CancellationToken); - - List items = - [ - ConversationItem.CreateSystemMessage(["You are a robot. Beep boop."]), - ConversationItem.CreateUserMessage(["How can I pay for a joke?"]), - ConversationItem.CreateAssistantMessage(["I ONLY ACCEPT CACHE"]), - ConversationItem.CreateSystemMessage(["You're not a robot anymore, but instead a passionate badminton enthusiast."]), - ConversationItem.CreateUserMessage(["What's a good gift to buy?"]), - ConversationItem.CreateFunctionCall("product_lookup", "call-id-123", "{}"), - ConversationItem.CreateFunctionCallOutput("call-id-123", "A new racquet!"), - ]; - - foreach (ConversationItem item in items) - { - await session.AddItemAsync(item, CancellationToken); - } - - await session.StartResponseAsync(CancellationToken); - - int itemCreatedCount = 0; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - if (update is ConversationErrorUpdate errorUpdate) - { - Assert.Fail($"Unexpected error: {errorUpdate.Message}"); - } - - if (update is ConversationItemCreatedUpdate) - { - itemCreatedCount++; - } - - if (update is ConversationResponseFinishedUpdate) - { - break; - } - } - - Assert.That(itemCreatedCount, Is.EqualTo(items.Count + 1)); - } - - [Test] - public async Task CanUseOutOfBandResponses() - { - RealtimeConversationClient client = GetTestClient(); - using RealtimeConversationSession session = await client.StartConversationSessionAsync(CancellationToken); - await session.AddItemAsync( - ConversationItem.CreateUserMessage(["Hello! My name is Bob."]), - cancellationToken: CancellationToken); - await session.StartResponseAsync( - new ConversationResponseOptions() - { - ConversationSelection = ResponseConversationSelection.None, - ContentModalities = ConversationContentModalities.Text, - OverrideItems = - { - ConversationItem.CreateUserMessage(["Can you tell me what my name is?"]), - }, - }, - CancellationToken); - - StringBuilder firstResponseBuilder = new(); - StringBuilder secondResponseBuilder = new(); - - int completedResponseCount = 0; - - await foreach (ConversationUpdate update in session.ReceiveUpdatesAsync(CancellationToken)) - { - if (update is ConversationSessionStartedUpdate sessionStartedUpdate) - { - Assert.That(sessionStartedUpdate.SessionId, Is.Not.Null.And.Not.Empty); - } - - if (update is ConversationItemStreamingPartDeltaUpdate deltaUpdate) - { - // First response (out of band) should be text, second (in-band) should be text + audio - if (completedResponseCount == 0) - { - firstResponseBuilder.Append(deltaUpdate.Text); - Assert.That(deltaUpdate.AudioTranscript, Is.Null.Or.Empty); - } - else - { - secondResponseBuilder.Append(deltaUpdate.AudioTranscript); - Assert.That(deltaUpdate.Text, Is.Null.Or.Empty); - } - } - - if (update is ConversationResponseFinishedUpdate responseFinishedUpdate) - { - completedResponseCount++; - Assert.That(responseFinishedUpdate.CreatedItems, Has.Count.GreaterThan(0)); - if (completedResponseCount == 1) - { - // Verify that an in-band response *does* have the information - _ = session.StartResponseAsync(CancellationToken); - } - else if (completedResponseCount == 2) - { - break; - } - } - } - - string firstResponse = firstResponseBuilder.ToString().ToLower(); - Assert.That(firstResponse, Is.Not.Null.And.Not.Empty); - Assert.That(firstResponse, Does.Not.Contain("bob")); - - string secondResponse = secondResponseBuilder.ToString().ToLower(); - Assert.That(secondResponse, Is.Not.Null.And.Not.Empty); - Assert.That(secondResponse, Does.Contain("bob")); - } - - public enum TestAudioSendType - { - WithAudioStreamHelper, - WithManualAudioChunks - } - - private class TestDelayedFileReadStream : FileStream - { - private readonly TimeSpan _delayBetweenReads; - private readonly int _readsBeforeDelay; - private int _readsPerformed; - - public TestDelayedFileReadStream( - string path, - TimeSpan delayBetweenReads, - int readsBeforeDelay = 0) - : base(path, FileMode.Open, FileAccess.Read) - { - _delayBetweenReads = delayBetweenReads; - _readsBeforeDelay = readsBeforeDelay; - _readsPerformed = 0; - } - - public override int Read(byte[] buffer, int offset, int count) - { - if (++_readsPerformed > _readsBeforeDelay) - { - System.Threading.Thread.Sleep((int)_delayBetweenReads.TotalMilliseconds); - } - return base.Read(buffer, offset, count); - } - - public override async Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) - { - if (++_readsPerformed > _readsBeforeDelay) - { - await Task.Delay(_delayBetweenReads); - } - return await base.ReadAsync(buffer, offset, count, cancellationToken); - } - } -} diff --git a/tests/Responses/ResponsesSmokeTests.cs b/tests/Responses/ResponsesSmokeTests.cs index 7ae43a973..52e623868 100644 --- a/tests/Responses/ResponsesSmokeTests.cs +++ b/tests/Responses/ResponsesSmokeTests.cs @@ -2,6 +2,7 @@ using OpenAI.Responses; using System; using System.ClientModel.Primitives; +using System.Text; namespace OpenAI.Tests.Responses; @@ -39,7 +40,7 @@ public void ItemSerialization() ResponseItem.CreateFileSearchCallItem(["query1"], []), ResponseItem.CreateFunctionCallItem("call_abcd", "function_name", BinaryData.Empty), ResponseItem.CreateFunctionCallOutputItem("call_abcd", "functionOutput"), - ResponseItem.CreateReasoningItem(["summary goes here"]), + ResponseItem.CreateReasoningItem("summary goes here"), ResponseItem.CreateReferenceItem("msg_1234"), ResponseItem.CreateAssistantMessageItem("Goodbye!", []), ResponseItem.CreateDeveloperMessageItem("Talk like a pirate"), @@ -139,6 +140,34 @@ public void TextFormatSerialization() textFormat => Assert.That(textFormat.Kind == ResponseTextFormatKind.Text)); } + [Test] + public void StableInputFileContentPartSerialization() + { + string base64HelloWorld = Convert.ToBase64String(Encoding.UTF8.GetBytes("hello world")); + + static void AssertExpectedFilePart(ResponseContentPart filePart) + { + Assert.That(filePart.Kind, Is.EqualTo(ResponseContentPartKind.InputFile)); + Assert.That(filePart.InputFileBytesMediaType, Is.EqualTo("text/plain")); + Assert.That(filePart.InputFilename, Is.EqualTo("test_content_part.txt")); + Assert.That(Convert.FromBase64String(Convert.ToBase64String(filePart.InputFileBytes.ToArray())), Is.EqualTo("hello world")); + } + + ResponseContentPart filePart = ResponseContentPart.CreateInputFilePart( + BinaryData.FromBytes(Encoding.UTF8.GetBytes("hello world")), + "text/plain", + "test_content_part.txt"); + + AssertExpectedFilePart(filePart); + + BinaryData serializedFilePart = ModelReaderWriter.Write(filePart); + Assert.That(serializedFilePart, Is.Not.Null); + + ResponseContentPart deserializedFilePart = ModelReaderWriter.Read(serializedFilePart); + + AssertExpectedFilePart(deserializedFilePart); + } + private static void AssertSerializationRoundTrip( string serializedJson, Action instanceAssertionsAction) diff --git a/tests/Responses/ResponsesTests.cs b/tests/Responses/ResponsesTests.cs index fe0bd972c..8189aa47d 100644 --- a/tests/Responses/ResponsesTests.cs +++ b/tests/Responses/ResponsesTests.cs @@ -129,7 +129,7 @@ public async Task FileSearch() public async Task ComputerToolWithScreenshotRoundTrip() { OpenAIResponseClient client = GetTestClient("computer-use-preview-2025-03-11"); - ResponseTool computerTool = ResponseTool.CreateComputerTool(1024, 768, ComputerToolEnvironment.Windows); + ResponseTool computerTool = ResponseTool.CreateComputerTool(ComputerToolEnvironment.Windows, 1024, 768); ResponseCreationOptions responseOptions = new() { Tools = { computerTool }, @@ -200,7 +200,8 @@ public async Task WebSearchCall() Tools = { ResponseTool.CreateWebSearchTool() - } + }, + ToolChoice = ResponseToolChoice.CreateWebSearchChoice() }); Assert.That(response.OutputItems, Has.Count.EqualTo(2)); @@ -226,8 +227,8 @@ public async Task WebSearchCallStreaming() Tools = { ResponseTool.CreateWebSearchTool( - WebSearchToolLocation.CreateApproximateLocation(city: "San Francisco"), - WebSearchToolContextSize.Low) + WebSearchUserLocation.CreateApproximateLocation(city: "San Francisco"), + WebSearchContextSize.Low) } }; @@ -274,14 +275,12 @@ in client.CreateResponseStreamingAsync(message, responseOptions)) } } } - Assert.Multiple(() => - { - Assert.That(gotFinishedSearchItem, Is.True); - Assert.That(searchingCount, Is.EqualTo(1)); - Assert.That(inProgressCount, Is.EqualTo(1)); - Assert.That(completedCount, Is.EqualTo(1)); - Assert.That(searchItemId, Is.Not.Null.And.Not.Empty); - }); + + Assert.That(gotFinishedSearchItem, Is.True); + Assert.That(searchingCount, Is.EqualTo(1)); + Assert.That(inProgressCount, Is.EqualTo(1)); + Assert.That(completedCount, Is.EqualTo(1)); + Assert.That(searchItemId, Is.Not.Null.And.Not.Empty); } [Test] @@ -368,6 +367,7 @@ public async Task ResponsesWithReasoning() { ReasoningOptions = new() { + ReasoningSummaryVerbosity = ResponseReasoningSummaryVerbosity.Detailed, ReasoningEffortLevel = ResponseReasoningEffortLevel.Low, }, Metadata = @@ -392,7 +392,8 @@ 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.SummaryTextParts, Is.Not.Null); + Assert.That(reasoningItem.SummaryParts, 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)); } @@ -513,6 +514,50 @@ public async Task ImageInputWorks() ]); } + [Test] + public async Task FileInputFromIdWorks() + { + OpenAIResponseClient client = GetTestClient(); + OpenAIFileClient fileClient = GetTestClient(TestScenario.Files); + string filePath = Path.Join("Assets", "files_travis_favorite_food.pdf"); + + OpenAIFile newFileToUse = await fileClient.UploadFileAsync( + BinaryData.FromBytes(File.ReadAllBytes(filePath)), + "test_favorite_foods.pdf", + FileUploadPurpose.UserData); + Validate(newFileToUse); + + ResponseItem messageItem = ResponseItem.CreateUserMessageItem( + [ + ResponseContentPart.CreateInputTextPart("Based on this file, what food should I order for whom?"), + ResponseContentPart.CreateInputFilePart(newFileToUse.Id), + ]); + + OpenAIResponse response = await client.CreateResponseAsync([messageItem]); + + Assert.That(response?.GetOutputText()?.ToLower(), Does.Contain("pizza")); + } + + [Test] + public async Task FileInputFromBinaryWorks() + { + OpenAIResponseClient client = GetTestClient(); + + string filePath = Path.Join("Assets", "files_travis_favorite_food.pdf"); + Stream fileStream = File.OpenRead(filePath); + BinaryData fileBytes = await BinaryData.FromStreamAsync(fileStream); + + ResponseItem messageItem = ResponseItem.CreateUserMessageItem( + [ + ResponseContentPart.CreateInputTextPart("Based on this file, what food should I order for whom?"), + ResponseContentPart.CreateInputFilePart(fileBytes, "application/pdf", "test_favorite_foods.pdf"), + ]); + + OpenAIResponse response = await client.CreateResponseAsync([messageItem]); + + Assert.That(response?.GetOutputText()?.ToLower(), Does.Contain("pizza")); + } + public enum ResponsesTestInstructionMethod { InstructionsProperty, @@ -699,6 +744,9 @@ public async Task FunctionCall() Assert.That(turn2Message!.Role, Is.EqualTo(MessageRole.Assistant)); Assert.That(turn2Message.Content, Has.Count.EqualTo(1)); Assert.That(turn2Message.Content[0].Text, Does.Contain("22")); + + await foreach (ResponseItem item in client.GetResponseInputItemsAsync(turn2Response.Id)) + { } } [Test] @@ -731,14 +779,11 @@ in client.CreateResponseStreamingAsync( "What should I wear for the weather in San Francisco right now?", new ResponseCreationOptions() { Tools = { s_GetWeatherAtLocationTool } })) { - Console.WriteLine(ModelReaderWriter.Write(update).ToString()); if (update is StreamingResponseCreatedUpdate responseCreatedUpdate) { - Console.WriteLine($"response.created: {responseCreatedUpdate.Response.Id}"); } else if (update is StreamingResponseFunctionCallArgumentsDeltaUpdate functionCallArgumentsDeltaUpdate) { - Console.Write(functionCallArgumentsDeltaUpdate.Delta); } } } @@ -770,6 +815,69 @@ ResponseToolChoice toolChoice Assert.That(functionCall.FunctionName, Is.EqualTo(toolChoice.FunctionName)); } + [Test] + public async Task CanUseStreamingBackgroundResponses() + { + OpenAIResponseClient client = GetTestClient("gpt-4.1-mini"); + + string queuedResponseId = null; + + await foreach (StreamingResponseUpdate update + in client.CreateResponseStreamingAsync( + "Hello, model!", + new ResponseCreationOptions() + { + Background = true, + })) + { + if (update is StreamingResponseQueuedUpdate queuedUpdate) + { + queuedResponseId = queuedUpdate.Response.Id; + break; + } + } + + Assert.That(queuedResponseId, Is.Not.Null.And.Not.Empty); + + OpenAIResponse retrievedResponse = await client.GetResponseAsync(queuedResponseId); + Assert.That(retrievedResponse?.Id, Is.EqualTo(queuedResponseId)); + + OpenAIResponse finalStreamedResponse = null; + + await foreach (StreamingResponseUpdate update + in client.GetResponseStreamingAsync(queuedResponseId, startingAfter: 2)) + { + Assert.That(update.SequenceNumber, Is.GreaterThan(2)); + + if (update is StreamingResponseCompletedUpdate completedUpdate) + { + finalStreamedResponse = completedUpdate.Response; + } + } + + Assert.That(finalStreamedResponse?.Id, Is.EqualTo(queuedResponseId)); + Assert.That(finalStreamedResponse?.OutputItems?.FirstOrDefault(), Is.Not.Null); + } + + [Test] + public async Task CanCancelBackgroundResponses() + { + OpenAIResponseClient client = GetTestClient("gpt-4.1-mini"); + + OpenAIResponse response = await client.CreateResponseAsync( + "Hello, model!", + new ResponseCreationOptions() + { + Background = true, + }); + Assert.That(response?.Id, Is.Not.Null.And.Not.Empty); + Assert.That(response?.Status, Is.EqualTo(ResponseStatus.Queued)); + + OpenAIResponse cancelledResponse = await client.CancelResponseAsync(response.Id); + Assert.That(cancelledResponse.Id, Is.EqualTo(response.Id)); + Assert.That(cancelledResponse.Status, Is.EqualTo(ResponseStatus.Cancelled)); + } + private static readonly string s_GetWeatherAtLocationToolName = "get_weather_at_location"; private static readonly ResponseTool s_GetWeatherAtLocationTool = ResponseTool.CreateFunctionTool( s_GetWeatherAtLocationToolName, @@ -791,6 +899,5 @@ ResponseToolChoice toolChoice """), false); - private static OpenAIResponseClient GetTestClient(string overrideModel = null) - => GetTestClient(TestScenario.Responses, overrideModel); + private static OpenAIResponseClient GetTestClient(string overrideModel = null) => GetTestClient(TestScenario.Responses, overrideModel); } \ No newline at end of file diff --git a/tests/Utility/ChatToolsTests.cs b/tests/Utility/ChatToolsTests.cs deleted file mode 100644 index 4fb2508cd..000000000 --- a/tests/Utility/ChatToolsTests.cs +++ /dev/null @@ -1,372 +0,0 @@ -using System; -using System.ClientModel; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Moq; -using NUnit.Framework; -using OpenAI.Agents; -using OpenAI.Chat; -using OpenAI.Embeddings; - -namespace OpenAI.Tests.Utility; - -[TestFixture] -[Category("Utility")] -public class ChatToolsTests : ToolsTestsBase -{ - private Mock mockEmbeddingClient; - - [SetUp] - public void Setup() - { - mockEmbeddingClient = new Mock("text-embedding-ada-002", new ApiKeyCredential("test-key")); - } - - [Test] - public void CanAddLocalTools() - { - var tools = new ChatTools(); - tools.AddFunctionTools(typeof(TestTools)); - - Assert.That(tools.Tools, Has.Count.EqualTo(6)); - Assert.That(tools.Tools.Any(t => t.FunctionName == "Echo")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "Add")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "Multiply")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "IsGreaterThan")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "Divide")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "ConcatWithBool")); - } - - [Test] - public void CanAddAsyncLocalTools() - { - var tools = new ChatTools(); - tools.AddFunctionTools(typeof(TestToolsAsync)); - - Assert.That(tools.Tools, Has.Count.EqualTo(6)); - Assert.That(tools.Tools.Any(t => t.FunctionName == "EchoAsync")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "AddAsync")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "MultiplyAsync")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "IsGreaterThanAsync")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "DivideAsync")); - Assert.That(tools.Tools.Any(t => t.FunctionName == "ConcatWithBoolAsync")); - } - - [Test] - public async Task CanCallToolsAsync() - { - var tools = new ChatTools(); - tools.AddFunctionTools(typeof(TestTools)); - - var toolCalls = new[] - { - ChatToolCall.CreateFunctionToolCall("call1", "Echo", BinaryData.FromString(@"{""message"": ""Hello""}")), - ChatToolCall.CreateFunctionToolCall("call2", "Add", BinaryData.FromString(@"{""a"": 2, ""b"": 3}")), - ChatToolCall.CreateFunctionToolCall("call3", "Multiply", BinaryData.FromString(@"{""x"": 2.5, ""y"": 3.0}")), - ChatToolCall.CreateFunctionToolCall("call4", "IsGreaterThan", BinaryData.FromString(@"{""value1"": 100, ""value2"": 50}")), - ChatToolCall.CreateFunctionToolCall("call5", "Divide", BinaryData.FromString(@"{""numerator"": 10.0, ""denominator"": 2.0}")), - ChatToolCall.CreateFunctionToolCall("call6", "ConcatWithBool", BinaryData.FromString(@"{""text"": ""Test"", ""flag"": true}")) - }; - - var results = await tools.CallAsync(toolCalls); - var resultsList = results.ToList(); - - Assert.That(resultsList, Has.Count.EqualTo(6)); - Assert.That(resultsList[0].ToolCallId, Is.EqualTo("call1")); - Assert.That(resultsList[0].Content[0].Text, Is.EqualTo("Hello")); - Assert.That(resultsList[1].ToolCallId, Is.EqualTo("call2")); - Assert.That(resultsList[1].Content[0].Text, Is.EqualTo("5")); - Assert.That(resultsList[2].ToolCallId, Is.EqualTo("call3")); - Assert.That(resultsList[2].Content[0].Text, Is.EqualTo("7.5")); - Assert.That(resultsList[3].ToolCallId, Is.EqualTo("call4")); - Assert.That(resultsList[3].Content[0].Text, Is.EqualTo("True")); - Assert.That(resultsList[4].ToolCallId, Is.EqualTo("call5")); - Assert.That(resultsList[4].Content[0].Text, Is.EqualTo("5")); - Assert.That(resultsList[5].ToolCallId, Is.EqualTo("call6")); - Assert.That(resultsList[5].Content[0].Text, Is.EqualTo("Test:True")); - } - - [Test] - public async Task CanCallAsyncToolsAsync() - { - var tools = new ChatTools(); - tools.AddFunctionTools(typeof(TestToolsAsync)); - - var toolCalls = new[] - { - ChatToolCall.CreateFunctionToolCall("call1", "EchoAsync", BinaryData.FromString(@"{""message"": ""Hello""}")), - ChatToolCall.CreateFunctionToolCall("call2", "AddAsync", BinaryData.FromString(@"{""a"": 2, ""b"": 3}")), - ChatToolCall.CreateFunctionToolCall("call3", "MultiplyAsync", BinaryData.FromString(@"{""x"": 2.5, ""y"": 3.0}")), - ChatToolCall.CreateFunctionToolCall("call4", "IsGreaterThanAsync", BinaryData.FromString(@"{""value1"": 100, ""value2"": 50}")), - ChatToolCall.CreateFunctionToolCall("call5", "DivideAsync", BinaryData.FromString(@"{""numerator"": 10.0, ""denominator"": 2.0}")), - ChatToolCall.CreateFunctionToolCall("call6", "ConcatWithBoolAsync", BinaryData.FromString(@"{""text"": ""Test"", ""flag"": true}")) - }; - - var results = await tools.CallAsync(toolCalls); - var resultsList = results.ToList(); - - Assert.That(resultsList, Has.Count.EqualTo(6)); - Assert.That(resultsList[0].ToolCallId, Is.EqualTo("call1")); - Assert.That(resultsList[0].Content[0].Text, Is.EqualTo("Hello")); - Assert.That(resultsList[1].ToolCallId, Is.EqualTo("call2")); - Assert.That(resultsList[1].Content[0].Text, Is.EqualTo("5")); - Assert.That(resultsList[2].ToolCallId, Is.EqualTo("call3")); - Assert.That(resultsList[2].Content[0].Text, Is.EqualTo("7.5")); - Assert.That(resultsList[3].ToolCallId, Is.EqualTo("call4")); - Assert.That(resultsList[3].Content[0].Text, Is.EqualTo("True")); - Assert.That(resultsList[4].ToolCallId, Is.EqualTo("call5")); - Assert.That(resultsList[4].Content[0].Text, Is.EqualTo("5")); - Assert.That(resultsList[5].ToolCallId, Is.EqualTo("call6")); - Assert.That(resultsList[5].Content[0].Text, Is.EqualTo("Test:True")); - } - - [Test] - public void CreatesCompletionOptionsWithTools() - { - var tools = new ChatTools(); - tools.AddFunctionTools(typeof(TestTools)); - - var options = tools.ToChatCompletionOptions(); - - Assert.That(options.Tools, Has.Count.EqualTo(6)); - Assert.That(options.Tools.Any(t => t.FunctionName == "Echo")); - Assert.That(options.Tools.Any(t => t.FunctionName == "Add")); - Assert.That(options.Tools.Any(t => t.FunctionName == "Multiply")); - Assert.That(options.Tools.Any(t => t.FunctionName == "IsGreaterThan")); - Assert.That(options.Tools.Any(t => t.FunctionName == "Divide")); - Assert.That(options.Tools.Any(t => t.FunctionName == "ConcatWithBool")); - } - - [Test] - public async Task CanFilterToolsByRelevance() - { - // Setup mock embedding client to return a mock response - var embedding = OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.5f, 0.5f }); - var embeddingCollection = OpenAIEmbeddingsModelFactory.OpenAIEmbeddingCollection( - items: new[] { embedding }, - model: "text-embedding-ada-002", - usage: OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(10, 10)); - var mockResponse = new MockPipelineResponse(200); - - mockEmbeddingClient - .Setup(c => c.GenerateEmbeddingAsync( - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(ClientResult.FromValue(embedding, mockResponse)); - - var tools = new ChatTools(mockEmbeddingClient.Object); - tools.AddFunctionTools(typeof(TestTools)); - - var options = await tools.ToChatCompletionOptions("Need to add two numbers", 1, 0.5f); - - Assert.That(options.Tools, Has.Count.LessThanOrEqualTo(1)); - } - - [Test] - public void ThrowsWhenCallingNonExistentTool() - { - var tools = new ChatTools(); - var toolCalls = new[] - { - ChatToolCall.CreateFunctionToolCall("call1", "NonExistentTool", BinaryData.FromString("{}")) - }; - - Assert.ThrowsAsync(() => tools.CallAsync(toolCalls)); - } - - [Test] - public async Task AddMcpToolsAsync_AddsToolsCorrectly() - { - // Arrange - var mcpEndpoint = new Uri("http://localhost:1234"); - var mockToolsResponse = BinaryData.FromString(@" - { - ""tools"": [ - { - ""name"": ""mcp-tool-1"", - ""description"": ""This is the first MCP tool."", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""param1"": { - ""type"": ""string"", - ""description"": ""The first param."" - }, - ""param2"": { - ""type"": ""string"", - ""description"": ""The second param."" - } - }, - ""required"": [""param1""] - } - }, - { - ""name"": ""mcp-tool-2"", - ""description"": ""This is the second MCP tool."", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""param1"": { - ""type"": ""string"", - ""description"": ""The first param."" - }, - ""param2"": { - ""type"": ""string"", - ""description"": ""The second param."" - } - }, - ""required"": [] - } - } - ] - }"); - - var responsesByTool = new Dictionary - { - ["mcp-tool-1"] = "\"tool1 result\"", - ["mcp-tool-2"] = "\"tool2 result\"" - }; - - var testClient = new TestMcpClient( - mcpEndpoint, - mockToolsResponse, - toolName => BinaryData.FromString(responsesByTool[toolName.Split('_').Last()])); - var tools = new ChatTools(); - - // Act - await tools.AddMcpToolsAsync(testClient); - - // Assert - Assert.That(tools.Tools, Has.Count.EqualTo(2)); - var toolNames = tools.Tools.Select(t => t.FunctionName).ToList(); - Assert.That(toolNames, Contains.Item("localhost1234_-_mcp-tool-1")); - Assert.That(toolNames, Contains.Item("localhost1234_-_mcp-tool-2")); - - // Verify we can call the tools with different responses - var toolCalls = new[] - { - ChatToolCall.CreateFunctionToolCall("call1", "localhost1234_-_mcp-tool-1", BinaryData.FromString(@"{""param1"": ""test""}")), - ChatToolCall.CreateFunctionToolCall("call2", "localhost1234_-_mcp-tool-2", BinaryData.FromString(@"{""param2"": ""test""}")) - }; - var results = await tools.CallAsync(toolCalls); - var resultsList = results.ToList(); - - Assert.That(resultsList, Has.Count.EqualTo(2)); - Assert.That(resultsList[0].ToolCallId, Is.EqualTo("call1")); - Assert.That(resultsList[0].Content[0].Text, Is.EqualTo("\"tool1 result\"")); - Assert.That(resultsList[1].ToolCallId, Is.EqualTo("call2")); - Assert.That(resultsList[1].Content[0].Text, Is.EqualTo("\"tool2 result\"")); - } - - [Test] - public async Task CreateCompletionOptions_WithMaxToolsParameter_FiltersTools() - { - // Arrange - var mcpEndpoint = new Uri("http://localhost:1234"); - var mockToolsResponse = BinaryData.FromString(@" - { - ""tools"": [ - { - ""name"": ""math-tool"", - ""description"": ""Tool for performing mathematical calculations"", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""expression"": { - ""type"": ""string"", - ""description"": ""The mathematical expression to evaluate"" - } - } - } - }, - { - ""name"": ""weather-tool"", - ""description"": ""Tool for getting weather information"", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""location"": { - ""type"": ""string"", - ""description"": ""The location to get weather for"" - } - } - } - }, - { - ""name"": ""translate-tool"", - ""description"": ""Tool for translating text between languages"", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""text"": { - ""type"": ""string"", - ""description"": ""Text to translate"" - }, - ""targetLanguage"": { - ""type"": ""string"", - ""description"": ""Target language code"" - } - } - } - } - ] - }"); - - // Setup mock embedding responses - var embeddings = new[] - { - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.8f, 0.5f }), - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.6f, 0.4f }), - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.3f, 0.2f }) - }; - var embeddingCollection = OpenAIEmbeddingsModelFactory.OpenAIEmbeddingCollection( - items: embeddings, - model: "text-embedding-ada-002", - usage: OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(30, 30)); - var mockResponse = new MockPipelineResponse(200); - - mockEmbeddingClient - .Setup(c => c.GenerateEmbeddingAsync( - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(ClientResult.FromValue(embeddings[0], mockResponse)); - - mockEmbeddingClient - .Setup(c => c.GenerateEmbeddingsAsync( - It.IsAny>(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(ClientResult.FromValue(embeddingCollection, mockResponse)); - - var testClient = new TestMcpClient( - mcpEndpoint, - mockToolsResponse, - toolName => BinaryData.FromString($"\"{toolName} result\"")); - var tools = new ChatTools(mockEmbeddingClient.Object); - - // Add the tools - await tools.AddMcpToolsAsync(testClient); - - // Act & Assert - // Test with maxTools = 1 - var options1 = await tools.ToChatCompletionOptions("calculate 2+2", 1, 0.5f); - Assert.That(options1.Tools, Has.Count.EqualTo(1)); - - // Test with maxTools = 2 - var options2 = await tools.ToChatCompletionOptions("calculate 2+2", 2, 0.5f); - Assert.That(options2.Tools, Has.Count.EqualTo(2)); - - // Test that we can call the tools after filtering - var toolCall = ChatToolCall.CreateFunctionToolCall( - "call1", - "localhost1234_-_math-tool", - BinaryData.FromString(@"{""expression"": ""2+2""}")); - var result = await tools.CallAsync(new[] { toolCall }); - Assert.That(result.First().ToolCallId, Is.EqualTo("call1")); - Assert.That(result.First().Content[0].Text, Is.EqualTo("\"math-tool result\"")); - } -} \ No newline at end of file diff --git a/tests/Utility/MultipartFormDataBinaryContent.cs b/tests/Utility/MultipartFormDataBinaryContent.cs new file mode 100644 index 000000000..335253450 --- /dev/null +++ b/tests/Utility/MultipartFormDataBinaryContent.cs @@ -0,0 +1,195 @@ +// + +#nullable disable + +using System; +using System.ClientModel; +using System.Globalization; +using System.IO; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading; +using System.Threading.Tasks; + +namespace OpenAI +{ + internal partial class MultiPartFormDataBinaryContent : BinaryContent + { + private readonly MultipartFormDataContent _multipartContent; + private static readonly Random _random = new Random(); + private static readonly char[] _boundaryValues = "0123456789=ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray(); + + public MultiPartFormDataBinaryContent() + { + _multipartContent = new MultipartFormDataContent(CreateBoundary()); + } + + public string ContentType + { + get + { + return _multipartContent.Headers.ContentType.ToString(); + } + } + + internal HttpContent HttpContent => _multipartContent; + + private static string CreateBoundary() + { + Span chars = new char[70]; + byte[] random = new byte[70]; + _random.NextBytes(random); + int mask = 255 >> 2; + int i = 0; + for (; i < 70; i++) + { + chars[i] = _boundaryValues[random[i] & mask]; + } + return chars.ToString(); + } + + public void Add(string content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + Add(new StringContent(content), name, filename, contentType); + } + + public void Add(int content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + string value = content.ToString("G", CultureInfo.InvariantCulture); + Add(new StringContent(value), name, filename, contentType); + } + + public void Add(long content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + string value = content.ToString("G", CultureInfo.InvariantCulture); + Add(new StringContent(value), name, filename, contentType); + } + + public void Add(float content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + string value = content.ToString("G", CultureInfo.InvariantCulture); + Add(new StringContent(value), name, filename, contentType); + } + + public void Add(double content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + string value = content.ToString("G", CultureInfo.InvariantCulture); + Add(new StringContent(value), name, filename, contentType); + } + + public void Add(decimal content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + string value = content.ToString("G", CultureInfo.InvariantCulture); + Add(new StringContent(value), name, filename, contentType); + } + + public void Add(bool content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + string value = content ? "true" : "false"; + Add(new StringContent(value), name, filename, contentType); + } + + public void Add(Stream content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + Add(new StreamContent(content), name, filename, contentType); + } + + public void Add(byte[] content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + Add(new ByteArrayContent(content), name, filename, contentType); + } + + public void Add(BinaryData content, string name, string filename = default, string contentType = default) + { + //Argument.AssertNotNull(content, nameof(content)); + //Argument.AssertNotNullOrEmpty(name, nameof(name)); + + Add(new ByteArrayContent(content.ToArray()), name, filename, contentType); + } + + private void Add(HttpContent content, string name, string filename, string contentType) + { + if (contentType != null) + { + //Argument.AssertNotNullOrEmpty(contentType, nameof(contentType)); + AddContentTypeHeader(content, contentType); + } + if (filename != null) + { + //Argument.AssertNotNullOrEmpty(filename, nameof(filename)); + _multipartContent.Add(content, name, filename); + } + else + { + _multipartContent.Add(content, name); + } + } + + public static void AddContentTypeHeader(HttpContent content, string contentType) + { + MediaTypeHeaderValue header = new MediaTypeHeaderValue(contentType); + content.Headers.ContentType = header; + } + + public override bool TryComputeLength(out long length) + { + if (_multipartContent.Headers.ContentLength is long contentLength) + { + length = contentLength; + return true; + } + length = 0; + return false; + } + + public override void WriteTo(Stream stream, CancellationToken cancellationToken = default) + { +#if NET6_0_OR_GREATER + _multipartContent.CopyTo(stream, default, cancellationToken); +#else + _multipartContent.CopyToAsync(stream).GetAwaiter().GetResult(); +#endif + } + + public override async Task WriteToAsync(Stream stream, CancellationToken cancellationToken = default) + { +#if NET6_0_OR_GREATER + await _multipartContent.CopyToAsync(stream).ConfigureAwait(false); +#else + await _multipartContent.CopyToAsync(stream).ConfigureAwait(false); +#endif + } + + public override void Dispose() + { + _multipartContent.Dispose(); + } + } +} diff --git a/tests/Utility/ResponseToolsTests.cs b/tests/Utility/ResponseToolsTests.cs deleted file mode 100644 index 3f1fb8fe8..000000000 --- a/tests/Utility/ResponseToolsTests.cs +++ /dev/null @@ -1,411 +0,0 @@ -using System; -using System.ClientModel; -using System.ClientModel.Primitives; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Moq; -using NUnit.Framework; -using OpenAI.Agents; -using OpenAI.Embeddings; -using OpenAI.Responses; - -namespace OpenAI.Tests.Utility; - -[TestFixture] -[Category("Utility")] -public class ResponseToolsTests : ToolsTestsBase -{ - private Mock mockEmbeddingClient; - - [SetUp] - public void Setup() - { - mockEmbeddingClient = new Mock("text-embedding-ada-002", new ApiKeyCredential("test-key")); - } - - [Test] - public void CanAddLocalTools() - { - var tools = new ResponseTools(); - tools.AddFunctionTools(typeof(TestTools)); - - Assert.That(tools.Tools, Has.Count.EqualTo(6)); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("Echo"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("Add"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("Multiply"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("IsGreaterThan"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("Divide"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("ConcatWithBool"))); - } - - [Test] - public void CanAddLocalAsyncTools() - { - var tools = new ResponseTools(); - tools.AddFunctionTools(typeof(TestToolsAsync)); - - Assert.That(tools.Tools, Has.Count.EqualTo(6)); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("EchoAsync"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("AddAsync"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("MultiplyAsync"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("IsGreaterThanAsync"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("DivideAsync"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("ConcatWithBoolAsync"))); - } - - [Test] - public async Task CanCallToolAsync() - { - var tools = new ResponseTools(); - tools.AddFunctionTools(typeof(TestTools)); - - var toolCalls = new[] - { - new FunctionCallResponseItem("call1", "Echo", BinaryData.FromString(@"{""message"": ""Hello""}")), - new FunctionCallResponseItem("call2", "Add", BinaryData.FromString(@"{""a"": 2, ""b"": 3}")), - new FunctionCallResponseItem("call3", "Multiply", BinaryData.FromString(@"{""x"": 2.5, ""y"": 3.0}")), - new FunctionCallResponseItem("call4", "IsGreaterThan", BinaryData.FromString(@"{""value1"": 100, ""value2"": 50}")), - new FunctionCallResponseItem("call5", "Divide", BinaryData.FromString(@"{""numerator"": 10.0, ""denominator"": 2.0}")), - new FunctionCallResponseItem("call6", "ConcatWithBool", BinaryData.FromString(@"{""text"": ""Test"", ""flag"": true}")) - }; - - foreach (var toolCall in toolCalls) - { - var result = await tools.CallAsync(toolCall); - Assert.That(result.CallId, Is.EqualTo(toolCall.CallId)); - switch (toolCall.CallId) - { - case "call1": - Assert.That(result.FunctionOutput, Is.EqualTo("Hello")); - break; - case "call2": - Assert.That(result.FunctionOutput, Is.EqualTo("5")); - break; - case "call3": - Assert.That(result.FunctionOutput, Is.EqualTo("7.5")); - break; - case "call4": - Assert.That(result.FunctionOutput, Is.EqualTo("True")); - break; - case "call5": - Assert.That(result.FunctionOutput, Is.EqualTo("5")); - break; - case "call6": - Assert.That(result.FunctionOutput, Is.EqualTo("Test:True")); - break; - } - } - } - - [Test] - public async Task CanCallAsyncToolsAsync() - { - var tools = new ResponseTools(); - tools.AddFunctionTools(typeof(TestToolsAsync)); - - var toolCalls = new[] - { - new FunctionCallResponseItem("call1", "EchoAsync", BinaryData.FromString(@"{""message"": ""Hello""}")), - new FunctionCallResponseItem("call2", "AddAsync", BinaryData.FromString(@"{""a"": 2, ""b"": 3}")), - new FunctionCallResponseItem("call3", "MultiplyAsync", BinaryData.FromString(@"{""x"": 2.5, ""y"": 3.0}")), - new FunctionCallResponseItem("call4", "IsGreaterThanAsync", BinaryData.FromString(@"{""value1"": 100, ""value2"": 50}")), - new FunctionCallResponseItem("call5", "DivideAsync", BinaryData.FromString(@"{""numerator"": 10.0, ""denominator"": 2.0}")), - new FunctionCallResponseItem("call6", "ConcatWithBoolAsync", BinaryData.FromString(@"{""text"": ""Test"", ""flag"": true}")) - }; - - foreach (var toolCall in toolCalls) - { - var result = await tools.CallAsync(toolCall); - Assert.That(result.CallId, Is.EqualTo(toolCall.CallId)); - switch (toolCall.CallId) - { - case "call1": - Assert.That(result.FunctionOutput, Is.EqualTo("Hello")); - break; - case "call2": - Assert.That(result.FunctionOutput, Is.EqualTo("5")); - break; - case "call3": - Assert.That(result.FunctionOutput, Is.EqualTo("7.5")); - break; - case "call4": - Assert.That(result.FunctionOutput, Is.EqualTo("True")); - break; - case "call5": - Assert.That(result.FunctionOutput, Is.EqualTo("5")); - break; - case "call6": - Assert.That(result.FunctionOutput, Is.EqualTo("Test:True")); - break; - } - } - } - - [Test] - public void CreatesResponseOptionsWithTools() - { - var tools = new ResponseTools(); - tools.AddFunctionTools(typeof(TestTools)); - - var options = tools.ToResponseCreationOptions(); - - Assert.That(options.Tools, Has.Count.EqualTo(6)); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("Echo"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("Add"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("Multiply"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("IsGreaterThan"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("Divide"))); - Assert.That(tools.Tools.Any(t => ((string)t.GetType().GetProperty("Name").GetValue(t)).Contains("ConcatWithBool"))); - } - - [Test] - public async Task CanFilterToolsByRelevance() - { - // Setup mock embedding client to return a mock response - var embeddings = new[] - { - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.8f, 0.5f }), - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.6f, 0.4f }), - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.3f, 0.2f }) - }; - var embeddingCollection = OpenAIEmbeddingsModelFactory.OpenAIEmbeddingCollection( - items: embeddings, - model: "text-embedding-ada-002", - usage: OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(30, 30)); - var mockResponse = new MockPipelineResponse(200); - - mockEmbeddingClient - .Setup(c => c.GenerateEmbeddingAsync( - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(ClientResult.FromValue(embeddings[0], mockResponse)); - - mockEmbeddingClient - .Setup(c => c.GenerateEmbeddingsAsync( - It.IsAny>(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(ClientResult.FromValue(embeddingCollection, mockResponse)); - - var tools = new ResponseTools(mockEmbeddingClient.Object); - tools.AddFunctionTools(typeof(TestTools)); - - var options = await tools.ToResponseCreationOptionsAsync("Need to add two numbers", 1, 0.5f); - - Assert.That(options.Tools, Has.Count.LessThanOrEqualTo(1)); - } - - [Test] - public async Task ReturnsErrorForNonExistentTool() - { - var tools = new ResponseTools(); - var toolCall = new FunctionCallResponseItem("call1", "NonExistentTool", BinaryData.FromString("{}")); - - var result = await tools.CallAsync(toolCall); - Assert.That(result.FunctionOutput, Does.StartWith("I don't have a tool called")); - } - - [Test] - public async Task AddMcpToolsAsync_AddsToolsCorrectly() - { - // Arrange - var mcpEndpoint = new Uri("http://localhost:1234"); - var mockToolsResponse = BinaryData.FromString(@" - { - ""tools"": [ - { - ""name"": ""mcp-tool-1"", - ""description"": ""This is the first MCP tool."", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""param1"": { - ""type"": ""string"", - ""description"": ""The first param."" - }, - ""param2"": { - ""type"": ""string"", - ""description"": ""The second param."" - } - }, - ""required"": [""param1""] - } - }, - { - ""name"": ""mcp-tool-2"", - ""description"": ""This is the second MCP tool."", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""param1"": { - ""type"": ""string"", - ""description"": ""The first param."" - }, - ""param2"": { - ""type"": ""string"", - ""description"": ""The second param."" - } - }, - ""required"": [] - } - } - ] - }"); - - var responsesByTool = new Dictionary - { - ["mcp-tool-1"] = "\"tool1 result\"", - ["mcp-tool-2"] = "\"tool2 result\"" - }; - - var testClient = new TestMcpClient( - mcpEndpoint, - mockToolsResponse, - toolName => BinaryData.FromString(responsesByTool[toolName.Split('_').Last()])); - var tools = new ResponseTools(); - - // Act - await tools.AddMcpToolsAsync(testClient); - - // Assert - Assert.That(tools.Tools, Has.Count.EqualTo(2)); - var toolNames = tools.Tools.Select(t => (string)t.GetType().GetProperty("Name").GetValue(t)).ToList(); - Assert.That(toolNames, Contains.Item("localhost1234_-_mcp-tool-1")); - Assert.That(toolNames, Contains.Item("localhost1234_-_mcp-tool-2")); - - // Verify we can call the tools with different responses - var toolCall = new FunctionCallResponseItem("call1", "localhost1234_-_mcp-tool-1", BinaryData.FromString(@"{""param1"": ""test""}")); - var result = await tools.CallAsync(toolCall); - Assert.That(result.FunctionOutput, Is.EqualTo("\"tool1 result\"")); - - var toolCall2 = new FunctionCallResponseItem("call2", "localhost1234_-_mcp-tool-2", BinaryData.FromString(@"{""param2"": ""test""}")); - var result2 = await tools.CallAsync(toolCall2); - Assert.That(result2.FunctionOutput, Is.EqualTo("\"tool2 result\"")); - } - - [Test] - public async Task CreateResponseOptions_WithMaxToolsParameter_FiltersTools() - { - // Arrange - var mcpEndpoint = new Uri("http://localhost:1234"); - var mockToolsResponse = BinaryData.FromString(@" - { - ""tools"": [ - { - ""name"": ""math-tool"", - ""description"": ""Tool for performing mathematical calculations"", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""expression"": { - ""type"": ""string"", - ""description"": ""The mathematical expression to evaluate"" - } - } - } - }, - { - ""name"": ""weather-tool"", - ""description"": ""Tool for getting weather information"", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""location"": { - ""type"": ""string"", - ""description"": ""The location to get weather for"" - } - } - } - }, - { - ""name"": ""translate-tool"", - ""description"": ""Tool for translating text between languages"", - ""inputSchema"": { - ""type"": ""object"", - ""properties"": { - ""text"": { - ""type"": ""string"", - ""description"": ""Text to translate"" - }, - ""targetLanguage"": { - ""type"": ""string"", - ""description"": ""Target language code"" - } - } - } - } - ] - }"); - - // Setup mock embedding responses - var embeddings = new[] - { - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.8f, 0.5f }), - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.6f, 0.4f }), - OpenAIEmbeddingsModelFactory.OpenAIEmbedding(vector: new[] { 0.3f, 0.2f }) - }; - var embeddingCollection = OpenAIEmbeddingsModelFactory.OpenAIEmbeddingCollection( - items: embeddings, - model: "text-embedding-ada-002", - usage: OpenAIEmbeddingsModelFactory.EmbeddingTokenUsage(30, 30)); - var mockResponse = new MockPipelineResponse(200); - - mockEmbeddingClient - .Setup(c => c.GenerateEmbeddingAsync( - It.IsAny(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(ClientResult.FromValue(embeddings[0], mockResponse)); - - mockEmbeddingClient - .Setup(c => c.GenerateEmbeddingsAsync( - It.IsAny>(), - It.IsAny(), - It.IsAny())) - .ReturnsAsync(ClientResult.FromValue(embeddingCollection, mockResponse)); - - var responsesByTool = new Dictionary - { - ["math-tool"] = "\"math result\"", - ["weather-tool"] = "\"weather result\"", - ["translate-tool"] = "\"translate result\"" - }; - - var testClient = new TestMcpClient( - mcpEndpoint, - mockToolsResponse, - toolName => BinaryData.FromString(responsesByTool[toolName.Split('_').Last()])); - var tools = new ResponseTools(mockEmbeddingClient.Object); - - // Add the tools - await tools.AddMcpToolsAsync(testClient); - - // Act & Assert - // Test with maxTools = 1 - var options1 = await tools.ToResponseCreationOptionsAsync("calculate 2+2", 1, 0.5f); - Assert.That(options1.Tools, Has.Count.EqualTo(1)); - - // Test with maxTools = 2 - var options2 = await tools.ToResponseCreationOptionsAsync("calculate 2+2", 2, 0.5f); - Assert.That(options2.Tools, Has.Count.EqualTo(2)); - - // Test that tool choice affects results - var optionsWithToolChoice = await tools.ToResponseCreationOptionsAsync("calculate 2+2", 1, 0.5f); - optionsWithToolChoice.ToolChoice = ResponseToolChoice.CreateRequiredChoice(); - - Assert.That(optionsWithToolChoice.ToolChoice, Is.Not.Null); - Assert.That(optionsWithToolChoice.Tools, Has.Count.EqualTo(1)); - - // Verify we can still call the filtered tools - var toolCall = new FunctionCallResponseItem( - "call1", - "localhost1234_-_math-tool", - BinaryData.FromString(@"{""expression"": ""2+2""}")); - var result = await tools.CallAsync(toolCall); - Assert.That(result.CallId, Is.EqualTo("call1")); - Assert.That(result.FunctionOutput, Is.EqualTo("\"math result\"")); - } -} \ No newline at end of file diff --git a/tests/Utility/TestHelpers.cs b/tests/Utility/TestHelpers.cs index 77134bedc..598c4cb79 100644 --- a/tests/Utility/TestHelpers.cs +++ b/tests/Utility/TestHelpers.cs @@ -9,7 +9,7 @@ using OpenAI.Images; using OpenAI.Models; using OpenAI.Moderations; -using OpenAI.RealtimeConversation; +using OpenAI.Realtime; using OpenAI.Responses; using OpenAI.VectorStores; using System; @@ -18,6 +18,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Net; using System.Text.RegularExpressions; [assembly: LevelOfParallelism(8)] @@ -31,6 +32,7 @@ public enum TestScenario Assistants, Audio_TTS, Audio_Whisper, + Audio_Gpt_4o_Mini_Transcribe, Batch, Chat, Embeddings, @@ -40,43 +42,69 @@ public enum TestScenario LegacyCompletions, Models, Moderations, - RealtimeConversation, + Realtime, Responses, VectorStores, TopLevel, } + public static string GetModelForScenario(TestScenario testScenario) => testScenario switch + { + TestScenario.Assistants => null, + TestScenario.Audio_TTS => "tts-1", + TestScenario.Audio_Whisper => "whisper-1", + TestScenario.Audio_Gpt_4o_Mini_Transcribe => "gpt-4o-mini-transcribe", + TestScenario.Batch => null, + TestScenario.Chat => "gpt-4o-mini", + TestScenario.Embeddings => "text-embedding-3-small", + TestScenario.Files => null, + TestScenario.FineTuning => null, + TestScenario.Images => "gpt-image-1", + TestScenario.Models => null, + TestScenario.Moderations => "text-moderation-stable", + TestScenario.VectorStores => null, + TestScenario.TopLevel => null, + TestScenario.Realtime => "gpt-4o-realtime-preview-2024-10-01", + TestScenario.Responses => "gpt-4o-mini", + _ => throw new NotImplementedException(), + }; + public static OpenAIClient GetTestTopLevelClient() => GetTestClient(TestScenario.TopLevel); + public static ApiKeyCredential GetTestApiKeyCredential() + => new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + public static T GetTestClient(TestScenario scenario, string overrideModel = null, OpenAIClientOptions options = default) { options ??= new(); - ApiKeyCredential credential = new(Environment.GetEnvironmentVariable("OPENAI_API_KEY")); + ApiKeyCredential credential = GetTestApiKeyCredential(); options.AddPolicy(GetDumpPolicy(), PipelinePosition.BeforeTransport); + string model = overrideModel ?? GetModelForScenario(scenario); object clientObject = scenario switch { #pragma warning disable OPENAI001 TestScenario.Assistants => new AssistantClient(credential, options), #pragma warning restore OPENAI001 - TestScenario.Audio_TTS => new AudioClient(overrideModel ?? "tts-1", credential, options), - TestScenario.Audio_Whisper => new AudioClient(overrideModel ?? "whisper-1", credential, options), + TestScenario.Audio_TTS => new AudioClient(model, credential, options), + TestScenario.Audio_Whisper => new AudioClient(model, credential, options), + TestScenario.Audio_Gpt_4o_Mini_Transcribe => new AudioClient(model, credential, options), TestScenario.Batch => new BatchClient(credential, options), - TestScenario.Chat => new ChatClient(overrideModel ?? "gpt-4o-mini", credential, options), - TestScenario.Embeddings => new EmbeddingClient(overrideModel ?? "text-embedding-3-small", credential, options), + TestScenario.Chat => new ChatClient(model, credential, options), + TestScenario.Embeddings => new EmbeddingClient(model, credential, options), TestScenario.Files => new OpenAIFileClient(credential, options), TestScenario.FineTuning => new FineTuningClient(credential, options), - TestScenario.Images => new ImageClient(overrideModel ?? "dall-e-3", credential, options), + TestScenario.Images => new ImageClient(model, credential, options), TestScenario.Models => new OpenAIModelClient(credential, options), - TestScenario.Moderations => new ModerationClient(overrideModel ?? "text-moderation-stable", credential, options), + TestScenario.Moderations => new ModerationClient(model, credential, options), #pragma warning disable OPENAI001 TestScenario.VectorStores => new VectorStoreClient(credential, options), #pragma warning restore OPENAI001 TestScenario.TopLevel => new OpenAIClient(credential, options), #pragma warning disable OPENAI002 - TestScenario.RealtimeConversation => new RealtimeConversationClient(overrideModel ?? "gpt-4o-realtime-preview-2024-10-01", credential, options), + TestScenario.Realtime => new RealtimeClient(credential, options), #pragma warning restore #pragma warning disable OPENAI003 - TestScenario.Responses => new OpenAIResponseClient(overrideModel ?? "gpt-4o-mini", credential, options), + TestScenario.Responses => new OpenAIResponseClient(model, credential, options), #pragma warning restore _ => throw new NotImplementedException(), }; @@ -105,6 +133,7 @@ private static PipelinePolicy GetDumpPolicy() stream.Position = 0; using StreamReader reader = new(stream); string requestDump = reader.ReadToEnd(); + stream.Position = 0; requestDump = Regex.Replace(requestDump, @"""data"":[\\w\\r\\n]*""[^""]*""", @"""data"":""..."""); Console.WriteLine(requestDump); } diff --git a/tests/Utility/TestPipelinePolicy.cs b/tests/Utility/TestPipelinePolicy.cs index c596295f4..a9db926f9 100644 --- a/tests/Utility/TestPipelinePolicy.cs +++ b/tests/Utility/TestPipelinePolicy.cs @@ -1,5 +1,4 @@ using System; -using System.ClientModel; using System.ClientModel.Primitives; using System.Collections.Generic; using System.Threading.Tasks; diff --git a/tests/Utility/ToolsTestsBase.cs b/tests/Utility/ToolsTestsBase.cs deleted file mode 100644 index dc4637989..000000000 --- a/tests/Utility/ToolsTestsBase.cs +++ /dev/null @@ -1,94 +0,0 @@ - -using System; -using System.Threading.Tasks; -using OpenAI.Agents; - -namespace OpenAI.Tests.Utility; - -public class ToolsTestsBase -{ - internal class TestTools - { - public static string Echo(string message) => message; - public static int Add(int a, int b) => a + b; - public static double Multiply(double x, double y) => x * y; - public static bool IsGreaterThan(long value1, long value2) => value1 > value2; - public static float Divide(float numerator, float denominator) => numerator / denominator; - public static string ConcatWithBool(string text, bool flag) => $"{text}:{flag}"; - } - - internal class TestToolsAsync - { - public static async Task EchoAsync(string message) - { - await Task.Delay(1); // Simulate async work - return message; - } - - public static async Task AddAsync(int a, int b) - { - await Task.Delay(1); // Simulate async work - return a + b; - } - - public static async Task MultiplyAsync(double x, double y) - { - await Task.Delay(1); // Simulate async work - return x * y; - } - - public static async Task IsGreaterThanAsync(long value1, long value2) - { - await Task.Delay(1); // Simulate async work - return value1 > value2; - } - - public static async Task DivideAsync(float numerator, float denominator) - { - await Task.Delay(1); // Simulate async work - return numerator / denominator; - } - - public static async Task ConcatWithBoolAsync(string text, bool flag) - { - await Task.Delay(1); // Simulate async work - return $"{text}:{flag}"; - } - } - - internal class TestMcpClient : McpClient - { - private readonly BinaryData _toolsResponse; - private readonly Func _toolCallResponseFactory; - private bool _isStarted; - - public TestMcpClient(Uri endpoint, BinaryData toolsResponse, Func toolCallResponseFactory = null) - : base(endpoint) - { - _toolsResponse = toolsResponse; - _toolCallResponseFactory = toolCallResponseFactory ?? (_ => BinaryData.FromString("\"test result\"")); - } - - public override Task StartAsync() - { - _isStarted = true; - return Task.CompletedTask; - } - - public override Task ListToolsAsync() - { - if (!_isStarted) - throw new InvalidOperationException("Session is not initialized. Call StartAsync() first."); - - return Task.FromResult(_toolsResponse); - } - - public override Task CallToolAsync(string toolName, BinaryData parameters) - { - if (!_isStarted) - throw new InvalidOperationException("Session is not initialized. Call StartAsync() first."); - - return Task.FromResult(_toolCallResponseFactory(toolName)); - } - } -} \ No newline at end of file